Re-work address

This commit is contained in:
Jon Staab 2024-03-05 15:29:13 -08:00
parent 9db6dcb496
commit 7620f9ad88
15 changed files with 47 additions and 43 deletions

View File

@ -1,5 +1,5 @@
import {last, fromPairs, identity} from "ramda"
import {Address, fromNostrURI} from "paravel"
import {encodeAddress, decodeAddress, addressFromNaddr, addressToNaddr, fromNostrURI} from "paravel"
import {nip19} from "nostr-tools"
import {Router} from "src/util/router"
import {tryJson} from "src/util/misc"
@ -13,7 +13,7 @@ export const decodeJson = json => tryJson(() => JSON.parse(json))
export const encodeCsv = xs => xs.join(",")
export const decodeCsv = x => x.split(",")
export const encodeRelays = xs => xs.map(url => last(url.split("//"))).join(",")
export const encodeNaddr = a => Address.fromRaw(a, []).asNaddr()
export const encodeNaddr = a => addressToNaddr(decodeAddress(a, []))
export const encodeFilter = f =>
Object.entries(f)
@ -113,7 +113,7 @@ export const asChannelId = {
export const asNaddr = k => ({
encode: encodeNaddr,
decode: decodeAs(k, naddr => Address.fromNaddr(naddr).asRaw()),
decode: decodeAs(k, naddr => encodeAddress(addressFromNaddr(naddr))),
})
// Router and extensions
@ -131,7 +131,7 @@ router.extend("listings", encodeNaddr)
router.extend("notes", (id, {relays = []} = {}) => {
if (id.includes(":")) {
return Address.fromRaw(id, relays).asNaddr()
return addressToNaddr(decodeAddress(id, relays))
}
if (relays.length > 0) {

View File

@ -1,4 +1,5 @@
<script lang="ts">
import {encodeAddress, addressToNaddr} from "paravel"
import OverflowMenu from "src/partials/OverflowMenu.svelte"
import {router} from "src/app/router"
import {pubkey, isDeleted, hints} from "src/engine"
@ -14,20 +15,22 @@
if (!$isDeleted(event)) {
actions.push({
onClick: () => router.at("qrcode").of(address.asNaddr()).open(),
onClick: () => router.at("qrcode").of(addressToNaddr(address)).open(),
label: "Share",
icon: "share-nodes",
})
if (event.pubkey === $pubkey) {
actions.push({
onClick: () => router.at("events").of(address.asRaw()).cx({event}).at("edit").open(),
onClick: () =>
router.at("events").of(encodeAddress(address)).cx({event}).at("edit").open(),
label: "Edit",
icon: "edit",
})
actions.push({
onClick: () => router.at("events").of(address.asRaw()).cx({event}).at("delete").open(),
onClick: () =>
router.at("events").of(encodeAddress(address)).cx({event}).at("delete").open(),
label: "Delete",
icon: "trash",
})

View File

@ -1,5 +1,6 @@
<script lang="ts">
import {fromPairs} from "ramda"
import {addressToNaddr} from "paravel"
import {urlIsMedia} from "src/util/notes"
import Card from "src/partials/Card.svelte"
import Chip from "src/partials/Chip.svelte"
@ -13,7 +14,7 @@
export let note
export let showMedia = false
const naddr = hints.address(note).asNaddr()
const naddr = addressToNaddr(hints.address(note))
const {title, summary, image, status, p} = fromPairs(note.tags) as Record<string, string>
</script>

View File

@ -1,6 +1,6 @@
<script lang="ts">
import cx from "classnames"
import {Tags, getAddress} from "paravel"
import {Tags, addressToNaddr} from "paravel"
import {commaFormat} from "hurdak"
import FlexColumn from "src/partials/FlexColumn.svelte"
import Carousel from "src/partials/Carousel.svelte"
@ -21,12 +21,12 @@
const images = tags.values("image").valueOf()
const {title, summary, location, status} = tags.asObject()
const [price = 0, code = "SAT"] = tags.get("price")?.drop(1).valueOf() || []
const address = getAddress(note)
const address = hints.address(note)
const editLink = router.at("listings").of(address).at("edit").toString()
const deleteLink = router.at("listings").of(address).at("delete").toString()
const sendMessage = () => {
const naddr = hints.address(note).asNaddr()
const naddr = addressToNaddr(address)
const initialMessage = `Hi, I'd like to make an offer on this listing:\n${naddr}`
router.at("channels").of([$pubkey, note.pubkey]).cx({initialMessage}).push()

View File

@ -1,6 +1,6 @@
<script lang="ts">
import {nip19} from "nostr-tools"
import {Address} from "paravel"
import {addressFromNaddr, encodeAddress} from "paravel"
import Content from "src/partials/Content.svelte"
import NoteDetail from "src/app/views/NoteDetail.svelte"
import RelayDetail from "src/app/views/RelayDetail.svelte"
@ -16,11 +16,11 @@
{:else if type === "note"}
<NoteDetail eid={data} {relays} />
{:else if type === "naddr"}
{@const address = Address.fromNaddr(entity)}
{@const address = addressFromNaddr(entity)}
{#if [35834, 34550].includes(data.kind)}
<GroupDetail address={address.asRaw()} relays={address.relays} activeTab="notes" />
<GroupDetail address={encodeAddress(address)} relays={address.relays} activeTab="notes" />
{:else if data.kind === 31923}
<EventDetail address={address.asRaw()} relays={address.relays} />
<EventDetail address={encodeAddress(address)} relays={address.relays} />
{:else}
<NoteDetail {...data} />
{/if}

View File

@ -1,6 +1,6 @@
<script lang="ts">
import {onMount} from "svelte"
import {Tags, Address} from "paravel"
import {Tags, decodeAddress} from "paravel"
import {getIdOrAddress, noteKinds} from "src/util/nostr"
import {fly} from "src/util/transition"
import FlexColumn from "src/partials/FlexColumn.svelte"
@ -18,7 +18,7 @@
let loading = true
onMount(async () => {
event = event || (await dereferenceNote(Address.fromRaw(address, relays)))
event = event || (await dereferenceNote(decodeAddress(address, relays)))
loading = false
})
</script>

View File

@ -1,7 +1,7 @@
<script lang="ts">
import {onMount} from "svelte"
import {inc} from "ramda"
import {Tags, Address, now, asEventTemplate} from "paravel"
import {Tags, decodeAddress, now, asEventTemplate} from "paravel"
import {sleep} from "hurdak"
import {secondsToDate, dateToSeconds} from "src/util/misc"
import FlexColumn from "src/partials/FlexColumn.svelte"
@ -49,7 +49,7 @@
onMount(async () => {
if (!event) {
event = await dereferenceNote(Address.fromRaw(address, []))
event = await dereferenceNote(decodeAddress(address, []))
}
loading = false

View File

@ -1,5 +1,5 @@
<script lang="ts">
import {Tags, Address} from "paravel"
import {Tags, decodeAddress} from "paravel"
import {randomId} from "hurdak"
import {toast} from "src/partials/state"
import Heading from "src/partials/Heading.svelte"
@ -62,7 +62,7 @@
return toast.show("error", "That name is already in use")
}
const id = address ? Address.getIdentifier(address) : randomId()
const id = address ? decodeAddress(address).identifier : randomId()
const {title, description, params, relays} = values
publishBookmarksList(id, title, description, [...params, ...relays])

View File

@ -1,6 +1,6 @@
<script lang="ts">
import {onMount} from "svelte"
import {Tags, Address, asEventTemplate} from "paravel"
import {Tags, decodeAddress, asEventTemplate} from "paravel"
import {sleep, ucFirst} from "hurdak"
import {inc} from "ramda"
import {getCurrencyOption} from "src/util/i18n"
@ -53,7 +53,7 @@
onMount(async () => {
if (!event) {
event = await dereferenceNote(Address.fromRaw(address, []))
event = await dereferenceNote(decodeAddress(address, []))
}
loading = false

View File

@ -1,5 +1,5 @@
import {partition} from "ramda"
import {now, createEvent, Address} from "paravel"
import {now, createEvent, decodeAddress} from "paravel"
import {randomId} from "hurdak"
import {generatePrivateKey, getPublicKey} from "src/util/nostr"
import {updateRecord} from "src/engine/core/commands"
@ -90,7 +90,7 @@ const addATags = (template, addresses) => ({
export const publishToGroupAdmin = async (address, template) => {
const relays = hints.WithinContext(address).getUrls()
const pubkeys = [Address.getPubkey(address), session.get().pubkey]
const pubkeys = [decodeAddress(address).pubkey, session.get().pubkey]
const pubs = []
const events = []

View File

@ -1,5 +1,5 @@
import {uniq, assoc, whereEq, sortBy, prop, without, mergeRight} from "ramda"
import {Tags, Address, getAddress} from "paravel"
import {Tags, decodeAddress, getAddress} from "paravel"
import {switcherFn, batch} from "hurdak"
import {LOCAL_RELAY_URL, getPublicKey} from "src/util/nostr"
import {projections} from "src/engine/core/projections"
@ -65,11 +65,10 @@ projections.addHandler(24, (e: Event) => {
}
if (relays.length > 0) {
const pubkey = Address.getPubkey(address)
const id = Address.getIdentifier(address)
const {pubkey, identifier} = decodeAddress(address)
if (!groups.key(address).get()) {
groups.key(address).set({address, pubkey, id, relays})
groups.key(address).set({address, pubkey, id: identifier, relays})
}
}

View File

@ -1,4 +1,4 @@
import {now, Address, isGroupAddress} from "paravel"
import {now, decodeAddress, isGroupAddress} from "paravel"
import {seconds} from "hurdak"
import {partition} from "ramda"
import {noteKinds, repostKinds} from "src/util/nostr"
@ -34,8 +34,8 @@ export const getStaleAddrs = (addrs: string[]) => {
export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => {
const addrs = getStaleAddrs(rawAddrs)
const authors = addrs.map(a => Address.getPubkey(a))
const identifiers = addrs.map(a => Address.getIdentifier(a))
const authors = addrs.map(a => decodeAddress(a).pubkey)
const identifiers = addrs.map(a => decodeAddress(a).identifier)
if (addrs.length > 0) {
load({
@ -49,7 +49,7 @@ export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => {
export const loadGroupMessages = async (addresses = null) => {
const addrs = addresses || deriveUserCircles().get()
const [groupAddrs, communityAddrs] = partition(isGroupAddress, addrs)
const [groupAddrs, communityAddrs] = partition(a => isGroupAddress(decodeAddress(a)), addrs)
for (const address of groupAddrs) {
const {admins, recipients, relays, since} = getGroupReqInfo(address)

View File

@ -1,6 +1,6 @@
import {prop, uniqBy, defaultTo, sortBy, last, whereEq} from "ramda"
import {ellipsize, seconds} from "hurdak"
import {Tags, Address} from "paravel"
import {Tags, decodeAddress, addressToNaddr} from "paravel"
import {fuzzy} from "src/util/misc"
import type {GroupStatus, Session} from "src/engine/session/model"
import {pubkey} from "src/engine/session/state"
@ -11,7 +11,7 @@ import {GroupAccess} from "./model"
import type {Group} from "./model"
export const getGroupNaddr = (group: Group) =>
Address.fromRaw(group.address, group.relays).asNaddr()
addressToNaddr(decodeAddress(group.address, group.relays))
export const getGroupId = (group: Group) => group.address.split(":").slice(2).join(":")
@ -20,8 +20,7 @@ export const getGroupName = (group: Group) => group.meta?.name || group.id || ""
export const displayGroup = (group: Group) => ellipsize(group ? getGroupName(group) : "No name", 60)
export const deriveGroup = address => {
const pubkey = Address.getPubkey(address)
const id = Address.getIdentifier(address)
const {pubkey, identifier: id} = decodeAddress(address)
return groups.key(address).derived(defaultTo({id, pubkey, address}))
}
@ -66,7 +65,9 @@ export const getGroupReqInfo = (address = null) => {
const recipients = [pubkey.get()]
for (const key of [...$groupSharedKeys, ...$groupAdminKeys]) {
admins.push(Address.getPubkey(key.group))
const address = decodeAddress(key.group)
admins.push(address.pubkey)
addresses.push(key.group)
recipients.push(key.pubkey)
}

View File

@ -1,4 +1,4 @@
import {Tags} from "paravel"
import {Tags, encodeAddress} from "paravel"
import {updateRecord} from "src/engine/core/commands"
import {projections} from "src/engine/core/projections"
import type {Event} from "src/engine/events/model"
@ -14,13 +14,13 @@ const handleBookmarkList = async (e: Event) => {
// Avoid malformed lists
if (realTitle) {
_lists.key(addr.asRaw()).update($list => ({
_lists.key(encodeAddress(addr)).update($list => ({
...updateRecord($list, e.created_at, {
title: realTitle,
tags: e.tags,
description,
}),
address: addr.asRaw(),
address: encodeAddress(addr),
pubkey: e.pubkey,
}))
}

View File

@ -1,4 +1,4 @@
import {Address, getAddress, isContextAddress} from "paravel"
import {decodeAddress, addressToFilter, getAddress, isContextAddress} from "paravel"
import {omit, without, find, prop, groupBy, uniq} from "ramda"
import {shuffle, randomId, seconds, avg} from "hurdak"
import {isAddressable} from "src/util/nostr"
@ -44,7 +44,7 @@ export const getIdFilters = values => {
for (const value of values) {
if (value.includes(":")) {
aFilters.push(Address.fromRaw(value, []).asFilter())
aFilters.push(addressToFilter(decodeAddress(value)))
} else {
ids.push(value)
}