npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@farcaster/shuttle

v0.2.8

Published

Package to help move data from a hub to a database.

Downloads

2,035

Readme

Hub Shuttle Package

Package to help move data from a hub to a database.

Currently in beta. APIs should be relatively stable, but still subject to change.

However, database schema is stable and will not change (except for addition of new tables).

Architecture

Architecture

There are 3 main components:

  • a hub subscriber that listens to the hub for new messages
  • an event processor that can process messages and write them to the database
  • a reconciler that can backfill messages and ensures the messages are in sync with the hub

The event processor has a hook for your code to plug into the message processing loop. You must implement the MessageHandler interface and provide it to the system. The system will call your handleMessageMerge method for each message it processes, within the same transaction where the message is written to the db. The function is always expected to succeed, it is not possible to instruct it to "skip" a message. If your function fails, the message will not be written to the db and will be retried at a later time.

Usage

The package is meant to be used as a library. The app provided is just an example.

If you want to run the test the app, do the following:


# Ensure you have node 21 installed, use nvm to install it

# Within the package directory 
yarn install && yarn build

# Start the dependencies
docker compose up postgres redis
 
# To perform reconciliation/backfill, start the worker (can run multiple processes to speed this up)
POSTGRES_URL=postgres://shuttle:[email protected]:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start worker

# Kick off the backfill process (configure with MAX_FID=100 or BACKFILL_FIDS=1,2,3)
POSTGRES_URL=postgres://shuttle:[email protected]:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start backfill 
 
# Start the app and sync messages from the event stream
POSTGRES_URL=postgres://shuttle:[email protected]:6541 REDIS_URL=0.0.0.0:16379 HUB_HOST=<host>:<port> HUB_SSL=false yarn start start

If you are using this as a package implement the MessageHandler interface and take a look at the App class on how to call the other classes.

TODO

  • [ ] Onchain events and fnames
  • [ ] Detect if already backfilled and only backfill if not
  • [ ] Better retries and error handling
  • [ ] More tests