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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import cx from "classnames" import cx from "classnames"
import {Tags, getAddress} from "paravel" import {Tags, addressToNaddr} from "paravel"
import {commaFormat} from "hurdak" import {commaFormat} from "hurdak"
import FlexColumn from "src/partials/FlexColumn.svelte" import FlexColumn from "src/partials/FlexColumn.svelte"
import Carousel from "src/partials/Carousel.svelte" import Carousel from "src/partials/Carousel.svelte"
@ -21,12 +21,12 @@
const images = tags.values("image").valueOf() const images = tags.values("image").valueOf()
const {title, summary, location, status} = tags.asObject() const {title, summary, location, status} = tags.asObject()
const [price = 0, code = "SAT"] = tags.get("price")?.drop(1).valueOf() || [] 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 editLink = router.at("listings").of(address).at("edit").toString()
const deleteLink = router.at("listings").of(address).at("delete").toString() const deleteLink = router.at("listings").of(address).at("delete").toString()
const sendMessage = () => { 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}` 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() router.at("channels").of([$pubkey, note.pubkey]).cx({initialMessage}).push()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
import {uniq, assoc, whereEq, sortBy, prop, without, mergeRight} from "ramda" 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 {switcherFn, batch} from "hurdak"
import {LOCAL_RELAY_URL, getPublicKey} from "src/util/nostr" import {LOCAL_RELAY_URL, getPublicKey} from "src/util/nostr"
import {projections} from "src/engine/core/projections" import {projections} from "src/engine/core/projections"
@ -65,11 +65,10 @@ projections.addHandler(24, (e: Event) => {
} }
if (relays.length > 0) { if (relays.length > 0) {
const pubkey = Address.getPubkey(address) const {pubkey, identifier} = decodeAddress(address)
const id = Address.getIdentifier(address)
if (!groups.key(address).get()) { 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 {seconds} from "hurdak"
import {partition} from "ramda" import {partition} from "ramda"
import {noteKinds, repostKinds} from "src/util/nostr" import {noteKinds, repostKinds} from "src/util/nostr"
@ -34,8 +34,8 @@ export const getStaleAddrs = (addrs: string[]) => {
export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => { export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => {
const addrs = getStaleAddrs(rawAddrs) const addrs = getStaleAddrs(rawAddrs)
const authors = addrs.map(a => Address.getPubkey(a)) const authors = addrs.map(a => decodeAddress(a).pubkey)
const identifiers = addrs.map(a => Address.getIdentifier(a)) const identifiers = addrs.map(a => decodeAddress(a).identifier)
if (addrs.length > 0) { if (addrs.length > 0) {
load({ load({
@ -49,7 +49,7 @@ export const loadGroups = async (rawAddrs: string[], relays: string[] = []) => {
export const loadGroupMessages = async (addresses = null) => { export const loadGroupMessages = async (addresses = null) => {
const addrs = addresses || deriveUserCircles().get() 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) { for (const address of groupAddrs) {
const {admins, recipients, relays, since} = getGroupReqInfo(address) const {admins, recipients, relays, since} = getGroupReqInfo(address)

View File

@ -1,6 +1,6 @@
import {prop, uniqBy, defaultTo, sortBy, last, whereEq} from "ramda" import {prop, uniqBy, defaultTo, sortBy, last, whereEq} from "ramda"
import {ellipsize, seconds} from "hurdak" import {ellipsize, seconds} from "hurdak"
import {Tags, Address} from "paravel" import {Tags, decodeAddress, addressToNaddr} from "paravel"
import {fuzzy} from "src/util/misc" import {fuzzy} from "src/util/misc"
import type {GroupStatus, Session} from "src/engine/session/model" import type {GroupStatus, Session} from "src/engine/session/model"
import {pubkey} from "src/engine/session/state" import {pubkey} from "src/engine/session/state"
@ -11,7 +11,7 @@ import {GroupAccess} from "./model"
import type {Group} from "./model" import type {Group} from "./model"
export const getGroupNaddr = (group: Group) => 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(":") 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 displayGroup = (group: Group) => ellipsize(group ? getGroupName(group) : "No name", 60)
export const deriveGroup = address => { export const deriveGroup = address => {
const pubkey = Address.getPubkey(address) const {pubkey, identifier: id} = decodeAddress(address)
const id = Address.getIdentifier(address)
return groups.key(address).derived(defaultTo({id, pubkey, address})) return groups.key(address).derived(defaultTo({id, pubkey, address}))
} }
@ -66,7 +65,9 @@ export const getGroupReqInfo = (address = null) => {
const recipients = [pubkey.get()] const recipients = [pubkey.get()]
for (const key of [...$groupSharedKeys, ...$groupAdminKeys]) { 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) addresses.push(key.group)
recipients.push(key.pubkey) 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 {updateRecord} from "src/engine/core/commands"
import {projections} from "src/engine/core/projections" import {projections} from "src/engine/core/projections"
import type {Event} from "src/engine/events/model" import type {Event} from "src/engine/events/model"
@ -14,13 +14,13 @@ const handleBookmarkList = async (e: Event) => {
// Avoid malformed lists // Avoid malformed lists
if (realTitle) { if (realTitle) {
_lists.key(addr.asRaw()).update($list => ({ _lists.key(encodeAddress(addr)).update($list => ({
...updateRecord($list, e.created_at, { ...updateRecord($list, e.created_at, {
title: realTitle, title: realTitle,
tags: e.tags, tags: e.tags,
description, description,
}), }),
address: addr.asRaw(), address: encodeAddress(addr),
pubkey: e.pubkey, 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 {omit, without, find, prop, groupBy, uniq} from "ramda"
import {shuffle, randomId, seconds, avg} from "hurdak" import {shuffle, randomId, seconds, avg} from "hurdak"
import {isAddressable} from "src/util/nostr" import {isAddressable} from "src/util/nostr"
@ -44,7 +44,7 @@ export const getIdFilters = values => {
for (const value of values) { for (const value of values) {
if (value.includes(":")) { if (value.includes(":")) {
aFilters.push(Address.fromRaw(value, []).asFilter()) aFilters.push(addressToFilter(decodeAddress(value)))
} else { } else {
ids.push(value) ids.push(value)
} }