diff --git a/README.md b/README.md
index c90081b9..73a3eed8 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,10 @@
# Flotilla
A discord-like nostr client. WIP.
+
+# Notes
+
+- Privacy, migrations, and content replication
+ - Allow relays to strip signatures based on auth'd user
+ - Federated relays/admins can get signatures
+ - Other users have to opt-in to using the relay in trusted mode
diff --git a/src/app/commands.ts b/src/app/commands.ts
index ddfe9e0b..4ec27628 100644
--- a/src/app/commands.ts
+++ b/src/app/commands.ts
@@ -14,7 +14,7 @@ import {
loadMutes,
followsByPubkey,
} from "@welshman/app"
-import {MEMBERSHIPS, INDEXER_RELAYS} from "@app/state"
+import {ROOM, MEMBERSHIPS, INDEXER_RELAYS} from "@app/state"
// Utils
@@ -95,9 +95,9 @@ export const updateList = async (kind: number, modifyTags: ModifyTags) => {
export const addSpaceMembership = (url: string) =>
updateList(MEMBERSHIPS, (tags: string[][]) => uniqBy(t => t.join(""), [...tags, ["r", url]]))
-export const addRoomMembership = (url: string, topic: string) =>
+export const addRoomMembership = (url: string, room: string) =>
updateList(MEMBERSHIPS, (tags: string[][]) =>
- uniqBy(t => t.join(""), [...tags, ["t", topic, url]]),
+ uniqBy(t => t.join(""), [...tags, [ROOM, room, url]]),
)
export const removeSpaceMembership = (url: string) =>
@@ -105,5 +105,6 @@ export const removeSpaceMembership = (url: string) =>
tags.filter(t => !equals(["r", url], t) && t[2] !== url),
)
-export const removeRoomMembership = (url: string, topic: string) =>
- updateList(MEMBERSHIPS, (tags: string[][]) => tags.filter(t => !equals(["t", topic, url], t)))
+export const removeRoomMembership = (url: string, room: string) =>
+ updateList(MEMBERSHIPS, (tags: string[][]) => tags.filter(t => !equals([ROOM, room, url], t)))
+
diff --git a/src/app/components/ChatCompose.svelte b/src/app/components/ChatCompose.svelte
index be554ee4..d3de38ce 100644
--- a/src/app/components/ChatCompose.svelte
+++ b/src/app/components/ChatCompose.svelte
@@ -11,10 +11,10 @@
import Button from "@lib/components/Button.svelte"
import {makeMention, makeIMeta} from "@app/commands"
import {getChatEditorOptions, addFile} from "@app/editor"
- import {MESSAGE} from "@app/state"
+ import {ROOM, MESSAGE, GENERAL} from "@app/state"
export let url
- export let topic = ""
+ export let room = GENERAL
const uploading = writable(false)
@@ -22,7 +22,6 @@
const sendMessage = () => {
const json = $editor.getJSON()
- const topicTags = topic ? [["t", topic]] : []
const mentionTags = findNodes(NProfileExtension.name, json).map(m =>
makeMention(m.attrs!.pubkey, m.attrs!.relays),
)
@@ -32,7 +31,7 @@
const event = createEvent(MESSAGE, {
content: $editor.getText(),
- tags: [["-"], ...topicTags, ...mentionTags, ...imetaTags],
+ tags: [[ROOM, room], ...mentionTags, ...imetaTags],
})
publishThunk(makeThunk({event, relays: [url]}))
diff --git a/src/app/components/ChatMessage.svelte b/src/app/components/ChatMessage.svelte
index beed9543..61a12ee3 100644
--- a/src/app/components/ChatMessage.svelte
+++ b/src/app/components/ChatMessage.svelte
@@ -16,7 +16,6 @@
} from "@welshman/app"
import type {PublishStatusData} from "@welshman/app"
import {
- GROUP_REPLY,
REACTION,
ZAP_RESPONSE,
displayRelayUrl,
@@ -27,7 +26,7 @@
import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte"
import Avatar from "@lib/components/Avatar.svelte"
- import {deriveEvent, displayReaction} from "@app/state"
+ import {REPLY, deriveEvent, displayReaction} from "@app/state"
import {getChatViewOptions} from "@app/editor"
export let event: TrustedEvent
@@ -85,7 +84,7 @@
- {#if event.kind === GROUP_REPLY}
+ {#if event.kind === REPLY}
diff --git a/src/app/components/EventCreate.svelte b/src/app/components/EventCreate.svelte
index f1ca0335..36e40d83 100644
--- a/src/app/components/EventCreate.svelte
+++ b/src/app/components/EventCreate.svelte
@@ -52,7 +52,6 @@
const event = createEvent(kind, {
content: $editor.getText(),
tags: [
- ["-"],
["d", randomId()],
["title", title],
["location", location],
diff --git a/src/app/components/PrimaryNav.svelte b/src/app/components/PrimaryNav.svelte
index ef007025..289790fb 100644
--- a/src/app/components/PrimaryNav.svelte
+++ b/src/app/components/PrimaryNav.svelte
@@ -51,7 +51,7 @@
class="!h-10 !w-10 border border-solid border-base-300"
size={7} />
- {#each $userMembership?.topicsByUrl.keys() || [] as url (url)}
+ {#each $userMembership?.roomsByUrl.keys() || [] as url (url)}
diff --git a/src/app/components/RoomCreate.svelte b/src/app/components/RoomCreate.svelte
index 79bc5f51..b3c21f5e 100644
--- a/src/app/components/RoomCreate.svelte
+++ b/src/app/components/RoomCreate.svelte
@@ -13,9 +13,9 @@
const back = () => history.back()
const tryCreate = async () => {
- await addRoomMembership(url, topic)
+ await addRoomMembership(url, room)
- goto(makeSpacePath(url, topic))
+ goto(makeSpacePath(url, room))
}
const create = async () => {
@@ -28,7 +28,7 @@
}
}
- let topic = ""
+ let room = ""
let loading = false
@@ -41,7 +41,7 @@
Room Name
@@ -49,7 +49,7 @@
Go back
-
- {#if $userMembership?.topicsByUrl.has(relay.url)}
+ {#if $userMembership?.roomsByUrl.has(relay.url)}
{/if}
- {#each rooms as topic, i (topic)}
+ {#each rooms as room, i (room)}
-
+
- {topic}
+ {room}
{/each}
@@ -133,11 +133,11 @@
{/if}
- {#each otherRooms as topic, i (topic)}
+ {#each otherRooms as room, i (room)}
-
+
- {topic}
+ {room}
{/each}
@@ -150,7 +150,7 @@
- {#key $page.params.topic}
+ {#key $page.params.room}
{/key}
diff --git a/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte b/src/routes/spaces/[nrelay]/[[room]]/+page.svelte
similarity index 86%
rename from src/routes/spaces/[nrelay]/[[topic]]/+page.svelte
rename to src/routes/spaces/[nrelay]/[[room]]/+page.svelte
index 63dc849e..a6b728d5 100644
--- a/src/routes/spaces/[nrelay]/[[topic]]/+page.svelte
+++ b/src/routes/spaces/[nrelay]/[[room]]/+page.svelte
@@ -18,19 +18,19 @@
import Divider from "@lib/components/Divider.svelte"
import ChatMessage from "@app/components/ChatMessage.svelte"
import ChatCompose from "@app/components/ChatCompose.svelte"
- import {userMembership, decodeNRelay, makeChatId, deriveChat} from "@app/state"
+ import {userMembership, decodeNRelay, makeChatId, deriveChat, GENERAL} from "@app/state"
import {addRoomMembership, removeRoomMembership} from "@app/commands"
- const {nrelay, topic = ""} = $page.params
+ const {nrelay, room = GENERAL} = $page.params
const url = decodeNRelay(nrelay)
- const chat = deriveChat(makeChatId(url, topic))
+ const chat = deriveChat(makeChatId(url, room))
const assertEvent = (e: any) => e as TrustedEvent
let loading = true
let elements: Element[] = []
- $: membership = $userMembership?.topicsByUrl.get(url) || []
+ $: membership = $userMembership?.roomsByUrl.get(url) || []
$: {
elements = []
@@ -71,16 +71,16 @@
class="flex min-h-12 items-center justify-between gap-4 rounded-xl bg-base-100 px-4 shadow-xl">
- {topic || "General"}
+ {room || "General"}
- {#if topic}
- {#if membership.includes(topic)}
-
removeRoomMembership(url, topic)}>
+ {#if room}
+ {#if membership.includes(room)}
+ removeRoomMembership(url, room)}>
Leave Room
{:else}
- addRoomMembership(url, topic)}>
+ addRoomMembership(url, room)}>
Join Room
@@ -106,5 +106,5 @@
-
+