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

5 months ago

0.0.41

5 months ago

0.0.42

5 months ago

0.0.43

4 months ago

0.0.37

5 months ago

0.0.38

5 months ago

0.0.39

5 months ago

0.0.35

6 months ago

0.0.36

6 months ago

0.0.32

7 months ago

0.0.33

7 months ago

0.0.34

6 months ago

0.0.31

7 months ago

0.0.30

7 months ago

0.0.25

8 months ago

0.0.26

8 months ago

0.0.27

7 months ago

0.0.28

7 months ago

0.0.29

7 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

8 months ago

0.0.19

8 months ago

0.0.17

8 months ago

0.0.18

8 months ago

0.0.15

8 months ago

0.0.16

8 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

9 months ago

0.0.8

9 months ago

0.0.7

9 months ago

0.0.6

9 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

10 months ago

0.0.1

10 months ago