Commit Graph

75 Commits (e84af81b971c54e502b163bde4a8cc4c64666d19)

Author SHA1 Message Date
OFF0 e84af81b97
relay: add snort.social relay
relay.snort.social seems to be a popular relay, adding a new one
to the hardcoded list of relays, this should be configurable in
the future.

related damus relay is often not responding or slow, but keeping
it for now.
2023-01-27 09:09:51 +01:00
OFF0 5a18e2952c
profile: increase number of notes shown on profile
there is no good reason to show less notes on a profile deeplink.
changed limit to 450, same as explore feed.
2023-01-27 09:02:07 +01:00
OFF0 593d4c6e38
relay: change wlvs.space to eden.land
wss://nostr-relay.wlvs.space is not working anymore, seems they
moved, see:
- https://nostr.ch/cbb15cbd3a36a79a4611ee2852bea503f764c4d48fdb5988b1124a146efccc55
2023-01-27 08:49:11 +01:00
OFF0 e94c9c92da
feed: sort replies by created at
replies were not sorted correctly, reason for this was that an
array of dom elements was sorted, but instead it should sort the
notes.

regression introduced in:
- 2e40a273c4
2023-01-22 15:26:10 +01:00
OFF0 0dcfa6e0a9
feed: show publish note within the same second
a fast relay might return a newly published note within the same
second, but nostrweb only shows notes that are older than now.

was introduced in 4a68940681
2023-01-22 15:23:05 +01:00
OFF0 f4f951469f
feed: less eager rendering
before this change every new incoming text note called a render,
that filters, sorts and iterates all known text notes and creates
missing dom elements and appends into the right place.

this change throttles and debounces (both!) the render function,
that less checks have to be performed, especially on page load
when potentially 100s of events arrive within a short time.

it is important to throttle and debounce, else either the last call
is missed or no render is called while events are being received.

this change surfaced an error in recommend server that depended on
all known text notes already being rendered and inside the dom.
this function should probably be handled by render feed itself.
2023-01-22 10:58:18 +01:00
OFF0 2e40a273c4
nip-10: fix duplicate replies in feed
some replies rendered twice in different positions, seems to be
related to deprecated positional event tags and a regression
introduced in a596121821

on receiving events it analizes the event tags and stores the id
of the replied event so the client can easily search for replies
later. marked tags are prefered with a fallback to positional tags
as described in nip-10.

mentions are ignored at the moment.

example event that had some replies rendered twice:
22e4ea80161ac591059da611d3ab63c583cb1d47a706826db2fc6955ac0a70b5
2023-01-20 20:45:22 +01:00
OFF0 c16ccdb4e3
nip-13: improve mining error
- fix error overlay colors in light-mode
- improve error text, mentoning what happend and what to do
2023-01-18 08:54:45 +01:00
OFF0 8ff1d2c1d8
nip-13: check zero leading bits
before it was only testing if the nonce commitment is high enough
but didn't verify leading zero bits.

with this change rendering checks now the leading zero bits count
of the event id.
2023-01-17 09:11:30 +01:00
OFF0 4a68940681
feed: render only notes from the past
some notes have a created at field that is 1 year in the future,
these are always shown on to of the feed. changed to only render
notes that are from the past.
2023-01-17 08:58:13 +01:00
OFF0 caf5083caa
nip-13: difficulty filter
added a slider to adjust the difficulty filter, current default is
0 so all notes are rendered. increasing the filter will hide notes
with lower difficulty target.

changed the max difficulty from 256 to 32 for now so that the
range slider is usable.

this does not yet hide reactions with lower difficulty.
2023-01-16 09:22:26 +01:00
OFF0 a3de8f1595
feed: improve recommend server (kind 2) messages
- check that event.content is a valid WSS url, drop otherwise
- fix bug that rendered the same server recommendation twice
2023-01-08 16:09:35 +01:00
OFF0 37f0a07cf3
nip-13: show working msg and cancel btn while mining
mining often takes a few seconds. it can be confusing if nothing
happens when a user is publishing their profile, upvoting a note
or posting a new note.

added visual feedback that nostrweb is working with an option to
cancel the mining process.
2023-01-07 23:17:26 +01:00
OFF0 898e7265c2
nip-13: add settings for mining difficulty and timeout
adding settings to change mining difficulty and timeout, so users
can change or disable pow. also added some explanation and link
to nip-13.

setting arbitrary low default to 16 zero mining difficulty and
5 seconds timeout.
2023-01-07 23:17:25 +01:00
OFF0 a596121821
feed: dirty fix to show replies
now that nonce tag is always the first element in the tags list,
a bug surfaced that replies from nostrweb did not render anymore.

reason was that the code expected the first tag to be an e tag and
took its reply-id. this commit is a quick fix that takes the first
reply-id from the first e tag.

the proper way is a bit more complicated as nip-10 defines a
preferred and deprecated way.

this is a quick and dirty fix so that replies work with nip-13 pow
events, but nip-10 event tags should be properly supported but in
a later commit.
2023-01-07 23:17:24 +01:00
OFF0 d5e9ef18c7
nip-13: add timeout and show user facing error if it exceeds
mining may take a long time if the mining difficulty is high.

calculating pow for text notes, upvotes and profile meta
data now has a timeout of 10s. if the timeout exceeds a user
facing error is shown with the option to try again.

the error is currently very basic, and only displays timeout -
something went wrong, cancel and try again button.
2023-01-07 23:17:23 +01:00
OFF0 a1b1f3baee
nip-13: mine pow async in worker any only invoke noxy with pow
added pow to text notes, reactions and metadata events. pow is
mined async in a worker so that the main process does not freeze.

noxy profile images, link and image previews are now now only
invoked if an event has some valid work proof. noxy can decide
if there is enough work and whether or not to serve data for a
certain event.

target difficulty can be implemented in a later step, this change
only check if there is any valid nonce tag with commitment target
greater than 0.
2023-01-07 23:17:12 +01:00
OFF0 7edf1151a6
nip-25: use proper reacted to e and p tags
the actual event that is being reacted must be the last event tag,
was wrongly using the first one and displayed wrong star if tags
had more than 1 event tag.

upvoting now also includes e and p tags from the event that is
upvoted.

see also https://github.com/nostr-protocol/nips/blob/master/25.md
2023-01-06 12:53:29 +01:00
OFF0 485510314a
relays: update list of relays
adding damus again (was disabled when it was down and heavy spam
happened last year), remove nostr.sandwich.farm as it currently
errors with '502 Bad Gateway'.
2023-01-04 17:38:12 +01:00
OFF0 7cec00805e
feed: increase filter limit to 450
was accidentally lowered in cd99b5e5c1
2022-12-18 23:33:05 +01:00
OFF0 c88dfa03b9
relay: add new relays and temp disable relay.damus.io
relay.damus.io seems to be down, added a few alternatives.
2022-12-18 23:31:13 +01:00
OFF0 f26cb737a4
profile: fix old profile pic still showing
The profile image never changed until a new one is successfully
loaded. This fix clears the picture before loading a new one.
2022-12-18 23:23:37 +01:00
OFF0 cd99b5e5c1
feed: add deeplinking and browser history
Added deeplinks with browser history support. Each note and author
have now a detail view under nostr.ch/<event-id-or-pubkey> in a
future commit also /e/<event-id> and /p/<pubkey> could be supported.

User can now navigate with browser back (with the expection of the
settings overlay).

Not everything is supported in the detail view (yet) i.e reply and
stars are partially working (dont update visually), leaving this as
open bug. This should fix itself once only 1 render container is
used instead of different divs in the html for each view.

Ideally the detail view should also query for related events,
something to add in a future commit
2022-12-18 22:50:54 +01:00
OFF0 23619bbaaa
noxy: log more useful response error 2022-12-18 22:50:53 +01:00
OFF0 44c1af2381
profile: update kind 0 name and picture
Notes often miss name or picture of authors if the note was
rendered before any metadata (kind 0) has been recieved.

Update name and picture of existing notes. Pictures are only
updated if a valid url.
2022-12-18 22:50:52 +01:00
alex 343413355f
pool: add relay.nostr.ch
this is another relay, so we have two to play with. this one is running
on the same machine where live nostrweb is hosted at.

at the moment, relay is running nostr-rs-relay v0.7.2:

    $ curl -H 'accept: application/nostr+json' https://relay.nostr.ch/
    {
      "id": "wss://relay.nostr.ch/",
      "name": "a nostr relay",
      "description": "just another nostr relay",
      "supported_nips": [
        1,
        2,
        9,
        11,
        12,
        15,
        16,
        20,
        22,
        26
      ],
      "software": "https://git.sr.ht/~gheartsfield/nostr-rs-relay",
      "version": "0.7.2"
    }
2022-12-10 23:22:24 +01:00
OFF0 e2431c7e60
profile: support kind 0 metadata events
Added simple profile form to the setting view to send kind 0
metdata such as: name, about and picture.
2022-12-10 16:56:09 +01:00
OFF0 9df0f723f2
preview: dont render empty meta fields
Metadata can contain empty fields or broken images. Improved
rendering of meta preview links with missing info, also added a
subtile transparent dark background color to preview images, as
some images contain white text on transparent background and are
invisible in light mode.
2022-12-10 16:48:24 +01:00
OFF0 b321acde02
noxy: add simple fetch queue and wait for meta data response
Instead of just blindly fetch noxy requests, this adds a simple
fetch queue and waits until the pending response is done. It
continues with the next one in the queue  whichever seen first,
This is not in chronological order, but incoming event order
(incoming events from different relays are probably out of order).
2022-12-10 14:11:04 +01:00
OFF0 a580bc67b2
noxy: add lazy load attribute to noxy images
Only for browsers that support loading=lazy attribute, but this
should reduce the load on noxy and only fetch images that are
relevant (in the viewport of close to it).
2022-12-10 14:11:03 +01:00
OFF0 2d2643c2c8
feed: display link preview with noxy
fetches the first link and shows it below a text note, all
resources are prxied through noxy.

see nostr/noxy#2
2022-12-10 14:11:00 +01:00
OFF0 0047c0bdc0
settings: document code on when exactly the pubkey is regenerated
The pubkey should not always be regenerated when a privatekey is
pasted. The reason is that on paste event is fired before the
privateKeyInput value is updated.

Added code comments on when the condition passes and should be save
to re-generate the pubkey.
2022-12-10 14:05:46 +01:00
OFF0 d8f71b74ec
send: hide new message afer successful send
The write new text note form should be hidden after successful send.
2022-12-10 09:20:38 +01:00
OFF0 96087dc041
feed: fix multiple upvotes (reactions)
Fixes error when upvoting already starred events.

Now the tooltip should display the reactions again.
2022-12-09 22:19:26 +01:00
OFF0 71945b105f
settings: pasting private key should update pubkey
If the user pastes a private-key and the pubkey field is empty,
it should be ok to generate and autofill the pubkey without
confusing the user. There might be circumstances where it is
preferred to see an error if the pubkey does not correspond with
the private key.

Added an on paste event listener that tries to generate and auto-
fill the pubkey (if empty).

Also disabled autocomplete on the settings form to indicate to not
save the key in password manager.
2022-12-09 19:49:24 +01:00
OFF0 8ec9420be8
feed: render links in text notes
Links should be rendered as anchors so that they are clickable.
For now only links starting with http:// https:// or www. are
supported.

Temporary disabled text notes shortening.
2022-12-09 19:42:04 +01:00
OFF0 9711ca2ecf feed: refactor profile image placeholder
Move canvas placeholder image to getMetadata so that the logic is
in one place. Also added an exception for pubkeys starting with
at least 6 zeros to invert the color.
2022-12-09 10:40:13 +00:00
OFF0 11fbc7aa7d
feed: ability to close reply form
This is an approach to close the reply-to-form automatically when
focus is lost and only if the input is empty. A second way to close
the reply-to-form is provided by toggling the reply icon.
2022-12-08 22:41:02 +01:00
OFF0 16eb14d08e
layout: add dummy profile pic to recommend server
Recommend server events looked broken and still showed the old
bubble. Fixed layout and also use dummy pic for recommend server
events.
2022-12-08 08:43:08 +01:00
OFF0 2e94d59028
feed: fix expand long notes
Text notes longer than 280 are shortened and appended with '…' to
indicate that this note can be expanded, but this dotdotdot was
real text and was not removed once the note is expanded.

Changed to showing the dots through CSS and only if the attribute
exists, so it does not show on expanded notes.
2022-12-08 08:03:12 +01:00
OFF0 b4392bf215
layout: highlight kind 0 name and dummy profile pics
- added experimental dummy profile pics
- highlight kind 0 usernames
- improved dark mode colors
2022-12-08 07:47:04 +01:00
OFF0 fecbb8ff50
feed: show picture (kind 0) with noyx
Loading images from random url leaks meta data to other servers.

Enabled showing kind 0 picture from noxy (nostr proxy),
see https://git.qcode.ch/nostr/noxy

Only href that are a valid url and use http(s) should be allowed
to prevent malicious urls such as 'javascript:alert(1)'.

Kept the fallback to the speak bubble if there is no kind 0 event
for this pubkey or picture is missing.
2022-12-07 08:29:57 +01:00
OFF0 6a4266526d
keys: fix key validation
Pub and private key settings only showed errors if both values were
truthy, but it did not validate if one input was falsy, in which
case it only showed the last error.

Removed truthy check as it is not needed.
2022-12-07 08:25:01 +01:00
OFF0 4576355b03
layout: visual interface improvements
- writing a new message is now presented in full-screen, so that
  there are no distractions, i.e. other posts
- added back button and listen to esc key to close new message
- on portrait mode the navigation buttons are now positioned at
  the bottom of the screen
- write new message botton (bubble) is also positioned bottomright
- replies now use a line to the last reply instead of indentation,
  better use of available space, especially on small screen
- ignore newlines at the end of a post
- added subtile growin effect to the multiline textfield, to hint
  that the textarea is growing with more content
2022-12-06 12:04:04 +01:00
OFF0 3ab815c30e
post: remove whitespace of textnote content (trim right only)
Send button should be disabled if there are only white spaces or
newlines, trimming only right as white spaces at the beginning
could mean somethig i.e in markdown.
2022-12-04 18:56:23 +01:00
OFF0 7d9f31f7c6
refactor: use evt as variable name if possible
This was we can use evt.id consistently instead of mental overhead
of textNoteEvent.id
2022-12-04 18:56:21 +01:00
OFF0 06686ba9a7
post: improve write and reply to textnote usability
- use growing textarea input to support multiline textnotes
- keep replyTo id in localstorage instead of global variable
- render reply to form on load if there was a replyTo in storage
2022-12-04 18:56:20 +01:00
OFF0 b10a63b932
comment code about textNoteList and eventRelayMap 2022-12-04 18:55:50 +01:00
OFF0 e9cc165738
utils: move multiline function to domutils 2022-11-27 08:37:09 +01:00
OFF0 409ff80d64
test multiline comments 2022-11-23 20:13:08 +01:00