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

solid-paxos

v0.0.6

Published

Solid library to execute a Paxos protocol using LDN

Downloads

1

Readme

Solid paxos

A library to use an adjusted Paxos protocol with Solid inboxes and Linked Data Notifications.

Algorithm

The algorithm is the general Paxos algorithm with two adjustments:

  • every message has an accompanying Acknowledgement, allowing the sender to be sure the Linked Data Notification was delivered in the inbox
  • the second step of the second phase (the Accepted step) has been extended to allow a user to reject a consensus value.

Starting processing

To start the processing of inbox elements and sending outbox elements, the inboxCron and outboxCron functions have to be executed once, they will in turn start the cronjobs.

Starting a consensus

To start a consensus, you must use the sendPrepare function and give the Paxos element, this should be an object similar to the following:

{
  "name": "The name of the paxos algorithm, used as an ID",
  "instance": "The instance of the paxos algorithm, usually this increases by 1 every time a new consensus is started",
  "round": "The paxos round of one instance",
  "inbox": "http://example.com/inbox/of/the/proposer",
  "inboxArray": ["list of", "inboxes of all acceptors"]
}

Furthermore, the value to be agreed upon should be stored in ${name}|${instance}|value to accept.

This library will then exchange messages with the acceptors automatically (via the cronjobs) until user interaction is required to accept or reject the value.

Accepting or rejecting a value

The list of pending accepts to which the user has to respond can be found in the localStorage with key "awaitingAccepts". To respond to this pending accept, the createAccepted function should be used with the element to which is replied upon as first argument and a boolean indicating whether it is accepted as the second.

When one of the Acceptors rejects the value, the instance is noted as failed.