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 🙏

© 2026 – Pkg Stats / Ryan Hefner

crocodoc-realtime-plugin

v0.11.3

Published

Box viewer realtime-plugin

Readme

Realtime Plugin

Enables realtime page-streaming functionality for Box View conversions in viewer.js. This plugin will automatically load pages as necessary when they finish converting.

The realtime plugin is meant to be used with Box View webhooks to create viewing sessions before the document has completely finished converting (i.e., when the document.viewable notification fires).

Contents

Dependencies

The realtime plugin depends on the EventSource polyfill. You can also get a copy of the polyfill on npm:

npm install event-source-polyfill

Just include eventsource.js in your app along with realtime.js.

Usage

Include realtime.js in your page, and load the plugin as follows:

Example:

var viewer = Crocodoc.createViewer('.viewer', {
    // ...
    plugins: {
        // the Box View realtime URL received when requesting a session
        realtime: {
            url: '<the realtime URL>'
        }
    }
});

Options

The following configuration options are available:

url

The URL to the Box View realtime endpoint associated with the viewing session. This would be available in the View API session response under urls.realtime.

For example, with a session response as follows, the URL would be 'https://view-api.box.com/sse/4fba9eda0dd745d491ad0b98e224aa25'.

{
    'type': 'session',
    'id': '4fba9eda0dd745d491ad0b98e224aa25',
    'expires_at': '3915-10-29T01:31:48.677Z',
    'urls': {
        'view': 'https://view-api.box.com/1/sessions/4fba9eda0dd745d491ad0b98e224aa25/view',
        'assets': 'https://view-api.box.com/1/sessions/4fba9eda0dd745d491ad0b98e224aa25/assets/',
        'realtime': 'https://view-api.box.com/sse/4fba9eda0dd745d491ad0b98e224aa25'
    }
 }

Events

The following events will be fired on the viewer object:

  • realtimeupdate - fired when a new realtime update arrives. Event properties:
    • page - the page that has become available
  • realtimeerror - fired when the an error occurs with realtime. Event properties:
    • error - the error details
  • realtimecomplete - fired when the conversion is complete (we have been notified of all pages being available)

Example:

viewer.on('realtimeupdate', function (event) {
    // some magic function that updates a conversion progress bar
    updateConversionProgress(event.data.page);
});

viewer.on('realtimecomplete', function () {
    alert('the document is finished converting!');
});