From a22bec7450b94d32899e9b5967d5a6ab58e8b7f1 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Fri, 8 Dec 2023 20:39:34 +0100 Subject: [PATCH] better socket --- src/services/nostr/handler.ts | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/services/nostr/handler.ts b/src/services/nostr/handler.ts index ee9d796a..de37eced 100644 --- a/src/services/nostr/handler.ts +++ b/src/services/nostr/handler.ts @@ -84,46 +84,35 @@ export default class Handler { constructor(settings: NostrSettings, eventCallback: (event: NostrEvent) => void) { this.settings = settings console.log(settings) + const apps: Record = {} this.settings.apps.forEach(app => { - this.SubForApp(app, eventCallback) + apps[app.publicKey] = app }) - } - - async SubForApp(appInfo: AppInfo, eventCallback: (event: NostrEvent) => void) { - const relay = relayInit(this.settings.relays[0]) - relay.on('connect', () => { - console.log(`connected to ${relay.url}`) - }) - relay.on('error', () => { - console.log(`failed to connect to ${relay.url}`) - }) - - await relay.connect() - console.log("relay connected") - const sub = relay.sub([ + const sub = this.pool.sub(this.settings.relays, [ { since: Math.ceil(Date.now() / 1000), kinds: [21000], - '#p': [appInfo.publicKey], + '#p': Object.keys(apps), } ]) - sub.on("event", async (e) => { + sub.on('event', async (e) => { if (e.kind !== 21000 || !e.pubkey) { return } - //@ts-ignore - const eventId = e.id as string + const app = apps[e.pubkey] + if (!app) { + return + } + const eventId = e.id if (handledEvents.includes(eventId)) { console.log("event already handled") return } handledEvents.push(eventId) const decoded = decodePayload(e.content) - const content = await decryptData(decoded, getSharedSecret(appInfo.privateKey, e.pubkey)) - eventCallback({ id: eventId, content, pub: e.pubkey, appId: appInfo.appId }) - //eventCallback({ id: eventId, content: await nip04.decrypt(appInfo.privateKey, e.pubkey, e.content), pub: e.pubkey, appId: appInfo.appId }) + const content = await decryptData(decoded, getSharedSecret(app.privateKey, e.pubkey)) + eventCallback({ id: eventId, content, pub: e.pubkey, appId: app.appId }) }) - this.subs.push(sub) } async Send(appId: string, data: SendData, relays?: string[]) {