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

@mladenilic/channel-messenger

v1.0.1

Published

MessageChannel wrapper with simpler API, message acknowledgement and message buffering.

Downloads

21

Readme

Channel Messenger

npm version

MessageChannel wrapper with simpler API, message acknowledgement and message buffering.

Allows for simple 2 way communication between iframe and parent page.

Install

ChannelMessenger is available as NPM package

npm i @mladenilic/channel-messenger

or

yarn add @mladenilic/channel-messenger

Example

Create a messenger inside the main page:

// main-page.js

// Create ChannelMessenger instance
const messenger = new ChannelMessenger();

// Add one or more message event listeners
messenger.onMessage(message => console.log('Message received form the iframe', message));
messenger.onMessage(message => {
  // Do something with the message
});

// Add error handler
messenger.onError(error => console.log('Error occured', error));

// Connect to the iframe
messenger.connect(document.querySelector('iframe'))
  .then(() => console.log('Connected to the iframe'))
  .catch(() => console.log('Failed to connect'));

// Send a message to the iframe
message.send('Hello from the parent page.')
  .then(() => console.log('Message received by the iframe'))
  .catch(() => console.log('Iframe failed to ackwnolede that the message was received.'));

Create a messenger inside the iframe:

// iframe.js

// Create ChannelMessenger instance
const messenger = new ChannelMessenger();

// Add one or more message event listeners
messenger.onMessage(message => console.log('Message received form the parent page', message));
messenger.onMessage(message => {
  // Do something with the message
});

// Add error handler
messenger.onError(error => console.log('Error occured', error));

// Listen from connections from the main page.
messenger.waitForConnection(window)
  .then(() => console.log('connection received'));

// Send a message to the parent page
message.send('Hello from the iframe.')
  .then(() => console.log('Message received by the parent page'))
  .catch(() => console.log('Parent page failed to ackwnolede that the message was received.'));

Check out example for more info.

Options

const messenger = new ChannelMessenger({
  ack: true,    // Enable or disable acknowledgement messages. Default: true
  timeout: 5000 // Set timeout duration for ack messages
});

Features

Message Acknowledgement

When the messenger sends a message, promise is returned. That promise is resolved after messenger get an ACK signal from the receiver. If the timout duration passes and no ACK signal is received for given message, promise is rejected.

If ACK system is disabled using the ack: false option, promises are resolved instantly.

Message Buffering

Messenger allows for messages to be queued up for sending even before the connection is established. Messages are kept in an internal buffer and processed after messenger successfully connects.