This commit adds a simple in-memory Nostr Event cache, to reduce the
amount of bandwidth used as well as to improve performance.
Testing
-------
Setup:
- Two iPhone simulators running Damus and on different accounts
- Damus version: 774da239b92ed630fbf91fce42d9e233661c0d7f
- Notepush: This commit
- Push notifications turned on, setup to connect to localhost, and configured to receive DM notifications
- Run Notepush with `RUST_LOG=DEBUG` env variable for debug logging
Steps:
1. Send a DM from one account to another.
- Push notification should arrive with a few seconds delay
- Push notification logs should mention that the event was cached
2. Send a DM again.
- Push notification should arrive immediately
3. Wait for more than a minute
4. Send a DM again.
- Push notification should take a few seconds again
- Push notification logs should mention that the cache item expired and was deleted
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Closes: https://github.com/damus-io/notepush/issues/3
This commit refactors nostr_network_helper code without substantial business logic changes.
It improves the code by separating concerns, making it more concise, and less repetitive
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Testing
-------
PASS
Devices: Mix of iPhone simulators and real devices
notepush: This commit
Damus: 4ea6c360e6e33747cb09ecf085049948ec1dadd1 (WIP change from GH issue #2360)
Setup:
- Account A with push notifications enabled, DM notifications enabled,
and "only notifications from following enabled"
- Account A follows B but not C
Steps:
1. Send DM to A from B. Push notification appears
2. Send DM to A from C. Push notification does not appear
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Closes: https://github.com/damus-io/damus/issues/2360
This commit implements basic push notification preferences as well as
the interface to change them.
Furthermore, the API interface was reworked to follow better REST API
conventions.
Testing
--------
PASS
Device: iPhone 15 simulators
iOS: 17.5
Damus: 4ea6c360e6e33747cb09ecf085049948ec1dadd1 (A commit from GH issue #2360)
notepush: This commit
Steps:
1. Disable all types of notifications, except for DMs.
2. Send a like to this user's post. Push notification should not appear. PASS
3. Send a DM to this user's post. Push notification should appear. PASS
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Previously, the nostr event data was being transformed into
serde::Value, which is incompatible with the current notification
extension implementation. This commit fixes that by serializing it all
into a single JSON string
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
This commit should drastically improve performance of the relay.
It reduces contention by removing the mutex on NotificationManager and
replacing it with several smaller mutexes for each shared resource, so
that more operations can happen concurrently.
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
If a relay does not have a user's mutelist, a function in our pipeline
would wait indefinitely, causing all other requests to be locked as
well.
This commit adds a timeout to avoid this issue
Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
Previously, the APNS client would be reinitialized in every send.
This commit makes it so that the client is initialized with the rest of
Notification manager, to avoid performance and token management issues.
This commit brings a compilable, runnable relay draft, with logging
setup, basic README instructions, Mutex protection around shared
resources, implemented with code safety in mind
Notes:
- This is not fully tested
- The mutex design is not the most efficient, and could cause some contention on high traffic
- The REST API is not yet integrated