Toggle nip44 messages based on 10050 signaling

This commit is contained in:
Jon Staab 2024-06-20 16:59:19 -07:00
parent b1f2218e81
commit 1408f782f1
5 changed files with 24 additions and 73 deletions

View File

@ -3,6 +3,7 @@
# 0.4.8
- [x] Add support for kind 10050 relay lists
- [x] Toggle nip44 messages based on 10050 signaling
# 0.4.7

View File

@ -5,9 +5,7 @@
import {DIRECT_MESSAGE} from "@welshman/util"
import {formatTimestamp} from "src/util/misc"
import Channel from "src/partials/Channel.svelte"
import Content from "src/partials/Content.svelte"
import Popover from "src/partials/Popover.svelte"
import Modal from "src/partials/Modal.svelte"
import Anchor from "src/partials/Anchor.svelte"
import PersonCircles from "src/app/shared/PersonCircles.svelte"
import PersonAbout from "src/app/shared/PersonAbout.svelte"
@ -23,7 +21,6 @@
markChannelRead,
getChannelIdFromEvent,
listenForMessages,
sortEventsDesc,
ensureMessagePlaintext,
} from "src/engine"
@ -46,35 +43,9 @@
return sendLegacyMessage(channelId, content)
}
const [message] = sortEventsDesc($messages || [])
if (!message || message?.kind === 4) {
confirmMessage = content
} else {
sendMessage(channelId, content)
}
sendMessage(channelId, content)
}
const confirmNip04 = () => {
sendLegacyMessage(channelId, confirmMessage)
confirmMessage = null
}
const confirmNip44 = () => {
sendMessage(channelId, confirmMessage)
confirmMessage = null
}
const abortMessage = () => {
if (confirmMessage) {
ctrl.setMessage(confirmMessage)
}
confirmMessage = null
}
let confirmMessage, ctrl
onMount(() => {
markChannelRead(channelId)
@ -88,7 +59,7 @@
document.title = `Direct Messages`
</script>
<Channel {channelId} {pubkeys} bind:this={ctrl} messages={$messages} sendMessage={send} {initialMessage}>
<Channel {pubkeys} messages={$messages} sendMessage={send} {initialMessage}>
<div slot="header" class="flex h-16 items-start gap-4 overflow-hidden p-1 px-4">
<div class="flex items-center gap-4 pt-1">
<Anchor class="fa fa-arrow-left cursor-pointer text-2xl" href="/channels" />
@ -134,20 +105,22 @@
class:text-neutral-100={message.pubkey !== $session.pubkey}>
{formatTimestamp(message.created_at)}
{#if message.kind === 4}
<Popover>
<i slot="trigger" class="fa fa-unlock cursor-pointer text-neutral-200" />
<Popover triggerType="mouseenter">
<i slot="trigger" class="fa fa-unlock cursor-pointer text-neutral-400" />
<p slot="tooltip">
This message was sent using nostr's legacy DMs, which have a number of shortcomings.
Read more <Anchor underline modal href="/help/nip-44-dms">here</Anchor>.
</p>
</Popover>
{:else}
<Popover>
<i slot="trigger" class="fa fa-lock cursor-pointer text-neutral-200" />
<Popover triggerType="mouseenter">
<i slot="trigger" class="fa fa-lock cursor-pointer text-neutral-400" />
<div slot="tooltip" class="flex flex-col gap-2">
<p>
This message was sent using nostr's new group chat specification, which solves several
problems with legacy DMs. Read more <Anchor underline modal href="/help/nip-44-dms">here</Anchor>.
problems with legacy DMs. Read more <Anchor underline modal href="/help/nip-44-dms"
>here</Anchor
>.
</p>
<p>
Note that these messages are not yet universally supported. Make sure the person
@ -159,29 +132,3 @@
</small>
</div>
</Channel>
{#if confirmMessage}
<Modal onEscape={abortMessage}>
<Content size="lg">
<p class="flex items-center gap-4 text-xl">
<i class="fa fa-info-circle" /> Auto-upgrade notice
</p>
<p>
This conversation has not yet been upgraded to use <Anchor
underline
modal
href="/help/nip-44-dms">new-style DMs</Anchor
>.
</p>
<p>
You should make sure @{displayProfileByPubkey(pubkeys[0])} is using a compatible nostr client,
or you can choose to send an old-style message instead.
</p>
<p>How would you like to send this message?</p>
<div class="flex flex-col gap-2 py-4 sm:flex-row">
<Anchor button on:click={confirmNip04}>Send using Legacy DMs</Anchor>
<Anchor button accent on:click={confirmNip44}>Send using NIP 44</Anchor>
</div>
</Content>
</Modal>
{/if}

View File

@ -927,7 +927,7 @@ export const sendMessage = async (channelId: string, content: string) => {
publish({
event: rumor.wrap,
relays: hints.merge(recipients.map(hints.PublishMessage)).getUrls(),
relays: hints.PublishMessage(recipient).getUrls(),
forcePlatform: false,
})
}

View File

@ -4,6 +4,7 @@ import type {TrustedEvent} from "@welshman/util"
import {
RELAYS,
PROFILE,
INBOX_RELAYS,
HANDLER_INFORMATION,
NAMED_BOOKMARKS,
COMMUNITIES,
@ -51,7 +52,7 @@ const getFiltersForKey = (key: string, authors: string[]) => {
case "pubkey/feeds":
return [{authors, kinds: [NAMED_BOOKMARKS, FEED]}]
case "pubkey/relays":
return [{authors, kinds: [RELAYS]}]
return [{authors, kinds: [RELAYS, INBOX_RELAYS]}]
case "pubkey/profile":
return [{authors, kinds: [PROFILE, FOLLOWS, HANDLER_INFORMATION, COMMUNITIES]}]
case "pubkey/user":

View File

@ -1,28 +1,26 @@
<script lang="ts">
import {onMount} from "svelte"
import {sleep} from "hurdak"
import {sleep} from "@welshman/lib"
import type {TrustedEvent} from "@welshman/util"
import {INBOX_RELAYS} from "@welshman/util"
import {prop, max, reverse, pluck, sortBy, last} from "ramda"
import {fly} from "src/util/transition"
import {createScroller, synced} from "src/util/misc"
import {createScroller} from "src/util/misc"
import Spinner from "src/partials/Spinner.svelte"
import Anchor from "src/partials/Anchor.svelte"
import Popover from "src/partials/Popover.svelte"
import Toggle from "src/partials/Toggle.svelte"
import FlexColumn from "src/partials/FlexColumn.svelte"
import ImageInput from "src/partials/ImageInput.svelte"
import {nip44} from "src/engine"
import {nip44, repository} from "src/engine"
export let pubkeys
export let channelId
export let messages: TrustedEvent[]
export let sendMessage
export let initialMessage = ""
export let messages: TrustedEvent[]
const loading = sleep(30_000)
const useNip44 = synced(`useNip44/${channelId}`, true)
const startScroller = () => {
scroller?.stop()
scroller = createScroller(loadMore, {element, reverse: true})
@ -36,6 +34,10 @@
let limit = 10
let showNewMessages = false
let groupedMessages = []
let useNip44 =
pubkeys.length > 2 ||
($nip44.isEnabled() &&
repository.query([{kinds: [INBOX_RELAYS], authors: pubkeys}]).length === pubkeys.length)
onMount(() => {
startScroller()
@ -76,7 +78,7 @@
if (content) {
textarea.value = ""
await sendMessage(content, $useNip44)
await sendMessage(content, useNip44)
stickToBottom()
}
@ -159,7 +161,7 @@
</div>
{#if $nip44.isEnabled()}
<div class="fixed bottom-0 right-12 flex items-center justify-end gap-2 p-2">
<Toggle scale={0.7} bind:value={$useNip44} />
<Toggle scale={0.7} bind:value={useNip44} />
<small>
Send messages using
<Popover class="inline">