Skip to content

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

Interfaces

Type Aliases

AppConfig

AppConfig = object

Defined in: app/src/app.ts:8

Properties

dufflepudUrl?

optional dufflepudUrl: string

Defined in: app/src/app.ts:9

getDefaultRelays()?

optional getDefaultRelays: () => string[]

Defined in: app/src/app.ts:10

Returns

string[]

getIndexerRelays()?

optional getIndexerRelays: () => string[]

Defined in: app/src/app.ts:11

Returns

string[]

getSearchRelays()?

optional getSearchRelays: () => string[]

Defined in: app/src/app.ts:12

Returns

string[]


AppOptions

AppOptions = object

Defined in: app/src/app.ts:15

Properties

config?

optional config: AppConfig

Defined in: app/src/app.ts:17

getAdapter?

optional getAdapter: AdapterFactory

Defined in: app/src/app.ts:18

policies?

optional policies: AppPolicy[]

Defined in: app/src/app.ts:19

user?

optional user: 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

IApp

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?

optional loadOptions: 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?

optional description: 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?

optional collaborative: boolean

Defined in: app/src/plugins/pinboards.ts:16

description?

optional description: string

Defined in: app/src/plugins/pinboards.ts:13

image?

optional image: string

Defined in: app/src/plugins/pinboards.ts:14

title

title: string

Defined in: app/src/plugins/pinboards.ts:12

topics?

optional topics: 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

IApp

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?

optional loadOptions: MakeLoadItemOptions

Defined in: app/src/plugins/base.ts:248

revalidateOn?

optional revalidateOn: 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?

optional admins: 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?

optional members: RoomMembersReader

Defined in: app/src/plugins/rooms.ts:58

meta?

optional meta: 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?

optional about: string

Defined in: app/src/plugins/rooms.ts:66

h

h: string

Defined in: app/src/plugins/rooms.ts:64

isClosed?

optional isClosed: boolean

Defined in: app/src/plugins/rooms.ts:69

isHidden?

optional isHidden: boolean

Defined in: app/src/plugins/rooms.ts:70

isPrivate?

optional isPrivate: boolean

Defined in: app/src/plugins/rooms.ts:71

isRestricted?

optional isRestricted: boolean

Defined in: app/src/plugins/rooms.ts:72

livekit?

optional livekit: boolean

Defined in: app/src/plugins/rooms.ts:73

name?

optional name: string

Defined in: app/src/plugins/rooms.ts:65

picture?

optional picture: string

Defined in: app/src/plugins/rooms.ts:67

pictureMeta?

optional pictureMeta: 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?

optional fuseOptions: 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()?

optional onSearch: (term) => void

Defined in: app/src/plugins/base.ts:31

Parameters
term

string

Returns

void

sortFn()?

optional sortFn: (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

MaybeAsync<ISigner>

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

const appPolicyAuthAlways: AppPolicy

Defined in: app/src/policy.ts:58


appPolicyAuthNever

const appPolicyAuthNever: AppPolicy

Defined in: app/src/policy.ts:56


appPolicyAuthUnlessBlocked

const appPolicyAuthUnlessBlocked: AppPolicy

Defined in: app/src/policy.ts:60


appPolicyCacheDecrypt

const appPolicyCacheDecrypt: 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

const appPolicyIngest: 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

const appPolicyLogSignerMethods: AppPolicy

Defined in: app/src/policy.ts:142

Wraps user.signer in a WrappedSigner which logs sign requests to the app logger.


appPolicyRelayStats

const appPolicyRelayStats: AppPolicy

Defined in: app/src/policy.ts:95

Listens to socket activity on the app's pool into the RelayStats store.


appPolicyWraps

const appPolicyWraps: 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

const defaultAppPolicies: AppPolicy[]

Defined in: app/src/policy.ts:166


nip01

const nip01: SessionHandler<"nip01", { secret: string; }>

Defined in: app/src/session.ts:36


nip07

const nip07: SessionHandler<"nip07", Record<string, never>>

Defined in: app/src/session.ts:41


nip46

const nip46: SessionHandler<"nip46", { clientSecret: string; relays: string[]; signerPubkey: string; }>

Defined in: app/src/session.ts:46


nip55

const nip55: SessionHandler<"nip55", { pubkey: string; signer: string; }>

Defined in: app/src/session.ts:52


pomade

const pomade: SessionHandler<"pomade", { clientOptions: ClientOptions; email: string; }>

Defined in: app/src/session.ts:57


sessionHandlers

const sessionHandlers: 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

App


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

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

AppPolicy


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

RelayStatsItem


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

Command

Returns

Thunk


publishAsRelay()

publishAsRelay(url): (command) => Promise<Thunk>

Defined in: app/src/command.ts:47

Parameters

url

string

Returns

(command): Promise<Thunk>

Parameters
command

Command

Returns

Promise<Thunk>


publishToRelays()

publishToRelays(urls): (command) => Thunk

Defined in: app/src/command.ts:44

Parameters

urls

string[]

Returns

(command): Thunk

Parameters
command

Command

Returns

Thunk


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

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