Re-organize engine a bit

This commit is contained in:
Jon Staab 2024-08-30 09:32:02 -07:00
parent 90865fa77e
commit 925e8505a2
6 changed files with 7 additions and 91 deletions

View File

@ -32,7 +32,7 @@ import {makeRelayPolicy, isPublishedProfile, createProfile, editProfile} from "s
import type {RelayPolicy, Profile} from "src/domain"
import type {Session} from "src/engine/model"
import {GroupAccess} from "src/engine/model"
import {repository} from "src/engine/repository"
import {repository} from "src/engine/base"
import {
channels,
getChannelSeenKey,

View File

@ -1,7 +1,7 @@
export * from "src/engine/model"
export * from "src/engine/utils"
export * from "src/engine/base"
export * from "src/engine/state"
export * from "src/engine/repository"
export * from "src/engine/requests"
export * from "src/engine/commands"
export * from "src/engine/projections"

View File

@ -20,7 +20,7 @@ import {getPubkey} from "@welshman/signer"
import {parseJson} from "src/util/misc"
import {normalizeRelayUrl} from "src/domain"
import {GroupAccess} from "src/engine/model"
import {repository} from "src/engine/repository"
import {repository} from "src/engine/base"
import {
topics,
relays,

View File

@ -1,8 +0,0 @@
import {Repository, Relay} from "@welshman/util"
import {createEventStore} from "@welshman/store"
export const repository = new Repository()
export const relay = new Relay(repository)
export const events = createEventStore(repository)

View File

@ -53,7 +53,7 @@ import {noteKinds, reactionKinds, repostKinds} from "src/util/nostr"
import {always, partition, pluck, uniq, without} from "ramda"
import {LIST_KINDS} from "src/domain"
import type {Zapper, RelayInfo} from "src/engine/model"
import {repository} from "src/engine/repository"
import {repository} from "src/engine/base"
import {
getUserCircles,
getGroupReqInfo,
@ -576,7 +576,7 @@ export const loadRelay = batcher(800, async (urls: string[]) => {
setFreshness("relay", url, now())
}
const res = urlSet.size && await postJson(dufflepud("relay/info"), {urls: Array.from(urlSet)})
const res = urlSet.size && (await postJson(dufflepud("relay/info"), {urls: Array.from(urlSet)}))
const index = indexBy((item: any) => item.url, res?.data || [])
const items: RelayInfo[] = urls.map(url => {
const normalizedUrl = normalizeRelayUrl(url)
@ -587,7 +587,7 @@ export const loadRelay = batcher(800, async (urls: string[]) => {
relays.mapStore.update($relays => {
for (const relay of items) {
$relays.set(relay.url, {...$relays.get(relay.url) || {}, ...relay})
$relays.set(relay.url, {...($relays.get(relay.url) || {}), ...relay})
}
return $relays

View File

@ -95,7 +95,6 @@ import {
Plex,
Local,
Relays,
Tracker,
publish as basePublish,
subscribe as baseSubscribe,
} from "@welshman/net"
@ -160,38 +159,10 @@ import type {
} from "src/engine/model"
import {sortEventsAsc} from "src/engine/utils"
import {GroupAccess, OnboardingTask} from "src/engine/model"
import {repository, events, relay} from "src/engine/repository"
import {repository, events, relay, tracker, sessions, pubkey} from "src/engine/base"
// Base state
export const env = withGetter(
writable({
CLIENT_ID: import.meta.env.VITE_CLIENT_ID as string,
CLIENT_NAME: import.meta.env.VITE_CLIENT_NAME as string,
DEFAULT_FOLLOWS: fromCsv(import.meta.env.VITE_DEFAULT_FOLLOWS) as string,
DEFAULT_RELAYS: fromCsv(import.meta.env.VITE_DEFAULT_RELAYS).map(normalizeRelayUrl) as string[],
INDEXER_RELAYS: fromCsv(import.meta.env.VITE_INDEXER_RELAYS).map(normalizeRelayUrl) as string[],
DUFFLEPUD_URL: import.meta.env.VITE_DUFFLEPUD_URL as string,
DVM_RELAYS: fromCsv(import.meta.env.VITE_DVM_RELAYS).map(normalizeRelayUrl) as string[],
ENABLE_MARKET: JSON.parse(import.meta.env.VITE_ENABLE_MARKET) as boolean,
ENABLE_ZAPS: JSON.parse(import.meta.env.VITE_ENABLE_ZAPS) as boolean,
BLUR_CONTENT: JSON.parse(import.meta.env.VITE_BLUR_CONTENT) as boolean,
FORCE_GROUP: import.meta.env.VITE_FORCE_GROUP as string,
IMGPROXY_URL: import.meta.env.VITE_IMGPROXY_URL as string,
MULTIPLEXTR_URL: import.meta.env.VITE_MULTIPLEXTR_URL as string,
NIP96_URLS: fromCsv(import.meta.env.VITE_NIP96_URLS) as string[],
ONBOARDING_LISTS: fromCsv(import.meta.env.VITE_ONBOARDING_LISTS) as string[],
PLATFORM_PUBKEY: import.meta.env.VITE_PLATFORM_PUBKEY as string,
PLATFORM_RELAYS: fromCsv(import.meta.env.VITE_PLATFORM_RELAYS).map(
normalizeRelayUrl,
) as string[],
PLATFORM_ZAP_SPLIT: parseFloat(import.meta.env.VITE_PLATFORM_ZAP_SPLIT) as number,
SEARCH_RELAYS: fromCsv(import.meta.env.VITE_SEARCH_RELAYS).map(normalizeRelayUrl) as string[],
}),
)
export const pubkey = withGetter(synced<string | null>("pubkey", null))
export const sessions = withGetter(synced<Record<string, Session>>("sessions", {}))
export const handles = withGetter(writable<Record<string, Handle>>({}))
export const zappers = withGetter(writable<Record<string, Zapper>>({}))
export const plaintext = withGetter(writable<Record<string, string>>({}))
@ -223,49 +194,6 @@ export const getFreshness = (key: string, value: any) =>
export const setFreshness = (key: string, value: any, ts: number) =>
freshness.set(getFreshnessKey(key, value), ts)
// Session, signing, encryption
export const getSession = pubkey => sessions.get()[pubkey]
export const session = withGetter(derived([pubkey, sessions], ([$pk, $sessions]) => $sessions[$pk]))
export const nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt"
export const getSigner = memoize($s => {
switch ($s?.method) {
case "extension":
return new Nip07Signer()
case "privkey":
return new Nip01Signer($s.privkey)
case "connect":
return new Nip46Signer(Nip46Broker.get($s.pubkey, $s.connectKey, $s.connectHandler))
default:
return null
}
})
export const hasNip44 = writable(false)
export const signer = withGetter(
derived(
session,
memoize($session => {
const $signer = getSigner($session)
if ($signer) {
$signer?.nip44.encrypt($session.pubkey, "test").then(
v => hasNip44.set(true),
() => hasNip44.set(false),
)
} else {
hasNip44.set(false)
}
return $signer
}),
),
)
// Plaintext
export const getPlaintext = (e: TrustedEvent) => plaintext.get()[e.id]
@ -1928,10 +1856,6 @@ export const createAndPublish = async ({
return publish({event, relays, verb, timeout, forcePlatform})
}
export const tracker = new Tracker()
tracker.setMaxListeners(100)
Object.assign(NetworkContext, {
onAuth,
getExecutor,