Bump welshman, use new message kind
This commit is contained in:
parent
75451b71e3
commit
7dffabd9d9
5 changed files with 49 additions and 54 deletions
20
package.json
20
package.json
|
|
@ -88,16 +88,16 @@
|
|||
"@types/throttle-debounce": "^5.0.2",
|
||||
"@vite-pwa/assets-generator": "^1.0.2",
|
||||
"@vite-pwa/sveltekit": "^1.1.0",
|
||||
"@welshman/app": "^0.10.7",
|
||||
"@welshman/content": "^0.10.7",
|
||||
"@welshman/domain": "^0.10.7",
|
||||
"@welshman/editor": "^0.10.7",
|
||||
"@welshman/feeds": "^0.10.7",
|
||||
"@welshman/lib": "^0.10.7",
|
||||
"@welshman/net": "^0.10.7",
|
||||
"@welshman/signer": "^0.10.7",
|
||||
"@welshman/store": "^0.10.7",
|
||||
"@welshman/util": "^0.10.7",
|
||||
"@welshman/app": "^0.10.8",
|
||||
"@welshman/content": "^0.10.8",
|
||||
"@welshman/domain": "^0.10.8",
|
||||
"@welshman/editor": "^0.10.8",
|
||||
"@welshman/feeds": "^0.10.8",
|
||||
"@welshman/lib": "^0.10.8",
|
||||
"@welshman/net": "^0.10.8",
|
||||
"@welshman/signer": "^0.10.8",
|
||||
"@welshman/store": "^0.10.8",
|
||||
"@welshman/util": "^0.10.8",
|
||||
"cheerio": "^1.2.0",
|
||||
"compressorjs-next": "^1.1.2",
|
||||
"dompurify": "^3.4.13",
|
||||
|
|
|
|||
BIN
pnpm-lock.yaml
BIN
pnpm-lock.yaml
Binary file not shown.
|
|
@ -9,7 +9,8 @@
|
|||
import {now, ifLet, ago, MINUTE} from "@welshman/lib"
|
||||
import type {Maybe} from "@welshman/lib"
|
||||
import type {TrustedEvent, EventContent} from "@welshman/util"
|
||||
import {makeEvent, MESSAGE, RELAY_ADD_MEMBER, ROOM_ADD_MEMBER} from "@welshman/util"
|
||||
import {relay, stamp, MESSAGE, RELAY_ADD_MEMBER, ROOM_ADD_MEMBER} from "@welshman/util"
|
||||
import {Message} from "@welshman/domain"
|
||||
import {MembershipStatus} from "@welshman/app"
|
||||
import AltArrowDown from "@assets/icons/alt-arrow-down.svg?dataurl"
|
||||
import ClockCircle from "@assets/icons/clock-circle.svg?dataurl"
|
||||
|
|
@ -32,11 +33,10 @@
|
|||
import ThunkToast from "@app/components/ThunkToast.svelte"
|
||||
import VideoCallContent from "@app/components/VideoCallContent.svelte"
|
||||
import CallControlBar from "@app/components/CallControlBar.svelte"
|
||||
import {deletes, relays, rooms, thunks, user} from "@app/core"
|
||||
import {deletes, relays, rooms, thunks, user, writer} from "@app/core"
|
||||
import {joinRoom, leaveRoom} from "@app/access"
|
||||
import {CallState, callTargetRoom, callState, VideoCallLayout, videoCallLayout} from "@app/call"
|
||||
import {
|
||||
PROTECTED,
|
||||
RoomType,
|
||||
deriveUserRoomMembershipStatus,
|
||||
getRoomType,
|
||||
|
|
@ -177,27 +177,15 @@
|
|||
}
|
||||
|
||||
try {
|
||||
if (h) {
|
||||
tags.push(["h", h])
|
||||
}
|
||||
|
||||
const protect = await shouldProtect
|
||||
|
||||
if (protect) {
|
||||
tags.push(PROTECTED)
|
||||
}
|
||||
|
||||
let template: EventContent & {created_at?: number} = {content, tags}
|
||||
|
||||
if (eventToEdit) {
|
||||
// Don't do anything if message hasn't changed
|
||||
if (eventToEdit.content === content) {
|
||||
return
|
||||
}
|
||||
|
||||
// Delete previous message, to be republished with same timestamp
|
||||
template.created_at = eventToEdit.created_at
|
||||
|
||||
// Delete the previous message, to be republished below with the same timestamp
|
||||
const command = await $deletes.deleteEvent($state.snapshot(eventToEdit), w =>
|
||||
w.setProtected(protect),
|
||||
)
|
||||
|
|
@ -205,17 +193,30 @@
|
|||
command.publishToRelays([url])
|
||||
}
|
||||
|
||||
// A share is a quote rather than a reply, so it goes in the content directly and
|
||||
// setParent prepends the reply's own reference ahead of it.
|
||||
if (sharedEvent) {
|
||||
template = await prependParent(sharedEvent, template, url)
|
||||
;({content, tags} = await prependParent(sharedEvent, {content, tags}, url))
|
||||
}
|
||||
|
||||
const eventWriter = writer(Message)
|
||||
.setContent(content)
|
||||
.addTags(...tags)
|
||||
.setProtected(protect)
|
||||
|
||||
if (h) {
|
||||
eventWriter.setRoom(url, h)
|
||||
} else {
|
||||
eventWriter.forceRoutes(relay(url))
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
template = await prependParent(parent, template, url)
|
||||
eventWriter.setParent(parent)
|
||||
}
|
||||
|
||||
const thunk = $thunks.publish({
|
||||
relays: [url],
|
||||
event: makeEvent(MESSAGE, template),
|
||||
event: stamp(await eventWriter.renderTemplate(), eventToEdit?.created_at),
|
||||
delay: $userSettingsValues.send_delay,
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,17 @@
|
|||
<script lang="ts">
|
||||
import cx from "classnames"
|
||||
import {readable} from "svelte/store"
|
||||
import {
|
||||
gte,
|
||||
now,
|
||||
uniq,
|
||||
displayList,
|
||||
formatTimestampAsTime,
|
||||
formatTimestampAsDate,
|
||||
} from "@welshman/lib"
|
||||
import {now, uniq, displayList, formatTimestampAsTime, formatTimestampAsDate} from "@welshman/lib"
|
||||
import type {TrustedEvent, EventContent} from "@welshman/util"
|
||||
import {
|
||||
MESSAGE,
|
||||
THREAD,
|
||||
getCommentFiltersForParent,
|
||||
getIdOrAddress,
|
||||
matchTag,
|
||||
tagSpec,
|
||||
tagValue,
|
||||
} from "@welshman/util"
|
||||
import {getContentQuote} from "@welshman/domain"
|
||||
import {isMobile} from "@lib/html"
|
||||
import NotesMinimalistic from "@assets/icons/notes-minimalistic.svg?dataurl"
|
||||
import Pen from "@assets/icons/pen.svg?dataurl"
|
||||
|
|
@ -74,11 +67,10 @@
|
|||
const thunk = $derived($thunks.merge($thunksByEventId.get(event.id) ?? noThunks))
|
||||
const colorValue = colorFor(event.pubkey)
|
||||
|
||||
const qTag = matchTag(tagSpec("q"), event.tags)
|
||||
const isQuoteOnly = Boolean(
|
||||
gte(qTag?.length, 2) && event.content.trim().match(/^nostr:n(event|addr)1\w+\s*$/),
|
||||
)
|
||||
const innerEvent = isQuoteOnly ? deriveEvent(qTag![1], [url]) : readable(undefined)
|
||||
// A message that is nothing but a reference renders as the event it quotes.
|
||||
const isQuoteOnly = event.content.trim().split(/\s/).length === 1
|
||||
const quote = isQuoteOnly ? getContentQuote(event.content) : undefined
|
||||
const innerEvent = quote ? deriveEvent(quote.value, [url]) : readable(undefined)
|
||||
const innerComments = $derived(
|
||||
$innerEvent ? deriveEventsForUrl(url, getCommentFiltersForParent([$innerEvent])) : readable([]),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ import * as nip19 from "nostr-tools/nip19"
|
|||
import {derived, get} from "svelte/store"
|
||||
import {formatTimestampAsDate, int, sortBy, uniq, MINUTE} from "@welshman/lib"
|
||||
import type {Maybe} from "@welshman/lib"
|
||||
import {MESSAGE, makeEvent, outbox, seen, toNostrURI} from "@welshman/util"
|
||||
import {outbox, relay, seen, toNostrURI} from "@welshman/util"
|
||||
import type {EventContent, TrustedEvent} from "@welshman/util"
|
||||
import {Message} from "@welshman/domain"
|
||||
import {MembershipStatus, RoomLists, makeRoomKey, createSearch, publish} from "@welshman/app"
|
||||
import type {Room, RoomMeta} from "@welshman/app"
|
||||
import {
|
||||
|
|
@ -16,6 +17,7 @@ import {
|
|||
thunks,
|
||||
relays,
|
||||
user,
|
||||
writer,
|
||||
} from "@app/core"
|
||||
import {deriveUserIsSpaceAdmin} from "@app/management"
|
||||
import {makeRoomPath} from "@app/routes"
|
||||
|
|
@ -83,7 +85,7 @@ export const prependParent = async (
|
|||
const resolver = router.get().resolver
|
||||
const relays = url ? [url] : await resolver.relays([seen(parent)])
|
||||
const hint = url ?? (await resolver.relay([outbox(parent.pubkey)])) ?? ""
|
||||
const nevent = nip19.neventEncode({...parent, relays})
|
||||
const nevent = nip19.neventEncode({id: parent.id, author: parent.pubkey, relays})
|
||||
|
||||
content = toNostrURI(nevent) + "\n\n" + content
|
||||
tags = [...tags, ["q", parent.id, hint, parent.pubkey], ["p", parent.pubkey, hint]]
|
||||
|
|
@ -105,19 +107,19 @@ export const publishRoomQuote = async ({
|
|||
protect: boolean
|
||||
delay?: number
|
||||
}) => {
|
||||
const tags: string[][] = []
|
||||
const eventWriter = writer(Message).setParent(parent).setProtected(protect)
|
||||
|
||||
if (h) {
|
||||
tags.push([ROOM, h])
|
||||
eventWriter.setRoom(url, h)
|
||||
} else {
|
||||
eventWriter.forceRoutes(relay(url))
|
||||
}
|
||||
|
||||
if (protect) {
|
||||
tags.push(PROTECTED)
|
||||
}
|
||||
|
||||
const event = makeEvent(MESSAGE, await prependParent(parent, {content: "", tags}, url))
|
||||
|
||||
return thunks.get().publish({relays: [url], event, delay})
|
||||
return thunks.get().publish({
|
||||
relays: [url],
|
||||
event: await eventWriter.renderTemplate(),
|
||||
delay,
|
||||
})
|
||||
}
|
||||
|
||||
// User
|
||||
|
|
|
|||
Loading…
Reference in a new issue