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

@plotdb/ews

v0.0.18

Published

elastic websocket

Downloads

40

Readme

@plotdb/ews

elastic websocket.

Usage

Constructor options:

  • ws: websocket object to use. auto-greated if omitted and url is derivable.
  • scheme: scheme of the URL to use. ignored if url or ws is provided. default ws if omitted
  • domain: domain of the URL to use. ignored if url or ws is provided. window.location.host is used if omitted
  • path: path of the URL to use. ignored if url or ws is provided. default `` if omitted.
  • url: url for websocket connection.
    • ignored if ws is provided.
    • derived from scheme, domain and path above if both ws and url are omitted
  • scope: scope of this socket. default ``

API (ews):

  • pipe(scope): return a scoped ews object piped from this ews object.
  • ws(): return the real websocket object used.
  • ensure(): ensure connection. return Promise, resolves when connected
  • disconnect(): disconnect websocket from server.
    • return Promise when disconnected.
  • connect(opt): reconnect websocket if disconnected. return a Promise which is resolved when connected.
    • options:
      • retry: automatically retry if set to true. default true.
      • delay: delay ( in millisecond) before first connection attmpt. default 0
      • now: reset current reconnection attempts and start a new attempt immediately
  • cancel(): cancel connection. return Promise, resolves when connection canceled.
    • reject lderror 1026 if no connection to cancel.
  • status(): get connection status. return a integer with following possible values:
    • 0: not connected
    • 1: connecting
    • 2: connected
  • ping(opt): periodically ping remote server (heartbeat) to prevent disconnecting.
    • opt is an object with following field:
      • now: default false. if false, ping message is sent after ping interval; otherwise it will be sent immediately.
  • unping(): stop ping.

API (from original WebSocket):

  • send
  • close
  • addEventListener
  • dispatchEvent
  • removeEventListener
  • on: (TBD) used by websocket-json-stream

Events

Except original WebSocket events, we provide additional events as follows:

  • offline: when network goes offline, this event is fired.
    • close somehow may not yet fired when offline is fired, so this can be used to hint user about a dying socket.

Sharedb

Sharedb is bundled in this repo, in following files:

  • dist/sharedb.min.js: standalone sharedb bundle, expose sharedb object.
  • dist/sdb-client.min.js: client side sharedb wrapper
  • dist/sdb-server.min.js: server side sharedb wrapper

sdb-client

prepare a ews object:

  ws = new ews({url: ...});

create a sdb-client everytime the ews object (re)connected:

  ws.on("open", function() {
    sdb = new ews.sdb-client({ws: ws});
    sdb.connect().then( ... );
  });

Additionally, following events are available in sdb-client:

  • close: socket is closed.
  • error: fired when receiving error events from sharedb Doc or Connection.
    • NOTE please always handle error event to keep your doc up to date.

sdb-server

use http and ws module to create a WebSocket server ( use express as example ):

sdbServer = require("@plotdb/ews/sdb-server")
app = express();
server = http.createServer(express());
wss = new ws.Server({ server: server });
ret = sdb-server({io: {postgres configuration ...} , wss})
wss.on("connection", function(ws, req) {
  /* you can still use the created ws object */
  var myws = new ews({ws});
  ...
});

Metadata

If metadata(opt) function is provided, it will be called when commit hook is triggered with an object including following parameters:

  • m: the metadata object from sharedb op.
  • type: either readSnapshots or submit.
  • collection: target collection.
  • id: target doc id. This will be null if there are multiple doc ids - in this case, check snapshots instead.
  • req: the express request object.
  • session: shorthand for req.session from express-session.
  • user: shorthand for session.user from passport.

edit the m field directly to inject necessary metadata. For example, add user id:

metadata = ({m, user, session, collection, id, snaptshos}) -> m.user = (if user? => user.key else 0)

Access Control

If access is function provided, it will be called in following hooks:

  • readSnapshots
  • submit

access(opt) is called with an object containing following paramters:

  • type: either readSnapshots or submit.
  • collection: target collection.
  • id: target doc id. This will be null if there are multiple doc ids - in this case, check snapshots instead.
  • snapshots: array of snapshots. Only provided when called by readSnapshots hook.
  • req: the express request object.
  • session: shorthand for req.session from express-session.
  • user: shorthand for session.user from passport.

access(opt) should return a Promise which only resolve when access is granted. By default the returned promise reject a lderror id 1012 error when access is denied.

Here is an example to prevent new document creation:

access = ({snapshots}) ->
  if snapshots and !(snapshots.0.id) =>
    return lderror.reject 1012
  return Promise.resolve!

Please note that ShareDB logs rejected errors (by recognizing its stack attribute) and wrap errors in {code, message} format. Consider rejecting a plain lderror object as above example, @plotdb/ews will wrap/parse your lderror objects for you so you can receive a correct lderror object in frontend.

License

MIT