0.0.43 • Published 4 months ago

@welshman/app v0.0.43

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

@welshman/store version

Utilities for dealing with svelte stores when using welshman.

import {ctx, setContext} from '@welshman/lib'
import {getNip07} from '@welshman/signer'
import {throttled} from '@welshman/store'
import {createEvent, NOTE} from '@welshman/util'
import {
  getDefaultNetContext,
  getDefaultAppContext,
  signer,
  pubkey,
  publishThunk,
  load,
  initStorage,
  storageAdapters,
  freshness,
  plaintext,
  repository,
  tracker,
} from '@welshman/app'

// Set up app config
setContext({
  net: getDefaultNetContext(),
  app: getDefaultAppContext(),
})

// Log in via NIP 07
addSession({method: 'nip07', pubkey: await getNip07().getPubkey()})

// Signer is ready to go
const event = signer.get().encrypt(/* ... */)

// This will fetch the user's profile automatically, and return an observable that updates
// automatically. Several different stores exist that are ready to go, including handles,
// zappers, relaySelections, relays, follows, mutes.
const profile = deriveProfile(pubkey.get())

// A global router helps make intelligent relay selections
const router = ctx.app.router

// Publish is done using thunks, which optimistically publish to the local database, deferring
// signing and publishing for instant user feedback. Progress is reported as relays accept/reject the event
const thunk = publishThunk({
  relays: router.FromUser().getUrls(),
  event: createEvent(NOTE, {content: "hi"}),
  delay: 3000,
})

// Thunks can be aborted until after `delay`, allowing for soft-undo
thunk.controller.abort()

// Subscriptions automatically infer relays using `router` if not provided. If the request can be cached,
// results from the local repository are returned immediately. `subscribe` and `load` are both available
const events = await load({filters: [{kinds: [NOTE]}])

// Some commands are included
const thunk = follow('97c70a44366a6535c145b333f973ea86dfdc2d7a99da618c40c64705ad98e322')

// Stores can be easily synchronized with indexeddb. Freshness keeps track of how stale the caches are,
// plaintext maps encrypted events to their decrypted content, repository and tracker hold events and
// event/relay mappings, respectively.
const ready = initStorage("my-db", 1, {
  relays: {keyPath: "url", store: throttled(3000, relays)},
  handles: {keyPath: "nip05", store: throttled(3000, handles)},
  freshness: storageAdapters.fromObjectStore(freshness, {throttle: 3000}),
  plaintext: storageAdapters.fromObjectStore(plaintext, {throttle: 3000}),
  events: storageAdapters.fromRepositoryAndTracker(repository, tracker, {throttle: 3000}),
})
0.0.40

6 months ago

0.0.41

6 months ago

0.0.42

6 months ago

0.0.43

4 months ago

0.0.37

6 months ago

0.0.38

6 months ago

0.0.39

6 months ago

0.0.35

7 months ago

0.0.36

6 months ago

0.0.32

7 months ago

0.0.33

7 months ago

0.0.34

7 months ago

0.0.31

8 months ago

0.0.30

8 months ago

0.0.25

8 months ago

0.0.26

8 months ago

0.0.27

8 months ago

0.0.28

8 months ago

0.0.29

8 months ago

0.0.21

8 months ago

0.0.22

8 months ago

0.0.23

8 months ago

0.0.24

8 months ago

0.0.20

9 months ago

0.0.19

9 months ago

0.0.17

9 months ago

0.0.18

9 months ago

0.0.15

9 months ago

0.0.16

9 months ago

0.0.10

9 months ago

0.0.11

9 months ago

0.0.12

9 months ago

0.0.13

9 months ago

0.0.14

9 months ago

0.0.9

10 months ago

0.0.8

10 months ago

0.0.7

10 months ago

0.0.6

10 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

11 months ago

0.0.1

11 months ago