Split app/core up into domain-oriented files

This commit is contained in:
Jon Staab
2026-06-08 15:33:38 -07:00
parent ea6b63de53
commit 926b31de78
171 changed files with 2902 additions and 2628 deletions
+65 -12
View File
@@ -10,9 +10,13 @@
import {goto} from "$app/navigation"
import {page} from "$app/stores"
import {sync, throttled} from "@welshman/store"
import {call} from "@welshman/lib"
import {defaultSocketPolicies} from "@welshman/net"
import {pubkey, sessions, signerLog, shouldUnwrap} from "@welshman/app"
import {always, call} from "@welshman/lib"
import {defaultSocketPolicies, netContext} from "@welshman/net"
import {appContext, pubkey, sessions, signerLog, shouldUnwrap} from "@welshman/app"
import {routerContext} from "@welshman/router"
import {verifyEvent} from "@welshman/util"
import type {TrustedEvent} from "@welshman/util"
import {context as pomadeContext} from "@pomade/core"
import * as lib from "@welshman/lib"
import * as util from "@welshman/util"
import * as feeds from "@welshman/feeds"
@@ -29,12 +33,34 @@
import {setupHistory} from "@app/routes"
import {setupAnalytics} from "@app/analytics"
import {authPolicy, blockPolicy, trustPolicy, mostlyRestrictedPolicy} from "@app/policies"
import {db, kv, ss} from "@app/core/storage"
import {device, userSettingsValues, notificationSettings, pushState} from "@app/core/state"
import {syncApplicationData} from "@app/core/sync"
import * as commands from "@app/core/commands"
import * as requests from "@app/core/requests"
import * as appState from "@app/core/state"
import {db, kv, ss} from "@app/storage"
import {device} from "@app/device"
import {getSetting, userSettingsValues, notificationSettings} from "@app/settings"
import {DUFFLEPUD_URL, INDEXER_RELAYS, POMADE_SIGNERS} from "@app/env"
import {pushState} from "@app/push/adapters/common"
import {syncApplicationData} from "@app/sync"
import * as groups from "@app/groups"
import * as comments from "@app/comments"
import * as deletes from "@app/deletes"
import * as reactions from "@app/reactions"
import * as profiles from "@app/profiles"
import * as lightning from "@app/lightning"
import * as uploads from "@app/uploads"
import * as appPolls from "@app/polls"
import * as reports from "@app/reports"
import * as relays from "@app/relays"
import * as settings from "@app/settings"
import * as members from "@app/members"
import * as chats from "@app/chats"
import * as content from "@app/content"
import * as env from "@app/env"
import * as repository from "@app/repository"
import * as social from "@app/social"
import * as appDevice from "@app/device"
import * as actionItems from "@app/actionItems"
import * as appFeeds from "@app/feeds"
import * as invites from "@app/invites"
import * as healthChecks from "@app/healthChecks"
import {theme} from "@app/theme"
import {toast, pushToast} from "@app/toast"
import * as notifications from "@app/notifications"
@@ -69,12 +95,39 @@
...feeds,
...net,
...app,
...appState,
...commands,
...requests,
...groups,
...relays,
...settings,
...members,
...chats,
...content,
...env,
...repository,
...social,
...appDevice,
...actionItems,
...appFeeds,
...invites,
...healthChecks,
...comments,
...deletes,
...reactions,
...profiles,
...lightning,
...uploads,
...appPolls,
...reports,
...notifications,
})
// Set up context for various modules
pomadeContext.setSignerUrls(POMADE_SIGNERS)
pomadeContext.setArgonWorker(import("@pomade/core/argon-worker.js?worker"))
appContext.dufflepudUrl = DUFFLEPUD_URL
routerContext.getIndexerRelays = always(INDEXER_RELAYS)
netContext.isEventValid = (event: TrustedEvent, url: string) =>
getSetting<string[]>("trusted_relays").includes(url) || verifyEvent(event)
// Listen for deep link events
App.addListener("appUrlOpen", async (event: URLOpenListenerEvent) => {
const url = new URL(event.url)
+1 -1
View File
@@ -2,7 +2,7 @@
import {onMount} from "svelte"
import {goto} from "$app/navigation"
import {goToSpace} from "@app/routes"
import {PLATFORM_RELAYS} from "@app/core/state"
import {PLATFORM_RELAYS} from "@app/env"
onMount(async () => {
if (PLATFORM_RELAYS.length > 0) {
+1 -1
View File
@@ -18,7 +18,7 @@
import ChatMenu from "@app/components/ChatMenu.svelte"
import ChatStart from "@app/components/ChatStart.svelte"
import ChatItem from "@app/components/ChatItem.svelte"
import {chatSearch} from "@app/core/state"
import {chatSearch} from "@app/chats"
import {pushModal} from "@app/modal"
type Props = {
+1 -1
View File
@@ -9,7 +9,7 @@
import ChatItem from "@app/components/ChatItem.svelte"
import ChatStart from "@app/components/ChatStart.svelte"
import ChatMenu from "@app/components/ChatMenu.svelte"
import {chatSearch} from "@app/core/state"
import {chatSearch} from "@app/chats"
import {pushModal} from "@app/modal"
let term = $state("")
+3 -3
View File
@@ -1,6 +1,6 @@
<script context="module" lang="ts">
import {synced} from "@welshman/store"
import {kv} from "@app/core/storage"
import {kv} from "@app/storage"
const dmNotificationsPrompted = synced({
key: "dmNotificationsPrompted",
@@ -16,8 +16,8 @@
import {append, uniq} from "@welshman/lib"
import {pubkey} from "@welshman/app"
import Chat from "@app/components/Chat.svelte"
import {splitChatId} from "@app/core/state"
import {notificationSettings} from "@app/core/state"
import {splitChatId} from "@app/chats"
import {notificationSettings} from "@app/settings"
import {pushToast} from "@app/toast"
import {Push} from "@app/push"
+1 -1
View File
@@ -8,7 +8,7 @@
import Button from "@lib/components/Button.svelte"
import CardButton from "@lib/components/CardButton.svelte"
import {goToSpace} from "@app/routes"
import {PLATFORM_NAME, PLATFORM_RELAYS} from "@app/core/state"
import {PLATFORM_NAME, PLATFORM_RELAYS} from "@app/env"
const openChat = () => goto("/chat")
+1 -1
View File
@@ -8,7 +8,7 @@
import Page from "@lib/components/Page.svelte"
import ContentSearch from "@lib/components/ContentSearch.svelte"
import PeopleItem from "@app/components/PeopleItem.svelte"
import {bootstrapPubkeys} from "@app/core/state"
import {bootstrapPubkeys} from "@app/social"
let term = $state("")
let limit = $state(10)
+1 -1
View File
@@ -4,7 +4,7 @@
import Button from "@lib/components/Button.svelte"
import Icon from "@lib/components/Icon.svelte"
import ProfileDetail from "@app/components/ProfileDetail.svelte"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
import {pushModal} from "@app/modal"
import Code from "@assets/icons/code-2.svg?dataurl"
import Global from "@assets/icons/global.svg?dataurl"
+1 -1
View File
@@ -12,7 +12,7 @@
import {pushToast} from "@app/toast"
import {clearBadges} from "@app/notifications"
import {Push} from "@app/push"
import {notificationSettings} from "@app/core/state"
import {notificationSettings} from "@app/settings"
const reset = () => {
settings = {...notificationSettings.get()}
+2 -2
View File
@@ -20,8 +20,8 @@
import Button from "@lib/components/Button.svelte"
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {pushToast} from "@app/toast"
import {PLATFORM_NAME, userSettingsValues} from "@app/core/state"
import {publishSettings} from "@app/core/commands"
import {PLATFORM_NAME} from "@app/env"
import {userSettingsValues, publishSettings} from "@app/settings"
const reset = () => {
settings = {...$userSettingsValues}
+2 -2
View File
@@ -5,8 +5,8 @@
import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte"
import {pushToast} from "@app/toast"
import {PLATFORM_NAME, RelayAuthMode, userSettingsValues} from "@app/core/state"
import {publishSettings} from "@app/core/commands"
import {PLATFORM_NAME} from "@app/env"
import {RelayAuthMode, userSettingsValues, publishSettings} from "@app/settings"
const reset = () => {
settings = {...$userSettingsValues}
+2 -2
View File
@@ -24,8 +24,8 @@
import Icon from "@lib/components/Icon.svelte"
import RelaySettingsItem from "@app/components/RelaySettingsItem.svelte"
import RelaySettingsHealthChecks from "@app/components/RelaySettingsHealthChecks.svelte"
import {hasNip50} from "@app/core/state"
import {discoverRelays} from "@app/core/requests"
import {hasNip50} from "@app/relays"
import {discoverRelays} from "@app/relays"
const readRelayUrls = derivePubkeyRelays($pubkey!, RelayMode.Read)
const writeRelayUrls = derivePubkeyRelays($pubkey!, RelayMode.Write)
+1 -1
View File
@@ -13,7 +13,7 @@
import WalletDisconnect from "@app/components/WalletDisconnect.svelte"
import WalletUpdateReceivingAddress from "@app/components/WalletUpdateReceivingAddress.svelte"
import {pushModal} from "@app/modal"
import {getNwcClient, getWebLn} from "@app/core/commands"
import {getNwcClient, getWebLn} from "@app/lightning"
import Wallet2 from "@assets/icons/wallet.svg?dataurl"
import CheckCircle from "@assets/icons/check-circle.svg?dataurl"
import AddCircle from "@assets/icons/add-circle.svg?dataurl"
+5 -11
View File
@@ -26,16 +26,10 @@
import SpaceAdd from "@app/components/SpaceAdd.svelte"
import SpaceInviteAccept from "@app/components/SpaceInviteAccept.svelte"
import SpaceJoin from "@app/components/SpaceJoin.svelte"
import {
userSpaceUrls,
loadUserGroupList,
PLATFORM_RELAYS,
DEFAULT_RELAYS,
groupListPubkeysByUrl,
bootstrapPubkeys,
parseInviteLink,
} from "@app/core/state"
import {setSpaceMembershipOrder} from "@app/core/commands"
import {userSpaceUrls, loadUserGroupList, groupListPubkeysByUrl, setSpaceOrder} from "@app/groups"
import {PLATFORM_RELAYS, DEFAULT_RELAYS} from "@app/env"
import {bootstrapPubkeys} from "@app/social"
import {parseInviteLink} from "@app/invites"
import {pushModal} from "@app/modal"
import {goToSpace, makeSpacePath} from "@app/routes"
import {notifications} from "@app/notifications"
@@ -134,7 +128,7 @@
lastDragTarget = undefined
if (dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) {
void setSpaceMembershipOrder(orderedSpaceUrls).catch(console.error)
void setSpaceOrder(orderedSpaceUrls).catch(console.error)
}
dragStartOrder = undefined
+3 -2
View File
@@ -15,8 +15,9 @@
import SpaceJoin from "@app/components/SpaceJoin.svelte"
import {pushModal} from "@app/modal"
import {makeSpacePath} from "@app/routes"
import {decodeRelay, userGroupList, relaysPendingTrust, userSpaceUrls} from "@app/core/state"
import {deriveRelayAuthError} from "@app/core/commands"
import {decodeRelay, deriveRelayAuthError} from "@app/relays"
import {userGroupList, userSpaceUrls} from "@app/groups"
import {relaysPendingTrust} from "@app/policies"
type Props = {
children?: Snippet
+1 -1
View File
@@ -2,7 +2,7 @@
import {page} from "$app/stores"
import theme from "tailwindcss/defaultTheme"
import SecondaryNav from "@lib/components/SecondaryNav.svelte"
import {decodeRelay} from "@app/core/state"
import {decodeRelay} from "@app/relays"
import {goToSpace} from "@app/routes"
import PrimaryNavSpaces from "@app/components/PrimaryNavSpaces.svelte"
import SpaceMenu from "@app/components/SpaceMenu.svelte"
+7 -12
View File
@@ -32,22 +32,17 @@
import ThunkToast from "@app/components/ThunkToast.svelte"
import RoomItemAddMember from "@src/app/components/RoomItemAddMember.svelte"
import RoomComposeEdit from "@src/app/components/RoomComposeEdit.svelte"
import {canEnforceNip70, prependParent, publishDelete} from "@app/core/commands"
import {
decodeRelay,
deriveRoom,
deriveUserRoomMembershipStatus,
getRoomType,
MembershipStatus,
PROTECTED,
RoomType,
userSettingsValues,
} from "@app/core/state"
import {canEnforceNip70} from "@app/relays"
import {prependParent, deriveRoom, getRoomType, PROTECTED, RoomType} from "@app/groups"
import {publishDelete} from "@app/deletes"
import {decodeRelay} from "@app/relays"
import {deriveUserRoomMembershipStatus, MembershipStatus} from "@app/members"
import {userSettingsValues} from "@app/settings"
import VoiceWidget from "@app/components/VoiceWidget.svelte"
import VideoCallContent from "@app/components/VideoCallContent.svelte"
import {VoiceState, currentVoiceRoom, voiceState} from "@app/call/stores"
import {VideoCallLayout, videoCallLayout, videoTileCount} from "@app/call/video"
import {makeFeed} from "@app/core/requests"
import {makeFeed} from "@app/feeds"
import {popKey} from "@lib/implicit"
import {checked, deferredRoomPath, setChecked} from "@app/notifications"
import {makeRoomPath} from "@app/routes"
@@ -18,8 +18,9 @@
import CalendarEventItem from "@app/components/CalendarEventItem.svelte"
import CalendarEventCreate from "@app/components/CalendarEventCreate.svelte"
import {pushModal} from "@app/modal"
import {decodeRelay, makeCommentFilter} from "@app/core/state"
import {makeCalendarFeed} from "@app/core/requests"
import {decodeRelay} from "@app/relays"
import {makeCommentFilter} from "@app/content"
import {makeCalendarFeed} from "@app/feeds"
const url = decodeRelay($page.params.relay!)
@@ -22,7 +22,8 @@
import CalendarEventMeta from "@app/components/CalendarEventMeta.svelte"
import CalendarEventDate from "@app/components/CalendarEventDate.svelte"
import EventReply from "@app/components/EventReply.svelte"
import {deriveEvent, decodeRelay} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {decodeRelay} from "@app/relays"
const {relay, address} = $page.params as MakeNonOptional<typeof $page.params>
const url = decodeRelay(relay)
+5 -3
View File
@@ -26,11 +26,13 @@
import RoomCompose from "@app/components/RoomCompose.svelte"
import RoomComposeEdit from "@src/app/components/RoomComposeEdit.svelte"
import RoomComposeParent from "@app/components/RoomComposeParent.svelte"
import {userSettingsValues, decodeRelay, PROTECTED} from "@app/core/state"
import {prependParent, canEnforceNip70, publishDelete} from "@app/core/commands"
import {userSettingsValues} from "@app/settings"
import {decodeRelay, canEnforceNip70} from "@app/relays"
import {PROTECTED, prependParent} from "@app/groups"
import {publishDelete} from "@app/deletes"
import {checked} from "@app/notifications"
import {pushToast} from "@app/toast"
import {makeFeed} from "@app/core/requests"
import {makeFeed} from "@app/feeds"
import {popKey} from "@lib/implicit"
const mounted = now()
@@ -16,9 +16,9 @@
import SpaceBar from "@app/components/SpaceBar.svelte"
import ClassifiedItem from "@app/components/ClassifiedItem.svelte"
import ClassifiedCreate from "@app/components/ClassifiedCreate.svelte"
import {decodeRelay} from "@app/core/state"
import {makeCommentFilter} from "@app/core/state"
import {makeFeed} from "@app/core/requests"
import {decodeRelay} from "@app/relays"
import {makeCommentFilter} from "@app/content"
import {makeFeed} from "@app/feeds"
import {pushModal} from "@app/modal"
const url = decodeRelay($page.params.relay!)
@@ -19,7 +19,8 @@
import ClassifiedActions from "@app/components/ClassifiedActions.svelte"
import CommentActions from "@app/components/CommentActions.svelte"
import EventReply from "@app/components/EventReply.svelte"
import {deriveEvent, decodeRelay} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {decodeRelay} from "@app/relays"
const {relay, address} = $page.params as MakeNonOptional<typeof $page.params>
const url = decodeRelay(relay)
+3 -2
View File
@@ -16,8 +16,9 @@
import SpaceBar from "@app/components/SpaceBar.svelte"
import GoalItem from "@app/components/GoalItem.svelte"
import GoalCreate from "@app/components/GoalCreate.svelte"
import {decodeRelay, makeCommentFilter} from "@app/core/state"
import {makeFeed} from "@app/core/requests"
import {decodeRelay} from "@app/relays"
import {makeCommentFilter} from "@app/content"
import {makeFeed} from "@app/feeds"
import {pushModal} from "@app/modal"
const url = decodeRelay($page.params.relay!)
@@ -19,7 +19,8 @@
import GoalActions from "@app/components/GoalActions.svelte"
import CommentActions from "@app/components/CommentActions.svelte"
import EventReply from "@app/components/EventReply.svelte"
import {deriveEvent, decodeRelay} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {decodeRelay} from "@app/relays"
const {relay, id} = $page.params as MakeNonOptional<typeof $page.params>
const url = decodeRelay(relay)
+3 -2
View File
@@ -16,8 +16,9 @@
import SpaceBar from "@app/components/SpaceBar.svelte"
import PollItem from "@app/components/PollItem.svelte"
import PollCreate from "@app/components/PollCreate.svelte"
import {decodeRelay, makeCommentFilter} from "@app/core/state"
import {makeFeed} from "@app/core/requests"
import {decodeRelay} from "@app/relays"
import {makeCommentFilter} from "@app/content"
import {makeFeed} from "@app/feeds"
import {pushModal} from "@app/modal"
const url = decodeRelay($page.params.relay!)
@@ -17,7 +17,8 @@
import NoteContent from "@app/components/NoteContent.svelte"
import CommentActions from "@app/components/CommentActions.svelte"
import EventReply from "@app/components/EventReply.svelte"
import {deriveEvent, decodeRelay} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {decodeRelay} from "@app/relays"
const {relay, id} = $page.params as MakeNonOptional<typeof $page.params>
const url = decodeRelay(relay)
@@ -49,7 +49,9 @@
import CalendarEventItem from "@app/components/CalendarEventItem.svelte"
import PollItem from "@app/components/PollItem.svelte"
import RecentConversation from "@app/components/RecentConversation.svelte"
import {decodeRelay, deriveEventsForUrl, CONTENT_KINDS} from "@app/core/state"
import {decodeRelay} from "@app/relays"
import {deriveEventsForUrl} from "@app/repository"
import {CONTENT_KINDS} from "@app/content"
import {goToEvent} from "@app/routes"
const url = decodeRelay($page.params.relay!)
@@ -16,9 +16,9 @@
import SpaceBar from "@app/components/SpaceBar.svelte"
import ThreadItem from "@app/components/ThreadItem.svelte"
import ThreadCreate from "@app/components/ThreadCreate.svelte"
import {decodeRelay} from "@app/core/state"
import {makeCommentFilter} from "@app/core/state"
import {makeFeed} from "@app/core/requests"
import {decodeRelay} from "@app/relays"
import {makeCommentFilter} from "@app/content"
import {makeFeed} from "@app/feeds"
import {pushModal} from "@app/modal"
const url = decodeRelay($page.params.relay!)
@@ -19,7 +19,8 @@
import ThreadActions from "@app/components/ThreadActions.svelte"
import CommentActions from "@app/components/CommentActions.svelte"
import EventReply from "@app/components/EventReply.svelte"
import {deriveEvent, decodeRelay} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {decodeRelay} from "@app/relays"
const {relay, id} = $page.params as MakeNonOptional<typeof $page.params>
const url = decodeRelay(relay)