diff --git a/src/app/development/development.html b/src/app/development/development.html index 2349d1e..73a470b 100644 --- a/src/app/development/development.html +++ b/src/app/development/development.html @@ -18,7 +18,7 @@

- + \ No newline at end of file diff --git a/src/app/relays/relays.html b/src/app/relays/relays.html index c0b9a5e..e30c28e 100644 --- a/src/app/relays/relays.html +++ b/src/app/relays/relays.html @@ -20,5 +20,5 @@ - + diff --git a/src/app/services/data.ts b/src/app/services/data.ts index 5f4530b..a11efe0 100644 --- a/src/app/services/data.ts +++ b/src/app/services/data.ts @@ -83,7 +83,7 @@ export class DataService { } private getArrayFomattedRelayList() { - return this.relayService.items2 + return this.relayService.items .filter((r) => r.public === true) .map((r) => { let relayEntry = ['r', r.url]; @@ -101,7 +101,7 @@ export class DataService { private getJsonFormattedRelayList() { let mappedRelays: any = {}; - this.relayService.items2 + this.relayService.items .filter((r) => r.public) .map((r) => { mappedRelays[r.url] = { diff --git a/src/app/services/relay.ts b/src/app/services/relay.ts index 905744a..bc9bcb5 100644 --- a/src/app/services/relay.ts +++ b/src/app/services/relay.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { LoadMoreOptions, NostrEventDocument, NostrRelay, NostrRelayDocument, NostrRelaySubscription, QueryJob } from './interfaces'; +import { LoadMoreOptions, NostrRelay, NostrRelayDocument, NostrRelaySubscription, QueryJob } from './interfaces'; import { Observable, BehaviorSubject } from 'rxjs'; import { Event, Filter, Kind } from 'nostr-tools'; import { EventService } from './event'; @@ -20,9 +20,7 @@ import { ArticleService } from './article'; providedIn: 'root', }) export class RelayService { - events: NostrEventDocument[] = []; - - items2: NostrRelayDocument[] = []; + items: NostrRelayDocument[] = []; threadSubscription?: string; @@ -30,17 +28,6 @@ export class RelayService { circleEventSubscription?: string; - #eventsChanged: BehaviorSubject = new BehaviorSubject(this.events); - - #filteredEventsChanged: BehaviorSubject = new BehaviorSubject([]); - - #threadedEventsChanged: BehaviorSubject = new BehaviorSubject([]); - - #rootEventsChanged: BehaviorSubject = new BehaviorSubject([]); - - #replyEventsChanged: BehaviorSubject = new BehaviorSubject([]); - - // subs2: NostrRelaySubscription[] = []; subs: Map = new Map(); /** These are relay instances that have connection over WebSocket and holds a reference to database metadata for the relay. */ @@ -48,6 +35,8 @@ export class RelayService { #relaysChanged: BehaviorSubject = new BehaviorSubject(this.relays); + workers: RelayType[] = []; + get relays$(): Observable { return this.#relaysChanged.asObservable(); } @@ -220,8 +209,6 @@ export class RelayService { }); } - workers: RelayType[] = []; - terminate(url: string) { const worker = this.workers.find((r) => r.url == url); @@ -239,7 +226,7 @@ export class RelayService { async setRelayType(url: string, type: number) { const relay = await this.db.storage.getRelay(url); - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (relay) { relay.type = type; @@ -250,7 +237,7 @@ export class RelayService { async setRelayPublic(url: string, publicRelay: boolean) { const relay = await this.db.storage.getRelay(url); - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (relay) { relay.public = publicRelay; @@ -262,7 +249,7 @@ export class RelayService { async setRelayStatus(url: string, status: number) { console.log('setRelayStatus:', status); const relay = await this.db.storage.getRelay(url); - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (relay) { relay.status = status; @@ -274,7 +261,7 @@ export class RelayService { async setRelayEnabled(url: string, enabled: boolean) { console.log('setRelayEnabled:', enabled); const relay = await this.db.storage.getRelay(url); - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (relay) { relay.enabled = enabled; @@ -284,7 +271,7 @@ export class RelayService { } setRelayTimeout(url: string, status: number) { - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (item) { if (item.timeouts == null) { @@ -296,7 +283,7 @@ export class RelayService { } setRelayCounter(url: string) { - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (item) { if (item.eventcount == null) { @@ -309,7 +296,7 @@ export class RelayService { async setRelayNIP11(url: string, data: any) { const relay = await this.db.storage.getRelay(url); - const item = this.items2.find((r) => r.url == url); + const item = this.items.find((r) => r.url == url); if (relay) { if (data.error) { @@ -327,7 +314,7 @@ export class RelayService { } async addRelay(url: string, read: boolean, write: boolean) { - let relay = this.items2.find((r) => r.url == url); + let relay = this.items.find((r) => r.url == url); let type = 1; // Read/Write by default. if (write && !read) { @@ -345,7 +332,7 @@ export class RelayService { }; this.db.storage.putRelay(relay); - this.items2.push(relay); + this.items.push(relay); } else { if (relay.enabled == null) { relay.enabled = true; @@ -366,7 +353,7 @@ export class RelayService { async deleteRelays(keepRelays: string[]) { // Relays to remove - const relaysToRemove = this.items2.filter((r) => keepRelays.indexOf(r.url) == -1); + const relaysToRemove = this.items.filter((r) => keepRelays.indexOf(r.url) == -1); console.log('relaysToRemove:', relaysToRemove); @@ -383,7 +370,7 @@ export class RelayService { } // Relays to keep - this.items2 = this.items2.filter((r) => keepRelays.indexOf(r.url) > -1); + this.items = this.items.filter((r) => keepRelays.indexOf(r.url) > -1); // await this.db.storage.deleteRelays(); @@ -395,8 +382,6 @@ export class RelayService { // this.items2 = []; } - // currentDisplayedContacts: any; - async processEvent(response: RelayResponse) { const originalEvent = response.data; const event = this.eventService.processEvent(originalEvent); @@ -567,28 +552,8 @@ export class RelayService { this.profileService.follow(publicKey); } } - - // this.openImportSheet(dialogData); } } - - // } - - // // Sometimes we might discover newer or older profiles, make sure we only update UI dialog if newer. - // if (this.discoveredProfileDate < data.created_at) { - // this.discoveredProfileDate = data.created_at; - // const following = this.profileService.profile?.following; - // const pubkeys = data.tags.map((t: any[]) => t[1]); - // console.log('FOLLOWING:' + JSON.stringify(following)); - // if (!following) { - // const dialogData: any = { pubkeys: pubkeys, pubkey: data.pubkey }; - // if (data.content) { - // dialogData.relays = JSON.parse(data.content); - // dialogData.relaysCount = Object.keys(dialogData.relays).length; - // } - // this.openImportSheet(dialogData); - // } - // } } else { const existingContacts = await this.db.storage.getContacts(event.pubkey); @@ -763,61 +728,6 @@ export class RelayService { } } - /** Add an in-memory instance of relay and get stored metadata for it. */ - // async addRelay(relay: NostrRelay) { - // const index = this.relays.findIndex((r) => r.url == relay.url); - - // if (index == -1) { - // this.relays.push(relay); - // } else { - // // First initiate a close and then replace it. - // // Attempting to not close existing connections, there is no point in doing so. - // // this.relays[index].close(); - // this.relays[index] = relay; - // } - - // try { - // const url = new URL(relay.url); - // const infoUrl = `https://${url.hostname}`; - - // const rawResponse = await fetch(infoUrl, { - // method: 'GET', - // mode: 'cors', - // headers: { - // Accept: 'application/nostr+json', - // }, - // }); - - // if (rawResponse.status === 200) { - // const content = await rawResponse.json(); - - // relay.metadata.nip11 = content; - // relay.metadata.error = undefined; - // } else { - // relay.metadata.error = `Unable to get NIP-11 data. Status: ${rawResponse.statusText}`; - // } - // } catch (err) { - // console.warn(err); - // relay.metadata.error = `Unable to get NIP-11 data. Status: ${err}`; - // } - - // await this.putRelayMetadata(relay.metadata); - // } - - // async putRelayMetadata(metadata: NostrRelayDocument) { - // // Persist the latest NIP11 metadata on the NostrRelayDocument. - // await this.table.put(metadata); - // this.relaysUpdated(); - // } - - #updated() { - this.#eventsChanged.next(this.events); - this.#filteredEventsChanged.next(this.events); - this.#threadedEventsChanged.next(this.events); - this.#rootEventsChanged.next(this.events); - this.#replyEventsChanged.next(this.events); - } - /** Takes relay in the format used for extensions and adds to persistent storage. */ async appendRelays(relays: any) { let preparedRelays = relays; @@ -845,7 +755,7 @@ export class RelayService { } async deleteRelay(url: string) { - const index = this.items2.findIndex((r) => r.url == url); + const index = this.items.findIndex((r) => r.url == url); if (index == -1) { return; @@ -855,7 +765,7 @@ export class RelayService { worker?.terminate(); await this.db.storage.deleteRelay(url); - this.items2.splice(index, 1); + this.items.splice(index, 1); } connectedRelays() { @@ -899,7 +809,7 @@ export class RelayService { // Spin up all the write-only relays temporarily when kind is contacts or metadata. if (action === 'publish') { // Get all relays that are write-only - const filteredRelays = this.items2.filter((r) => r.type == 3); + const filteredRelays = this.items.filter((r) => r.type == 3); for (let index = 0; index < filteredRelays.length; index++) { const relay = filteredRelays[index]; @@ -922,8 +832,8 @@ export class RelayService { } createRelayWorkers() { - for (let index = 0; index < this.items2.length; index++) { - const relay = this.items2[index]; + for (let index = 0; index < this.items.length; index++) { + const relay = this.items[index]; if (relay.enabled && relay.type < 3) { this.createRelayWorker(relay.url); @@ -932,10 +842,10 @@ export class RelayService { } async initialize() { - this.items2 = await this.db.storage.getRelays(); + this.items = await this.db.storage.getRelays(); // If there are no relay metatadata in database, get it from extension or default - if (this.items2.length == 0) { + if (this.items.length == 0) { let relays = await this.nostr.relays(); // First append whatever the extension give us of relays.