Add nip 29 room utils

This commit is contained in:
Jon Staab
2025-06-13 17:41:11 -07:00
parent c3cd2e3220
commit 09f6db7eae
19 changed files with 121 additions and 30 deletions
+15 -14
View File
@@ -106,16 +106,17 @@ export const DVM_RESPONSE_OTS = 6900
export const DVM_RESPONSE_OP_RETURN = 6901
export const DVM_RESPONSE_PUBLISH_SCHEDULE = 6905
export const DVM_FEEDBACK = 7000
export const GROUP_ADD_USER = 9000
export const GROUP_REMOVE_USER = 9001
export const GROUP_EDIT_META = 9002
export const GROUP_ADD_PERM = 9003
export const GROUP_REMOVE_PERM = 9004
export const GROUP_DELETE_EVENT = 9005
export const GROUP_EDIT_STATUS = 9006
export const GROUP_CREATE = 9007
export const GROUP_JOIN = 9021
export const GROUP_LEAVE = 9022
export const ROOM_ADD_USER = 9000
export const ROOM_REMOVE_USER = 9001
export const ROOM_EDIT_META = 9002
export const ROOM_ADD_PERM = 9003
export const ROOM_REMOVE_PERM = 9004
export const ROOM_DELETE_EVENT = 9005
export const ROOM_EDIT_STATUS = 9006
export const ROOM_CREATE = 9007
export const ROOM_DELETE = 9008
export const ROOM_JOIN = 9021
export const ROOM_LEAVE = 9022
export const ZAP_GOAL = 9041
export const ZAP_REQUEST = 9734
export const ZAP_RESPONSE = 9735
@@ -128,7 +129,7 @@ export const COMMUNITIES = 10004
export const CHANNELS = 10005
export const BLOCKED_RELAYS = 10006
export const SEARCH_RELAYS = 10007
export const GROUPS = 10009
export const ROOMS = 10009
export const FEEDS = 10014
export const TOPICS = 10015
export const EMOJIS = 10030
@@ -178,9 +179,9 @@ export const EVENT_RSVP = 31925
export const HANDLER_RECOMMENDATION = 31989
export const HANDLER_INFORMATION = 31990
export const COMMUNITY = 34550
export const GROUP = 35834
export const GROUP_META = 39000
export const GROUP_ADMINS = 39001
export const ROOM = 35834
export const ROOM_META = 39000
export const ROOM_ADMINS = 39001
export const DEPRECATED_RELAY_RECOMMENDATION = 2
export const DEPRECATED_DIRECT_MESSAGE = 4
+56
View File
@@ -0,0 +1,56 @@
import {randomId, nthNe} from "@welshman/lib"
import {
ROOM_META,
ROOM_DELETE,
ROOM_CREATE,
ROOM_EDIT_META,
ROOM_JOIN,
ROOM_LEAVE,
} from "./Kinds.js"
import {makeEvent, TrustedEvent, getIdentifier} from "./Events.js"
export type RoomMeta = {
id: string
tags: string[][]
event?: TrustedEvent
}
export type PublishedRoomMeta = Omit<RoomMeta, "event"> & {
event: TrustedEvent
}
export const makeRoomMeta = (room: Partial<RoomMeta> = {}): RoomMeta => ({
id: randomId(),
tags: [],
...room,
})
export const readRoomMeta = (event: TrustedEvent): PublishedRoomMeta => {
if (event.kind !== ROOM_META) {
throw new Error("Invalid group meta event")
}
const id = getIdentifier(event)
if (!id) {
throw new Error("Group meta event had no d tag")
}
const tags = event.tags.filter(nthNe(0, "d"))
return {id, tags, event}
}
export const makeRoomCreateEvent = (room: RoomMeta) =>
makeEvent(ROOM_CREATE, {tags: [["h", room.id]]})
export const makeRoomDeleteEvent = (room: RoomMeta) =>
makeEvent(ROOM_DELETE, {tags: [["h", room.id]]})
export const makeRoomEditEvent = (room: RoomMeta) =>
makeEvent(ROOM_EDIT_META, {tags: [["h", room.id], ...room.tags]})
export const makeRoomJoinEvent = (room: RoomMeta) => makeEvent(ROOM_JOIN, {tags: [["h", room.id]]})
export const makeRoomLeaveEvent = (room: RoomMeta) =>
makeEvent(ROOM_LEAVE, {tags: [["h", room.id]]})
+1
View File
@@ -12,5 +12,6 @@ export * from "./Nip86.js"
export * from "./Nip98.js"
export * from "./Profile.js"
export * from "./Relay.js"
export * from "./Room.js"
export * from "./Tags.js"
export * from "./Zaps.js"