Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
_,,...,_
.’¯ ’-_
.¯ -
/ \
-----., @ ;
=====| \ |
| } ; _
=====| / / ,~¯ ‘.
-----~’ , / \
~_ ,’~’ \
_,-‘ \
,’ \
,¯ _,..,_ ,~’, ,
‘ ¯ `¯¯ ;
‘ | , ;
‘ ; ._.- /
‘ \ ,`/
‘ ‘, - ‘.’
‘. ‘-.,,.-‘.~
¯~.,_ _,.-~’¯
`’’’’’’’’’¯¯¯
Flexible WebSocket middleware for Redux applications. Maps inbound WebSocket events to Redux actions. Exposes action creators for dispatching actions that should be emitted as socket messages. Works with Socket.IO, as well as native WebSocket implementations!
npm install dux-socket
In your project, define a mapDispatchToSocket
function, which will receive store.dispatch
as its argument, and return an object which maps socket events to arbitrary Redux actions:
const mapDispatchToSocket = (dispatch) => ({
'eventName': (eventData) => dispatch({type: 'SOME_ACTION', data: eventData}),
// using action creators
'otherEvent': (eventData) => dispatch(someAction(eventData)),
});
This works exactly like the mapDispatchToProps
function you are used to from React-Redux's connect
API. The functions defined in this map will be invoked with the socket event payload as the argument.
When creating your store & applying middleware, add socketMiddleware
in the usual way, supplying the mapDispatchToSocket
function defined above, & an initialized Socket
object:
import {createStore, applyMiddleware} from 'redux';
import io from 'socket.io-client'
import {socketMiddleware} from 'dux-socket';
const socket = io('http://socket-url');
const store = createStore(
appReducer,
applyMiddleware(
/* ... other middlewares here ... */
socketMiddleware(mapDispatchToSocket, socket)
)
);
Simply dispatch
using the emit(eventName, data)
action creator supplied by dux-socket
in order to emit a socket event:
import {emit} from 'dux-socket';
dispatch(emit('someAction', {foo: bar}))
Since native WebSocket implementations don't have a concept of named events, your mapDispatchToSocket
function, and the way you send data work a bit differently. Simply supply functions for the native WebSocket event handlers onopen
, onmessage
, and onerror
where relevant to your application, and map them to Redux actions however you see fit:
import {socketMiddleware} from 'dux-socket';
import {createStore, applyMiddleware} from 'redux';
let socket = new WebSocket('ws://localhost:4242');
const mapDispatchToSocket = (dispatch) => ({
'onmessage': (event) => dispatch({ type: 'CHAT_MESSAGE', message: event.data }),
'onerror': (event) => dispatch({ type: 'ERROR', msg: 'Connection error!' })
});
const store = createStore(
appReducer,
applyMiddleware(socketMiddleware(mapDispatchToSocket, socket))
);
Use the send(data)
action creator to send data over a native WebSocket connection.
import {send} from 'dux-socket';
dispatch(send('some data!'))
You may want to include some asynchronously-resolved data (ie. route parameters) in your initial connection with the WebSocket server. To do this, simply don't supply a WebSocket object when applying the socketMiddleware
:
const store = createStore(
appReducer,
applyMiddleware(socketMiddleware(mapDispatchToSocket))
);
And dispatch an initSocket
event when you are ready to initialize the socket! Supply this action creator with either a Socket.IO object or a native WebSocket object.
import io from 'socket.io-client'
import {initSocket} from 'dux-socket';
import store from '../store';
class SomeComponent extends Component {
componentDidMount() {
let socket = io('http://socket-url', { foo: 'bar' });
store.dispatch(initSocket(socket));
}
}
Flexibility! The main goals for a flexible Redux/WebSocket middleware are:
Other middleware libraries emit a single Redux action for all Socket events. This leads to tightly coupled reducers & nested branching over the event types within your reducer cases. dux-socket solves this problem by invoking client-defined actions according to the map provided:
We welcome Your interest in the American Express Open Source Community on Github. Any Contributor to any Open Source Project managed by the American Express Open Source Community must accept and sign an Agreement indicating agreement to the terms below. Except for the rights granted in this Agreement to American Express and to recipients of software distributed by American Express, You reserve all right, title, and interest, if any, in and to Your Contributions. Please fill out the Agreement.
Any contributions made under this project will be governed by the Apache License 2.0.
This project adheres to the American Express Community Guidelines. By participating, you are expected to honor these guidelines.
FAQs
Flexible Socket.IO middleware for Redux applications
The npm package dux-socket receives a total of 0 weekly downloads. As such, dux-socket popularity was classified as not popular.
We found that dux-socket demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
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.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.