Nostr Live Audio Spaces: Nostr Notifications/Live Activities
Work must build upon a free open source software (FOSS) project based on JAM Systems as a fork or contribution to this repository: https://github.com/diamsa/jam
To satisfy this bounty, there are three types of enhancements wanted.
It may be appropriate to break these into smaller/separate bounties. Please reach out to me to coordinate.
Terms
is the human readable name or topic of a room refers to the short room name identifier in an audio space that acts as the programmatic reference is the server domain name (e.g. cornychat.com) is a server identifier (e.g. cornychat)
User Status Notifications
- Users should be given an action (button, link, etc) to allow them to quickly set their nostr status
- The status should following NIP-38 Users Statuses
- This is a kind 30315 event which should be structured as follows
{
"kind": 30315,
"content": "<Talking,Listening> in <roomid> at <serverid>",
"tags": [
["d", "general"],
["r", "https://<serverfqdn>/<path-to-room>"],
["expiration", number-that-is-1-hour-from-now]
],
}
- The content of
TalkingorListeningshould be set based on whether the user is on stage or in the audience at the time they choose to publish status - The expiration value can default to 1 hour from now as time in seconds since epoch.
- This event should be signed by the user, and may be signed with a browser extension
Scheduled Events Publishing
- In the Room Settings, if a room is being scheduled for a later date and time, the server should pubish a Nostr Event
- The server should have its own configurable NSEC. The NSEC should be configurable in the ./deployment/.env file, carried through into docker-compose to the server logic
- Scheduled events should prepare Nostr Calendar event NIP-52 for an event
- The structure for the event should be a time-based event kind 31923. The
dtag can be set as the- - . - ➤ Tags for the event do not need to include all participants in
ptags, but should include at least the moderator/owner that set the room settings as a scheduled event - ➤ The value for
locationtag should be set as “online audio space” - ➤ The reference link
rtag should - ➤ This event should be signed by the server key
- ➤ Each time-based event created for a room should be tracked by the server instance in the redis memory store
- ➤ Tags for the event do not need to include all participants in
- Two nostr calendars for the room should be created as a calendar event kind 31924.
- ➤ Calendar with
name“events” should include all events in the future, as well as those that started in the last hour - ➤ Calendar with
name“past events” should be created including all events where the start time is in the past by more than an hour
- ➤ Calendar with
Live Activities Publishing
- When a room is open, a Live Event activity should be created per NIP-53
- A kind 30311 event should be prepared with the following structure
{
"kind": 30311,
"tags": [
["d", "<serverid>-<roomid>"],
["title", "<Room name>"],
["summary", "<description>"],
["image", "<logo uri from room settings ? server logo uri>"],
["t", "#<serverid>"]
["t", "#<roomid>"]
["audiospace", "<url to room>"],
["starts", "<unix timestamp in seconds>"],
["ends", "<unix timestamp in seconds>"],
["status", "<planned, live, ended>"],
["current_participants", "<number>"],
["total_participants", "<number>"],
["p", "91cf9..4e5ca", "wss://provider1.com/", "Host", "<proof>"],
["p", "14aeb..8dad4", "wss://provider2.com/nostr", "Speaker"],
["p", "612ae..e610f", "ws://provider3.com/ws", "Participant"],
["relays", "wss://one.com", "wss://two.com", ...]
],
"content": "",
...
}
- The
dtag should be deterministic based on server identifier and room name. This will be referenced in anyatags for live chat referencing the room. - The event should be signed by server nsec and published to relays
- When room settings are changed, the event should be updated and republished as 30000 series is replaceable events
2023-12-08
- updated to reflect this should build on or fork from https://github.com/diamsa/jam
2023-12-17
- expanded details to reflect this focuses on user status, calendars, and live activities with more guidance
No comments yet.