feat: outbox model (#4)

This commit is contained in:
Cody Tseng 2024-11-07 21:42:51 +08:00 committed by GitHub
parent bd3078bcd0
commit ead1710392
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 171 additions and 59 deletions

View file

@ -1,5 +1,6 @@
import { Button } from '@renderer/components/ui/button'
import { Input } from '@renderer/components/ui/input'
import { isWebsocketUrl, normalizeUrl } from '@renderer/lib/url'
import { useRelaySettings } from '@renderer/providers/RelaySettingsProvider'
import client from '@renderer/services/client.service'
import { CircleX } from 'lucide-react'
@ -43,11 +44,11 @@ export default function RelayUrls({ groupName }: { groupName: string }) {
const saveNewRelayUrl = () => {
if (newRelayUrl === '') return
const normalizedUrl = normalizeURL(newRelayUrl)
const normalizedUrl = normalizeUrl(newRelayUrl)
if (relays.some(({ url }) => url === normalizedUrl)) {
return setNewRelayUrlError('already exists')
}
if (/^wss?:\/\/.+$/.test(normalizedUrl) === false) {
if (!isWebsocketUrl(normalizedUrl)) {
return setNewRelayUrlError('invalid URL')
}
setRelays((pre) => [...pre, { url: normalizedUrl, isConnected: false }])
@ -130,16 +131,3 @@ function RelayUrl({
</div>
)
}
// copy from nostr-tools/utils
function normalizeURL(url: string): string {
if (url.indexOf('://') === -1) url = 'wss://' + url
const p = new URL(url)
p.pathname = p.pathname.replace(/\/+/g, '/')
if (p.pathname.endsWith('/')) p.pathname = p.pathname.slice(0, -1)
if ((p.port === '80' && p.protocol === 'ws:') || (p.port === '443' && p.protocol === 'wss:'))
p.port = ''
p.searchParams.sort()
p.hash = ''
return p.toString()
}