From faca657ce4e340be08329396b2c6b0729ea562eb Mon Sep 17 00:00:00 2001 From: OFF0 Date: Fri, 3 Mar 2023 18:58:29 +0100 Subject: [PATCH] refactor: type subscriptions.ts typed subscribe functions in subscriptions.ts --- src/main.js | 63 ++++------------------------------------ src/subscriptions.ts | 69 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 58 deletions(-) create mode 100644 src/subscriptions.ts diff --git a/src/main.js b/src/main.js index 7e752cc..0434cb0 100644 --- a/src/main.js +++ b/src/main.js @@ -1,5 +1,6 @@ import {generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent} from 'nostr-tools'; -import {publish, sub, unsubAll} from './relays'; +import {sub24hFeed, subNote, subProfile} from './subscriptions' +import {publish} from './relays'; import {bounce} from './utils.js'; import {zeroLeadingBitsCount} from './cryptoutils.js'; import {elem, parseTextContent} from './domutil.js'; @@ -35,59 +36,6 @@ let pubkey = localStorage.getItem('pub_key') || (() => { return pubkey; })(); -function sub24hFeed() { - sub({ - cb: onEvent, - filter: { - kinds: [0, 1, 2, 7], - // until: Math.floor(Date.now() * 0.001), - since: Math.floor((Date.now() * 0.001) - (24 * 60 * 60)), - limit: 50, - } - }); -} - -function subNoteAndProfile(id) { - // view(`/${id}`); // assume text note - subTextNote(id); - subProfile(id); -} - -function subTextNote(eventId) { - sub({ - cb: onEvent, - filter: { - ids: [eventId], - kinds: [1], - limit: 1, - } - }); -} - -function subProfile(pubkey) { - sub({ - cb: (evt, relay) => { - console.log('found profile, unsub subTextNote somehow') - // renderProfile(evt, relay); - // view('/[profile]'); - }, - filter: { - authors: [pubkey], - kinds: [0], - limit: 1, - } - }); - // get notes for profile - sub({ - cb: onEvent, - filter: { - authors: [pubkey], - kinds: [1], - limit: 50, - } - }); -} - const containers = [ // { // id: '/00527c2b28ea78446c148cb40cc6e442ea3d0945ff5a8b71076483398525b54d', @@ -836,19 +784,18 @@ function view(route) { // subscribe and change view function route(path) { - unsubAll(); if (path === '/') { - sub24hFeed(); + sub24hFeed(onEvent); view('/'); } else if (path.length === 64 && path.match(/^\/[0-9a-z]+$/)) { const {type, data} = nip19.decode(path.slice(1)); switch(type) { case 'note': - subNote(data); + subNote(data, onEvent); view(path); break; case 'npub': - subProfile(data); + subProfile(data, onEvent); view(path); break; default: diff --git a/src/subscriptions.ts b/src/subscriptions.ts new file mode 100644 index 0000000..19e63c1 --- /dev/null +++ b/src/subscriptions.ts @@ -0,0 +1,69 @@ +import {Event} from 'nostr-tools'; +import {sub, unsubAll} from './relays'; + +type SubCallback = ( + event: Event, + relay: string, +) => void; + +/** subscribe to global feed */ +export const sub24hFeed = (onEvent: SubCallback) => { + unsubAll(); + sub({ + cb: onEvent, + filter: { + kinds: [0, 1, 2, 7], + // until: Math.floor(Date.now() * 0.001), + since: Math.floor((Date.now() * 0.001) - (24 * 60 * 60)), + limit: 50, + } + }); +}; + +/** subscribe to a note id (nip-19) */ +export const subNote = ( + eventId: string, + onEvent: SubCallback, +) => { + unsubAll(); + sub({ + cb: onEvent, + filter: { + ids: [eventId], + kinds: [1], + limit: 1, + } + }); + sub({ + cb: onEvent, + filter: { + '#e': [eventId], + kinds: [1, 7], + } + }); +}; + +/** subscribe to npub key (nip-19) */ +export const subProfile = ( + pubkey: string, + onEvent: SubCallback, +) => { + unsubAll(); + sub({ + cb: onEvent, + filter: { + authors: [pubkey], + kinds: [0], + limit: 1, + } + }); + // get notes for profile + sub({ + cb: onEvent, + filter: { + authors: [pubkey], + kinds: [1], + limit: 50, + } + }); +};