Socket
Socket
Sign inDemoInstall

enhanced-datachannel

Package Overview
Dependencies
2
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    enhanced-datachannel

Wanna `enhance(RTCDataChannel)` for general usage.


Version published
Maintainers
1
Install size
107 kB
Created

Readme

Source

enhanced-datachannel

The enhance(RTCDataChannel) functions for general usage.

Install

npm i enhanced-datachannel

You need to bundle into your app using webpack, rollup, etc....

Exports

import { based, promised, chunked } from "enhanced-datachannel";

const pc = new RTCPeerConnection();

// create DataChannel instance
const dc = pc.createDataChannel("mych");
// or
pc.addEventListener("datachannel", ev => {
  const dc = ev.channel;
});

// signaling by yourself and connect p2p...

// enhance it for your usage!
const basedDC = based(dc);
// or
const promisedDC = promised(dc);
// or
const chunkedDC = chunked(dc);

Passed RTCDataChannel instance should be reliable and ordered mode.

API

BasedDataChannel

const basedDC = based(dc);

Do nothing, just wrap with EventEmitter.

This class has the same properties which RTCDataChannel instance has.

  • readyState
  • label
  • binaryType
  • etc...

See spec for the detail.

and also emits the same event types via EventEmitter.

  • open
  • close
  • error
  • message
  • bufferedamountlow

The send() method is equivalent to dc.send() and on("message") handler is equivalent to dc.onmessage.

// recv
basedDC.on("message", data => {});

// send
basedDC.send(data);

PromisedDataChannel

const promisedDC = promised(dc);

Make it possible to await dc.send(json).

This class extends BasedDataChannel.

And this class has special send() method and on("message") handler.

// recv
promisedDC.on("message", (data, resolve, reject) => {
  try {
    console.log(data.msg); // "Take this!"
    resolve({ res: "Thank you!" });
  } catch (err) {
    reject(err);
  }
});

// send
const data = await promisedDC.send({ msg: "Take this!" });
console.log(data.res); // "Thank you!"

If recv side does not resolve() neither nor reject(), it is treated as reject() with timeout.

ChunkedDataChannel

const chunkedDC = chunked(dc);

Make it possible to send a large file.

This class extends BasedDataChannel.

And this class has special send() method and on("message") handler.

// recv
chunkedDC.on("message", (blob, meta) => {
  // download it
  const $downloadLink = document.createElement("a");
  $downloadLink.href = URL.createObjectURL(blob);
  $downloadLink.download = meta.name;
  $downloadLink.textContent = meta.name;
  document.body.append($downloadLink);
});

// send
await chunkedDC.send(file, { name: "prof.png" });

Keywords

FAQs

Last updated on 02 Mar 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc