Use welshman kinds

This commit is contained in:
Jon Staab
2024-12-10 13:07:17 -08:00
parent 66f3686ef4
commit a5dfa02771
13 changed files with 36 additions and 53 deletions
+6 -6
View File
@@ -10,6 +10,8 @@ import {
AUTH_JOIN, AUTH_JOIN,
GROUP_JOIN, GROUP_JOIN,
GROUP_LEAVE, GROUP_LEAVE,
GROUPS,
COMMENT,
isSignedEvent, isSignedEvent,
createEvent, createEvent,
displayProfile, displayProfile,
@@ -53,10 +55,8 @@ import {
} from "@welshman/app" } from "@welshman/app"
import type {Relay} from "@welshman/app" import type {Relay} from "@welshman/app"
import { import {
COMMENT,
tagRoom, tagRoom,
userMembership, userMembership,
MEMBERSHIPS,
INDEXER_RELAYS, INDEXER_RELAYS,
NIP46_PERMS, NIP46_PERMS,
loadMembership, loadMembership,
@@ -239,7 +239,7 @@ export const nip29 = {
// List updates // List updates
export const addSpaceMembership = async (url: string) => { export const addSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: GROUPS})
const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf) const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf)
const relays = uniq([...ctx.app.router.FromUser().getUrls(), ...getRelayTagValues(event.tags)]) const relays = uniq([...ctx.app.router.FromUser().getUrls(), ...getRelayTagValues(event.tags)])
@@ -247,7 +247,7 @@ export const addSpaceMembership = async (url: string) => {
} }
export const removeSpaceMembership = async (url: string) => { export const removeSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: GROUPS})
const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = uniq([ const relays = uniq([
@@ -260,7 +260,7 @@ export const removeSpaceMembership = async (url: string) => {
} }
export const addRoomMembership = async (url: string, room: string) => { export const addRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: GROUPS})
const event = await addToListPublicly(list, ["r", url], ["group", room, url]).reconcile( const event = await addToListPublicly(list, ["r", url], ["group", room, url]).reconcile(
nip44EncryptToSelf, nip44EncryptToSelf,
) )
@@ -270,7 +270,7 @@ export const addRoomMembership = async (url: string, room: string) => {
} }
export const removeRoomMembership = async (url: string, room: string) => { export const removeRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: MEMBERSHIPS}) const list = get(userMembership) || makeList({kind: GROUPS})
const pred = (t: string[]) => equals(["group", room, url], t) const pred = (t: string[]) => equals(["group", room, url], t)
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = uniq([ const relays = uniq([
+2 -2
View File
@@ -3,11 +3,11 @@
import {goto} from "$app/navigation" import {goto} from "$app/navigation"
import {ctx, nthEq} from "@welshman/lib" import {ctx, nthEq} from "@welshman/lib"
import {tracker, repository} from "@welshman/app" import {tracker, repository} from "@welshman/app"
import {Address, DIRECT_MESSAGE} from "@welshman/util" import {Address, DIRECT_MESSAGE, MESSAGE, THREAD} from "@welshman/util"
import Button from "@lib/components/Button.svelte" import Button from "@lib/components/Button.svelte"
import Spinner from "@lib/components/Spinner.svelte" import Spinner from "@lib/components/Spinner.svelte"
import NoteCard from "@app/components/NoteCard.svelte" import NoteCard from "@app/components/NoteCard.svelte"
import {deriveEvent, entityLink, ROOM, MESSAGE, THREAD} from "@app/state" import {deriveEvent, entityLink, ROOM} from "@app/state"
import {makeThreadPath, makeRoomPath} from "@app/routes" import {makeThreadPath, makeRoomPath} from "@app/routes"
export let value export let value
+2 -8
View File
@@ -2,19 +2,13 @@
import {page} from "$app/stores" import {page} from "$app/stores"
import {derived} from "svelte/store" import {derived} from "svelte/store"
import {max} from "@welshman/lib" import {max} from "@welshman/lib"
import {matchFilter} from "@welshman/util" import {matchFilter, MESSAGE} from "@welshman/util"
import {pubkey} from "@welshman/app" import {pubkey} from "@welshman/app"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte" import Button from "@lib/components/Button.svelte"
import MenuSpace from "@app/components/MenuSpace.svelte" import MenuSpace from "@app/components/MenuSpace.svelte"
import {checked, getNotification, deriveNotification, THREAD_FILTERS} from "@app/notifications" import {checked, getNotification, deriveNotification, THREAD_FILTERS} from "@app/notifications"
import { import {userMembership, getMembershipRoomsByUrl, deriveEventsForUrl, GENERAL} from "@app/state"
userMembership,
getMembershipRoomsByUrl,
deriveEventsForUrl,
MESSAGE,
GENERAL,
} from "@app/state"
import {makeRoomPath, makeSpacePath} from "@app/routes" import {makeRoomPath, makeSpacePath} from "@app/routes"
import {pushDrawer} from "@app/modal" import {pushDrawer} from "@app/modal"
+2 -1
View File
@@ -5,6 +5,7 @@
import {max} from "@welshman/lib" import {max} from "@welshman/lib"
import {deriveEvents, deriveIsDeleted} from "@welshman/store" import {deriveEvents, deriveIsDeleted} from "@welshman/store"
import type {TrustedEvent} from "@welshman/util" import type {TrustedEvent} from "@welshman/util"
import {COMMENT} from "@welshman/util"
import {thunks, load, pubkey, repository, formatTimestampRelative} from "@welshman/app" import {thunks, load, pubkey, repository, formatTimestampRelative} from "@welshman/app"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
import Tippy from "@lib/components/Tippy.svelte" import Tippy from "@lib/components/Tippy.svelte"
@@ -16,7 +17,7 @@
import {publishDelete, publishReaction} from "@app/commands" import {publishDelete, publishReaction} from "@app/commands"
import {deriveNotification} from "@app/notifications" import {deriveNotification} from "@app/notifications"
import {makeSpacePath} from "@app/routes" import {makeSpacePath} from "@app/routes"
import {COMMENT, PROTECTED} from "@app/state" import {PROTECTED} from "@app/state"
export let url export let url
export let event export let event
+2 -2
View File
@@ -2,7 +2,7 @@
import {onMount} from "svelte" import {onMount} from "svelte"
import type {Readable} from "svelte/store" import type {Readable} from "svelte/store"
import {createEditor, type Editor, EditorContent} from "svelte-tiptap" import {createEditor, type Editor, EditorContent} from "svelte-tiptap"
import {createEvent} from "@welshman/util" import {createEvent, THREAD} from "@welshman/util"
import {publishThunk} from "@welshman/app" import {publishThunk} from "@welshman/app"
import {isMobile} from "@lib/html" import {isMobile} from "@lib/html"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
@@ -11,7 +11,7 @@
import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte"
import {pushToast} from "@app/toast" import {pushToast} from "@app/toast"
import {THREAD, GENERAL, tagRoom, PROTECTED} from "@app/state" import {GENERAL, tagRoom, PROTECTED} from "@app/state"
import {getPubkeyHints} from "@app/commands" import {getPubkeyHints} from "@app/commands"
import {getEditorOptions, getEditorTags} from "@lib/editor" import {getEditorOptions, getEditorTags} from "@lib/editor"
+1 -1
View File
@@ -1,4 +1,5 @@
<script lang="ts"> <script lang="ts">
import {COMMENT} from "@welshman/util"
import {pubkey} from "@welshman/app" import {pubkey} from "@welshman/app"
import Button from "@lib/components/Button.svelte" import Button from "@lib/components/Button.svelte"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
@@ -6,7 +7,6 @@
import ThreadShare from "@app/components/ThreadShare.svelte" import ThreadShare from "@app/components/ThreadShare.svelte"
import ConfirmDelete from "@app/components/ConfirmDelete.svelte" import ConfirmDelete from "@app/components/ConfirmDelete.svelte"
import {pushModal} from "@app/modal" import {pushModal} from "@app/modal"
import {COMMENT} from "@app/state"
export let url export let url
export let event export let event
+2 -10
View File
@@ -4,17 +4,9 @@ import {deriveEvents} from "@welshman/store"
import {repository, pubkey} from "@welshman/app" import {repository, pubkey} from "@welshman/app"
import {prop, max, sortBy, assoc, lt, now} from "@welshman/lib" import {prop, max, sortBy, assoc, lt, now} from "@welshman/lib"
import type {Filter, TrustedEvent} from "@welshman/util" import type {Filter, TrustedEvent} from "@welshman/util"
import {DIRECT_MESSAGE} from "@welshman/util" import {DIRECT_MESSAGE, MESSAGE, THREAD, COMMENT} from "@welshman/util"
import {makeSpacePath} from "@app/routes" import {makeSpacePath} from "@app/routes"
import { import {LEGACY_THREAD, deriveEventsForUrl, getMembershipUrls, userMembership} from "@app/state"
MESSAGE,
THREAD,
LEGACY_THREAD,
COMMENT,
deriveEventsForUrl,
getMembershipUrls,
userMembership,
} from "@app/state"
// Checked state // Checked state
+7 -11
View File
@@ -27,6 +27,10 @@ import {
ZAP_RESPONSE, ZAP_RESPONSE,
DIRECT_MESSAGE, DIRECT_MESSAGE,
GROUP_META, GROUP_META,
MESSAGE,
GROUPS,
THREAD,
COMMENT,
getGroupTags, getGroupTags,
getRelayTagValues, getRelayTagValues,
getPubkeyTagValues, getPubkeyTagValues,
@@ -71,18 +75,10 @@ export const GENERAL = "_"
export const PROTECTED = ["-"] export const PROTECTED = ["-"]
export const MESSAGE = 9
export const LEGACY_MESSAGE = 209 export const LEGACY_MESSAGE = 209
export const THREAD = 11
export const LEGACY_THREAD = 309 export const LEGACY_THREAD = 309
export const COMMENT = 1111
export const MEMBERSHIPS = 10009
export const INDEXER_RELAYS = [ export const INDEXER_RELAYS = [
"wss://purplepag.es/", "wss://purplepag.es/",
"wss://relay.damus.io/", "wss://relay.damus.io/",
@@ -115,7 +111,7 @@ export const REACTION_KINDS = [REACTION, ZAP_RESPONSE]
export const NIP46_PERMS = export const NIP46_PERMS =
"nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt," + "nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt," +
[CLIENT_AUTH, AUTH_JOIN, MESSAGE, THREAD, COMMENT, MEMBERSHIPS, WRAP, REACTION] [CLIENT_AUTH, AUTH_JOIN, MESSAGE, THREAD, COMMENT, GROUPS, WRAP, REACTION]
.map(k => `sign_event:${k}`) .map(k => `sign_event:${k}`)
.join(",") .join(",")
@@ -372,7 +368,7 @@ export const getMembershipRoomsByUrl = (url: string, list?: List) =>
) )
export const memberships = deriveEventsMapped<PublishedList>(repository, { export const memberships = deriveEventsMapped<PublishedList>(repository, {
filters: [{kinds: [MEMBERSHIPS]}], filters: [{kinds: [GROUPS]}],
itemToEvent: item => item.event, itemToEvent: item => item.event,
eventToItem: (event: TrustedEvent) => readList(asDecryptedEvent(event)), eventToItem: (event: TrustedEvent) => readList(asDecryptedEvent(event)),
}) })
@@ -388,7 +384,7 @@ export const {
load: (pubkey: string, request: Partial<SubscribeRequestWithHandlers> = {}) => load: (pubkey: string, request: Partial<SubscribeRequestWithHandlers> = {}) =>
load({ load({
...request, ...request,
filters: [{kinds: [MEMBERSHIPS], authors: [pubkey]}], filters: [{kinds: [GROUPS], authors: [pubkey]}],
}), }),
}) })
+3 -3
View File
@@ -15,6 +15,9 @@
RELAYS, RELAYS,
INBOX_RELAYS, INBOX_RELAYS,
WRAP, WRAP,
MESSAGE,
COMMENT,
THREAD,
getPubkeyTagValues, getPubkeyTagValues,
getListTags, getListTags,
} from "@welshman/util" } from "@welshman/util"
@@ -55,9 +58,6 @@
userMembership, userMembership,
ensureUnwrapped, ensureUnwrapped,
canDecrypt, canDecrypt,
MESSAGE,
COMMENT,
THREAD,
GENERAL, GENERAL,
} from "@app/state" } from "@app/state"
import {loadUserData, subscribePersistent} from "@app/commands" import {loadUserData, subscribePersistent} from "@app/commands"
+3 -3
View File
@@ -3,7 +3,7 @@
import {page} from "$app/stores" import {page} from "$app/stores"
import {now} from "@welshman/lib" import {now} from "@welshman/lib"
import {subscribe} from "@welshman/app" import {subscribe} from "@welshman/app"
import {DELETE, REACTION} from "@welshman/util" import {DELETE, REACTION, GROUPS} from "@welshman/util"
import Page from "@lib/components/Page.svelte" import Page from "@lib/components/Page.svelte"
import SecondaryNav from "@lib/components/SecondaryNav.svelte" import SecondaryNav from "@lib/components/SecondaryNav.svelte"
import MenuSpace from "@app/components/MenuSpace.svelte" import MenuSpace from "@app/components/MenuSpace.svelte"
@@ -12,7 +12,7 @@
import {pushModal} from "@app/modal" import {pushModal} from "@app/modal"
import {setChecked} from "@app/notifications" import {setChecked} from "@app/notifications"
import {checkRelayConnection, checkRelayAuth, checkRelayAccess} from "@app/commands" import {checkRelayConnection, checkRelayAuth, checkRelayAccess} from "@app/commands"
import {decodeRelay, MEMBERSHIPS} from "@app/state" import {decodeRelay} from "@app/state"
import {deriveNotification, SPACE_FILTERS} from "@app/notifications" import {deriveNotification, SPACE_FILTERS} from "@app/notifications"
const url = decodeRelay($page.params.relay) const url = decodeRelay($page.params.relay)
@@ -47,7 +47,7 @@
const sub = subscribe({ const sub = subscribe({
relays: [url], relays: [url],
filters: [{kinds: [MEMBERSHIPS]}, {kinds: [DELETE, REACTION], since: now()}], filters: [{kinds: [GROUPS]}, {kinds: [DELETE, REACTION], since: now()}],
}) })
return () => { return () => {
@@ -8,7 +8,7 @@
import {sleep, now, ctx} from "@welshman/lib" import {sleep, now, ctx} from "@welshman/lib"
import type {TrustedEvent, EventContent} from "@welshman/util" import type {TrustedEvent, EventContent} from "@welshman/util"
import {throttled} from "@welshman/store" import {throttled} from "@welshman/store"
import {createEvent, DELETE} from "@welshman/util" import {createEvent, DELETE, MESSAGE} from "@welshman/util"
import {PublishStatus} from "@welshman/net" import {PublishStatus} from "@welshman/net"
import {formatTimestampAsDate, load, publishThunk, deriveRelay} from "@welshman/app" import {formatTimestampAsDate, load, publishThunk, deriveRelay} from "@welshman/app"
import {slide} from "@lib/transition" import {slide} from "@lib/transition"
@@ -30,7 +30,6 @@
deriveChannelMessages, deriveChannelMessages,
GENERAL, GENERAL,
tagRoom, tagRoom,
MESSAGE,
LEGACY_MESSAGE, LEGACY_MESSAGE,
getMembershipRoomsByUrl, getMembershipRoomsByUrl,
} from "@app/state" } from "@app/state"
@@ -3,7 +3,7 @@
import {derived} from "svelte/store" import {derived} from "svelte/store"
import {page} from "$app/stores" import {page} from "$app/stores"
import {sortBy, min, nthEq, sleep} from "@welshman/lib" import {sortBy, min, nthEq, sleep} from "@welshman/lib"
import {getListTags, getPubkeyTagValues} from "@welshman/util" import {getListTags, getPubkeyTagValues, THREAD, COMMENT} from "@welshman/util"
import {throttled} from "@welshman/store" import {throttled} from "@welshman/store"
import {feedsFromFilters, makeIntersectionFeed, makeRelayFeed} from "@welshman/feeds" import {feedsFromFilters, makeIntersectionFeed, makeRelayFeed} from "@welshman/feeds"
import {createFeedController, userMutes} from "@welshman/app" import {createFeedController, userMutes} from "@welshman/app"
@@ -16,7 +16,7 @@
import MenuSpaceButton from "@app/components/MenuSpaceButton.svelte" import MenuSpaceButton from "@app/components/MenuSpaceButton.svelte"
import ThreadItem from "@app/components/ThreadItem.svelte" import ThreadItem from "@app/components/ThreadItem.svelte"
import ThreadCreate from "@app/components/ThreadCreate.svelte" import ThreadCreate from "@app/components/ThreadCreate.svelte"
import {THREAD, LEGACY_THREAD, COMMENT, decodeRelay, deriveEventsForUrl} from "@app/state" import {LEGACY_THREAD, decodeRelay, deriveEventsForUrl} from "@app/state"
import {THREAD_FILTERS, setChecked} from "@app/notifications" import {THREAD_FILTERS, setChecked} from "@app/notifications"
import {pushModal} from "@app/modal" import {pushModal} from "@app/modal"
@@ -1,7 +1,8 @@
<script lang="ts"> <script lang="ts">
import {onMount} from "svelte" import {onMount} from "svelte"
import {sortBy, nthEq, sleep} from "@welshman/lib"
import {page} from "$app/stores" import {page} from "$app/stores"
import {sortBy, nthEq, sleep} from "@welshman/lib"
import {COMMENT} from "@welshman/util"
import {repository} from "@welshman/app" import {repository} from "@welshman/app"
import {deriveEvents} from "@welshman/store" import {deriveEvents} from "@welshman/store"
import Icon from "@lib/components/Icon.svelte" import Icon from "@lib/components/Icon.svelte"
@@ -13,7 +14,7 @@
import MenuSpaceButton from "@app/components/MenuSpaceButton.svelte" import MenuSpaceButton from "@app/components/MenuSpaceButton.svelte"
import ThreadActions from "@app/components/ThreadActions.svelte" import ThreadActions from "@app/components/ThreadActions.svelte"
import ThreadReply from "@app/components/ThreadReply.svelte" import ThreadReply from "@app/components/ThreadReply.svelte"
import {COMMENT, deriveEvent, decodeRelay} from "@app/state" import {deriveEvent, decodeRelay} from "@app/state"
import {subscribePersistent} from "@app/commands" import {subscribePersistent} from "@app/commands"
import {setChecked} from "@app/notifications" import {setChecked} from "@app/notifications"