Welshman Docs / @welshman/app
@welshman/app
Enumerations
WotScope
Defined in: app/src/plugins/wot.ts:21
How much of the graph a read counts: every list in the repository, or only the lists the current user's follows published.
Enumeration Members
Follows
Follows:
"follows"
Defined in: app/src/plugins/wot.ts:23
Global
Global:
"global"
Defined in: app/src/plugins/wot.ts:22
Classes
- App
- BaseThunk
- BlockedRelayLists
- BlossomServerLists
- Command
- Deletes
- DerivedPlugin
- Domain
- Events
- FeedLists
- Feeds
- FollowLists
- Handles
- LoadableMapPlugin
- Logger
- MapPlugin
- MergedThunk
- MessagingRelayLists
- MuteLists
- Network
- Pinboards
- PinLists
- Pins
- Plaintext
- Profiles
- Reactions
- RelayLists
- RelayManagement
- RelayMemberLists
- RelayRoles
- Relays
- RelayScopedDerivedPlugin
- RelaySignedDerivedPlugin
- RelayStats
- RoomLists
- RoomPinLists
- Rooms
- Router
- SearchRelayLists
- Sync
- Thunk
- Thunks
- Topics
- User
- Wot
- Wraps
- Zappers
Interfaces
Type Aliases
AppConfig
AppConfig =
object
Defined in: app/src/app.ts:8
Properties
dufflepudUrl?
optionaldufflepudUrl:string
Defined in: app/src/app.ts:9
getDefaultRelays()?
optionalgetDefaultRelays: () =>string[]
Defined in: app/src/app.ts:10
Returns
string[]
getIndexerRelays()?
optionalgetIndexerRelays: () =>string[]
Defined in: app/src/app.ts:11
Returns
string[]
getSearchRelays()?
optionalgetSearchRelays: () =>string[]
Defined in: app/src/app.ts:12
Returns
string[]
AppOptions
AppOptions =
object
Defined in: app/src/app.ts:15
Properties
config?
optionalconfig:AppConfig
Defined in: app/src/app.ts:17
getAdapter?
optionalgetAdapter:AdapterFactory
Defined in: app/src/app.ts:18
policies?
optionalpolicies:AppPolicy[]
Defined in: app/src/app.ts:19
user?
optionaluser:User
Defined in: app/src/app.ts:16
AppPolicy()
AppPolicy = (
app) =>Unsubscriber
Defined in: app/src/policy.ts:21
An app policy is a side effect applied once per app at construction, returning a cleanup function — directly analogous to a socket policy. Policies own everything that subscribes or links components together (event ingestion, stats collection, gift-wrap unwrapping), so the data classes themselves stay pure and free of subscriptions, and teardown is centralized in cleanup().
Parameters
app
Returns
Unsubscriber
AppSyncOpts
AppSyncOpts =
object
Defined in: app/src/plugins/sync.ts:8
Properties
filters
filters:
Filter[]
Defined in: app/src/plugins/sync.ts:10
relays
relays:
string[]
Defined in: app/src/plugins/sync.ts:9
DerivedPluginOptions<T>
DerivedPluginOptions<
T> =object
Defined in: app/src/plugins/base.ts:189
Type Parameters
T
T
Properties
eventToItem
eventToItem:
EventToItem<T>
Defined in: app/src/plugins/base.ts:191
filters
filters:
Filter[]
Defined in: app/src/plugins/base.ts:190
getKey()
getKey: (
item) =>string
Defined in: app/src/plugins/base.ts:192
Parameters
item
T
Returns
string
loadOptions?
optionalloadOptions:MakeLoadItemOptions
Defined in: app/src/plugins/base.ts:193
FeedFields
FeedFields =
object
Defined in: app/src/plugins/feeds.ts:18
Properties
definition
definition:
Feed
Defined in: app/src/plugins/feeds.ts:21
description?
optionaldescription:string
Defined in: app/src/plugins/feeds.ts:20
title
title:
string
Defined in: app/src/plugins/feeds.ts:19
LogMessage
LogMessage =
object
Defined in: app/src/plugins/logger.ts:6
Indexable
[key: string]: unknown
Properties
at
at:
number
Defined in: app/src/plugins/logger.ts:9
id
id:
string
Defined in: app/src/plugins/logger.ts:8
source
source:
string
Defined in: app/src/plugins/logger.ts:7
MakeFeedControllerOptions
MakeFeedControllerOptions =
Partial<Omit<FeedControllerOptions,"feed">> &object
Defined in: app/src/plugins/feeds.ts:14
Type declaration
feed
feed:
Feed
PinboardFields
PinboardFields =
object
Defined in: app/src/plugins/pinboards.ts:11
Properties
collaborative?
optionalcollaborative:boolean
Defined in: app/src/plugins/pinboards.ts:16
description?
optionaldescription:string
Defined in: app/src/plugins/pinboards.ts:13
image?
optionalimage:string
Defined in: app/src/plugins/pinboards.ts:14
title
title:
string
Defined in: app/src/plugins/pinboards.ts:12
topics?
optionaltopics:string[]
Defined in: app/src/plugins/pinboards.ts:15
Plugin()<T>
Plugin<
T> = (app) =>T
Defined in: app/src/app.ts:22
Type Parameters
T
T = unknown
Parameters
app
Returns
T
Projection<T>
Projection<
T> =object
Defined in: app/src/plugins/base.ts:23
Utility type which allows for using the same value both for hot gets and derived subscriptions
Type Parameters
T
T
Properties
$
$:
Readable<T>
Defined in: app/src/plugins/base.ts:25
get()
get: () =>
T
Defined in: app/src/plugins/base.ts:24
Returns
T
RelayScopedDerivedPluginOptions<T>
RelayScopedDerivedPluginOptions<
T> =object
Defined in: app/src/plugins/base.ts:243
Type Parameters
T
T
Properties
eventToItem
eventToItem:
EventToItem<T>
Defined in: app/src/plugins/base.ts:245
filters
filters:
Filter[]
Defined in: app/src/plugins/base.ts:244
getKey()
getKey: (
item,url) =>string|undefined
Defined in: app/src/plugins/base.ts:247
Parameters
item
T
url
string
Returns
string | undefined
loadOptions?
optionalloadOptions:MakeLoadItemOptions
Defined in: app/src/plugins/base.ts:248
revalidateOn?
optionalrevalidateOn:Readable<unknown>
Defined in: app/src/plugins/base.ts:251
RelaySignedItem
RelaySignedItem =
object
Defined in: app/src/plugins/relays.ts:73
Methods
author()
author():
string
Defined in: app/src/plugins/relays.ts:73
Returns
string
RelayStatsItem
RelayStatsItem =
object
Defined in: app/src/plugins/relayStats.ts:10
Properties
close_count
close_count:
number
Defined in: app/src/plugins/relayStats.ts:15
eose_count
eose_count:
number
Defined in: app/src/plugins/relayStats.ts:28
event_count
event_count:
number
Defined in: app/src/plugins/relayStats.ts:18
first_seen
first_seen:
number
Defined in: app/src/plugins/relayStats.ts:12
last_auth
last_auth:
number
Defined in: app/src/plugins/relayStats.ts:25
last_close
last_close:
number
Defined in: app/src/plugins/relayStats.ts:20
last_error
last_error:
number
Defined in: app/src/plugins/relayStats.ts:21
last_event
last_event:
number
Defined in: app/src/plugins/relayStats.ts:24
last_open
last_open:
number
Defined in: app/src/plugins/relayStats.ts:19
last_publish
last_publish:
number
Defined in: app/src/plugins/relayStats.ts:22
last_request
last_request:
number
Defined in: app/src/plugins/relayStats.ts:23
notice_count
notice_count:
number
Defined in: app/src/plugins/relayStats.ts:29
open_count
open_count:
number
Defined in: app/src/plugins/relayStats.ts:14
publish_count
publish_count:
number
Defined in: app/src/plugins/relayStats.ts:16
publish_failure_count
publish_failure_count:
number
Defined in: app/src/plugins/relayStats.ts:27
publish_success_count
publish_success_count:
number
Defined in: app/src/plugins/relayStats.ts:26
recent_errors
recent_errors:
number[]
Defined in: app/src/plugins/relayStats.ts:13
request_count
request_count:
number
Defined in: app/src/plugins/relayStats.ts:17
url
url:
string
Defined in: app/src/plugins/relayStats.ts:11
RelayStatsUpdate
RelayStatsUpdate = [
string, (stats) =>void]
Defined in: app/src/plugins/relayStats.ts:8
Room
Room =
object
Defined in: app/src/plugins/rooms.ts:53
Properties
admins?
optionaladmins:RoomAdminsReader
Defined in: app/src/plugins/rooms.ts:59
h
h:
string
Defined in: app/src/plugins/rooms.ts:54
id
id:
string
Defined in: app/src/plugins/rooms.ts:55
members?
optionalmembers:RoomMembersReader
Defined in: app/src/plugins/rooms.ts:58
meta?
optionalmeta:RoomMetaReader
Defined in: app/src/plugins/rooms.ts:57
url
url:
string
Defined in: app/src/plugins/rooms.ts:56
RoomMeta
RoomMeta =
object
Defined in: app/src/plugins/rooms.ts:63
Properties
about?
optionalabout:string
Defined in: app/src/plugins/rooms.ts:66
h
h:
string
Defined in: app/src/plugins/rooms.ts:64
isClosed?
optionalisClosed:boolean
Defined in: app/src/plugins/rooms.ts:69
isHidden?
optionalisHidden:boolean
Defined in: app/src/plugins/rooms.ts:70
isPrivate?
optionalisPrivate:boolean
Defined in: app/src/plugins/rooms.ts:71
isRestricted?
optionalisRestricted:boolean
Defined in: app/src/plugins/rooms.ts:72
livekit?
optionallivekit:boolean
Defined in: app/src/plugins/rooms.ts:73
name?
optionalname:string
Defined in: app/src/plugins/rooms.ts:65
picture?
optionalpicture:string
Defined in: app/src/plugins/rooms.ts:67
pictureMeta?
optionalpictureMeta:string[]
Defined in: app/src/plugins/rooms.ts:68
Search<V, T>
Search<
V,T> =object
Defined in: app/src/plugins/base.ts:35
Type Parameters
V
V
T
T
Properties
getOption()
getOption: (
value) =>T|undefined
Defined in: app/src/plugins/base.ts:38
Parameters
value
V
Returns
T | undefined
getValue()
getValue: (
item) =>V
Defined in: app/src/plugins/base.ts:37
Parameters
item
T
Returns
V
options
options:
T[]
Defined in: app/src/plugins/base.ts:36
searchOptions()
searchOptions: (
term) =>T[]
Defined in: app/src/plugins/base.ts:39
Parameters
term
string
Returns
T[]
searchValues()
searchValues: (
term) =>V[]
Defined in: app/src/plugins/base.ts:40
Parameters
term
string
Returns
V[]
SearchOptions<V, T>
SearchOptions<
V,T> =object
Defined in: app/src/plugins/base.ts:28
Type Parameters
V
V
T
T
Properties
fuseOptions?
optionalfuseOptions:IFuseOptions<T>
Defined in: app/src/plugins/base.ts:30
getValue()
getValue: (
item) =>V
Defined in: app/src/plugins/base.ts:29
Parameters
item
T
Returns
V
onSearch()?
optionalonSearch: (term) =>void
Defined in: app/src/plugins/base.ts:31
Parameters
term
string
Returns
void
sortFn()?
optionalsortFn: (items) =>any
Defined in: app/src/plugins/base.ts:32
Parameters
items
FuseResult<T>
Returns
any
SendWrappedOptions
SendWrappedOptions =
Omit<ThunkOptions,"event"|"relays"|"recipient"|"app"|"user"> &object
Defined in: app/src/plugins/wraps.ts:11
Type declaration
event
event:
EventTemplate
recipients
recipients:
string[]
Session<M, D>
Session<
M,D> =object
Defined in: app/src/session.ts:9
Type Parameters
M
M extends string = string
D
D = unknown
Properties
data
data:
D
Defined in: app/src/session.ts:11
method
method:
M
Defined in: app/src/session.ts:10
SessionHandler<M, D>
SessionHandler<
M,D> =object
Defined in: app/src/session.ts:16
Type Parameters
M
M extends string
D
D
Properties
getSigner()
getSigner: (
data) =>MaybeAsync<ISigner>
Defined in: app/src/session.ts:18
Parameters
data
D
Returns
method
method:
M
Defined in: app/src/session.ts:17
ThunkOptions
ThunkOptions =
Override<PublishOptions, {app:IApp;delay:number;event:EventTemplate;pow:number;recipient:string; }>
Defined in: app/src/plugins/thunk.ts:20
Topic
Topic =
object
Defined in: app/src/plugins/topics.ts:11
Properties
count
count:
number
Defined in: app/src/plugins/topics.ts:13
name
name:
string
Defined in: app/src/plugins/topics.ts:12
Variables
appPolicyAuthAlways
constappPolicyAuthAlways:AppPolicy
Defined in: app/src/policy.ts:58
appPolicyAuthNever
constappPolicyAuthNever:AppPolicy
Defined in: app/src/policy.ts:56
appPolicyAuthUnlessBlocked
constappPolicyAuthUnlessBlocked:AppPolicy
Defined in: app/src/policy.ts:60
appPolicyCacheDecrypt
constappPolicyCacheDecrypt:AppPolicy
Defined in: app/src/policy.ts:123
Wraps user.signer in a WrappedSigner which checks the plaintext cache before attempting to decrypt something.
appPolicyIngest
constappPolicyIngest:AppPolicy
Defined in: app/src/policy.ts:73
Ingests every event received on any socket into the app's repository. The net layer doesn't do this for us, and it's how all the repository-backed collections (and gift-wrap unwrapping) get populated.
appPolicyLogSignerMethods
constappPolicyLogSignerMethods:AppPolicy
Defined in: app/src/policy.ts:142
Wraps user.signer in a WrappedSigner which logs sign requests to the app logger.
appPolicyRelayStats
constappPolicyRelayStats:AppPolicy
Defined in: app/src/policy.ts:95
Listens to socket activity on the app's pool into the RelayStats store.
appPolicyWraps
constappPolicyWraps:AppPolicy
Defined in: app/src/policy.ts:103
Watches the app's repository for gift wraps (existing and incoming) and feeds them to the unwrap queue.
defaultAppPolicies
constdefaultAppPolicies:AppPolicy[]
Defined in: app/src/policy.ts:166
nip01
constnip01:SessionHandler<"nip01", {secret:string; }>
Defined in: app/src/session.ts:36
nip07
constnip07:SessionHandler<"nip07",Record<string,never>>
Defined in: app/src/session.ts:41
nip46
constnip46:SessionHandler<"nip46", {clientSecret:string;relays:string[];signerPubkey:string; }>
Defined in: app/src/session.ts:46
nip55
constnip55:SessionHandler<"nip55", {pubkey:string;signer:string; }>
Defined in: app/src/session.ts:52
pomade
constpomade:SessionHandler<"pomade", {clientOptions:ClientOptions;string; }>
Defined in: app/src/session.ts:57
sessionHandlers
constsessionHandlers:Map<string,SessionHandler<string,any>>
Defined in: app/src/session.ts:65
Functions
createApp()
createApp(
options):App
Defined in: app/src/createApp.ts:13
Creates a batteries-included app: an App wired with the default app policies (event ingestion, relay-stats collection, gift-wrap unwrapping). Reach data modules via app.use(Profiles), app.use(FollowLists), etc.
For a bare app (no default side effects) construct new App(...) directly, or pass your own policies.
Parameters
options
AppOptions = {}
Returns
createSearch()
createSearch<
V,T>(options,opts):Search<V,T>
Defined in: app/src/plugins/base.ts:48
A reusable fuzzy-search primitive over a fixed list of options. Plugins that expose a search (profiles, topics, relays) build one of these reactively from their collection. Blends fuse scoring with an optional sortFn.
Type Parameters
V
V
T
T
Parameters
options
T[]
opts
SearchOptions<V, T>
Returns
Search<V, T>
defineSessionHandler()
defineSessionHandler<
M,D>(handler):SessionHandler<M,D>
Defined in: app/src/session.ts:26
Define a session handler. M and D are inferred from the arguments, so getSigner is type-checked against the data shape — and the same handler is used to build typed sessions (toSession) and to reconstruct signers.
Type Parameters
M
M extends string
D
D
Parameters
handler
SessionHandler<M, D>
Returns
SessionHandler<M, D>
getSignerFromSession()
getSignerFromSession(
session):undefined|MaybeAsync<ISigner>
Defined in: app/src/session.ts:75
Parameters
session
Returns
undefined | MaybeAsync<ISigner>
makeAppPolicyAuth()
makeAppPolicyAuth(
shouldAuth):AppPolicy
Defined in: app/src/policy.ts:34
Builds an app policy that authenticates the app's sockets (NIP-42) with the user's signer. It appends an auth socket policy to the pool's socketPolicies, so every socket the pool creates answers AUTH challenges according to shouldAuth; the policy is spliced back out on cleanup. No-op when the app has no user.
Use the appPolicyAuthAlways / appPolicyAuthNever presets below, or call this with a custom predicate.
Parameters
shouldAuth
(socket, app) => boolean
Returns
makeRelayRoleKey()
makeRelayRoleKey(
url,d):string
Defined in: app/src/plugins/relayRoles.ts:13
Parameters
url
string
d
string
Returns
string
makeRelayStatsItem()
makeRelayStatsItem(
url):RelayStatsItem
Defined in: app/src/plugins/relayStats.ts:32
Parameters
url
string
Returns
makeRoomKey()
makeRoomKey(
url,room):string
Defined in: app/src/plugins/rooms.ts:42
Parameters
url
string
room
string
Returns
string
projectFrom()
projectFrom<
S,U>(src,read):Projection<U>
Defined in: app/src/plugins/base.ts:86
Build a Projection derived from another Projection: re-read src reactively via .$ or synchronously via .get().
Type Parameters
S
S
U
U
Parameters
src
Projection<S>
read
($) => U
Returns
Projection<U>
projection()
projection<
T>($,read?):Projection<T>
Defined in: app/src/plugins/base.ts:77
Build a Projection from a readable store and an optional read function, which falls back to get($). On hot paths, the store value is cached, and read is skipped.
Type Parameters
T
T
Parameters
$
Readable<T>
read?
() => T
Returns
Projection<T>
publish()
publish(
command):Thunk
Defined in: app/src/command.ts:42
Parameters
command
Returns
publishAsRelay()
publishAsRelay(
url): (command) =>Promise<Thunk>
Defined in: app/src/command.ts:47
Parameters
url
string
Returns
(
command):Promise<Thunk>
Parameters
command
Returns
Promise<Thunk>
publishToRelays()
publishToRelays(
urls): (command) =>Thunk
Defined in: app/src/command.ts:44
Parameters
urls
string[]
Returns
(
command):Thunk
Parameters
command
Returns
registerSessionHandler()
registerSessionHandler(
handler):void
Defined in: app/src/session.ts:67
Parameters
handler
SessionHandler<string, any>
Returns
void
signAsRelay()
signAsRelay(
url): (command) =>Promise<ManagementResponse>
Defined in: app/src/command.ts:49
Parameters
url
string
Returns
(
command):Promise<ManagementResponse>
Parameters
command
Returns
Promise<ManagementResponse>
splitRelayRoleKey()
splitRelayRoleKey(
key): [string,string]
Defined in: app/src/plugins/relayRoles.ts:15
Parameters
key
string
Returns
[string, string]
splitRoomKey()
splitRoomKey(
key): [string,string]
Defined in: app/src/plugins/rooms.ts:44
Parameters
key
string
Returns
[string, string]
toSession()
toSession<
M,D>(handler,data):Session<M,D>
Defined in: app/src/session.ts:29
Build a typed, serializable session from a handler and its data.
Type Parameters
M
M extends string
D
D
Parameters
handler
SessionHandler<M, D>
data
D
Returns
Session<M, D>
unregisterSessionHandler()
unregisterSessionHandler(
handler):void
Defined in: app/src/session.ts:71
Parameters
handler
SessionHandler<string, any>
Returns
void