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

@mercuryworkshop/wisp-client-js

v1.2.4

Published

A Wisp client implementation, written in Javascript for the use on the web.

Downloads

35

Readme

JavaScript Wisp Client

This is an implementation of a Wisp client, written in Javascript for use on the Web.

Javascript API:

Importing the Library:

To use this library on either NodeJS or the browser, import the wisp.mjs file. Alternatively, use the dist/wisp.js file in the NPM package if you don't want to use an ES6 module.

Connecting to a Wisp Server:

You can create a new Wisp connection by creating a new WispConnection object. The only argument to the constructor is the URL of the Wisp websocket server. Use the open event to know when the Wisp connection is ready.

let conn = new WispConnection("wss://example.com/wisp/");
conn.addEventListener("open", () => {
  console.log("wisp connection is ready!");
});

Creating New Streams:

Once you have your WispConnection object, and you have waited for the connection to be established, you can use the WispConnection.create_stream method to create new streams. The two arguments to this function are the hostname and port of the new stream, and a WispStream object will be returned. You can also pass a third argument to create_stream, which is the type of the stream, and it can be either "tcp" (the default) or "udp".

For receiving incoming messages, use the message event on the WispStream object. The returned data will always be a Uint8Array. The close and error events can be used to know when the stream is closed.

You can use stream.send to send data to the stream, and it must take a Uint8Array as the argument. Newly created streams are available for writing immediately, so you don't have to worry about waiting to send your data.

let stream = conn.create_stream("www.google.com", 80);
stream.addEventListener("message", (event) => {
  let text = new TextDecoder().decode(event.data);
  console.log(text);
});
stream.addEventListener("close", (event) => {
  console.log("stream closed for reason: " + event.code);
});

let payload = "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n";
stream.send(new TextEncoder().encode(payload));

Using the WebSocket Polyfill:

The polyfill.js file provides an API similar to the regular DOM WebSocket API. Instead of creating new WebSocket objects, create WispWebSocket objects. Make sure the URL ends with the hostname and port you want to connect to. If you have code that uses the older wsproxy protocol, you can use this polyfill to provide Wisp support easily.

let ws = new WispWebSocket("wss://example.com/ws/alicesworld.tech:80");
ws.binaryType = "arraybuffer";
ws.addEventListener("open", () => {
  let payload = "GET / HTTP/1.1\r\nHost: alicesworld.tech\r\nConnection: keepalive\r\n\r\n";
  ws.send(payload);
});
ws.addEventListener("message", (event) => {
  let text = new TextDecoder().decode(event.data);
  console.log("message from stream 1: ", text.slice(0, 128));
});

The _wisp_connections global object will be used to manage the active Wisp connections. This object is able to store multiple active Wisp connections, identified by the websocket URL.

Copyright:

This library is licensed under the GNU AGPL v3.

Copyright Notice:

wisp-client-js: a Wisp client implementation written in JavaScript
Copyright (C) 2024 Mercury Workshop

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.