1.4.0 • Published 7 years ago

socketsync v1.4.0

Weekly downloads
5
License
MIT
Repository
github
Last release
7 years ago

NPM

socketsync

a lightweight module to sync JS objects in realtime across tabs / windows of a browser WEB SOCKETS VERSION.

Features

  • Uses local storage event emitters to sync objects in realtime across tabs.
  • Never calls the tab that the event occurred on.
  • Falls back to cookie polling internally if using an unsupported browser (IE 9+ / Edge).
  • Isomorphic.
  • Tested with mocha.

Build Status codecov

NPM

Install

npm i -S socketsync

How to use

import socketsync from 'socketsync'

/** Create an action that will trigger a sync to other tabs. */
const action = (userID, first, last) => ({ userID, first, last })

/** Create a handler that will run on all tabs that did not trigger the sync. */
const handler = (value, old, url) => {
  console.info(`Another tab at url ${url} switched user from "${old.first} ${old.last}" to "${value.first} ${value.last}".`)
  // do something with value.userID
}

/** Create a synchronizer. socketsync supports N number of synchronizers for different things across your app. */
const usersync = socketsync('user', action, handler)

/** Start synchronizing. */
usersync.start()

/** IE / Edge do not support local storage across multiple tabs. socketsync will automatically fallback to a cookie polling mechanism here. You don't need to do anything else. */
if(usersync.isFallback)
  console.warn('browser doesnt support local storage synchronization, falling back to cookie synchronization.')

/** Trigger an action that will get handled on other tabs. */
usersync.trigger(1, 'jimmy', 'john')

setTimeout(() => {
  /** Trigger another action in 5 seconds. */
  usersync.trigger(2, 'jane', 'wonka')
}, 5000)

setTimeout(() => {
  /** If its still running, stop syncing in 10 seconds. */
  if(usersync.isRunning)
    usersync.stop()
}, 10000)

Documentation

socketsync(key: string, action: (...args) => payload, handler: payload => {}, [opts: Object]): { start, stop, trigger, isRunning, isFallback }

opts

nametypedefaultdescription
tracingbooleanfalsetoggles tracing for debugging purposes
loggerObjectconsolethe logger object to trace to
loglevelstring'info'the log level to use when tracing (error, warn, info, trace)

IE / Edge fallback props for cookiesync

nametypedefaultdescription
pollFrequencynumber3000the number in milliseconds that should be used for cookie polling
idLengthnumber8the number of characters to use for tracking the current instance (tab)
pathstring'/'The path to use for cookies
securebooleanfalseWhether to set the secure flag on cookies or not (not recommended)
httpOnlybooleanfalseWhether to set the http only flag on cookies or not
1.4.0

7 years ago

1.3.1

7 years ago

1.3.0

7 years ago

1.2.0

7 years ago

1.1.8

8 years ago

1.1.0

8 years ago