@source-health/js-bridge
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-alpha.0 • Public • Published

JS Bridge

This is a low-level library that facilitaties communication between web workers orwindows using a simple Promise-based API

Feaures

  • 🔁 Parent and child can both expose methods and/or events.
  • 🔎 Optional strong typing of method names, arguments, return values, and more.
  • 🔗 Support multiple concurrent connectionz.
  • 🌱 Zero dependencies - about 8KB before gzip.
  • 👐 Open source (MIT)

Usage

The first step of using the Bridge is to declare a channel that identifies the two parties. This library currently supports WindowChannel, which enables communication between two Windows.

Then, you can initialize the host:

import { Bridge, WindowChannel } from '@source-health/js-bridge'

const channel = new WindowChannel({
  localWindow: window,
  remoteWindow: frame.contentWindow,
  expectedOrigin: 'https://my.origin',
})

const host = Bridge.host(channel)

host.connect().then(() => {
  console.log('connected')
})

And initialize the guest:

import { Bridge, WindowChannel } from '@source-health/js-bridge'

const channel = new WindowChannel({
  localWindow: window,
  remoteWindow: window.parent,
  expectedOrigin: '*',
})

const guest = Bridge.guest(channel)

host.connect().then(() => {
  console.log('connected')
})

Once both are intialized, you can start communicating!

Events

Events are fire-and-forget notifications that can be broadcast from one side of the bridge, and observed from the other.

On the host:

bridge.on('someEvent', (data) => console.log(Data))

On the guest:

bridge.broadcast('someEvent', { key: 'value' })

Note that events can be broadcast from either side. Guests can receive events from the host, and host can receive events from the guest. There is no notification of an event being received. The protocol only emits the event.

Methods

Methods are bidirectional request/response call pairs. Calling methods can accept arguments and return values. All calls are asynchronous at the protocol layer.

On the host:

const bridge = Bridge.host(channel, {
  methods: {
    token: () => 'VerySecureValue'
  }
})

On the guest:

const guest = Bridge.guest(channel)
const token = await guest.call('token')

// VerySecureValue

Methods have a default timeout of 5s (5000ms), which can be configured when instantiating the Bridge.

Readme

Keywords

none

Package Sidebar

Install

npm i @source-health/js-bridge

Weekly Downloads

311

Version

1.0.0-alpha.0

License

MIT

Unpacked Size

237 kB

Total Files

32

Last publish

Collaborators

  • werkshy
  • stephentsen
  • zia-r
  • danielschwartz
  • colin.morelli