# Orders Channel
```javascript=
import Constants from "../constants/index.js.erb";
import encodedData from "../utils/encodedData";
import logEvent from "../utils/events";
class OrdersChannel {
constructor(onOrderStatusChange) {
this.createConsumer();
this.onOrderStatusChange = onOrderStatusChange;
}
createConsumer = () => {
logEvent('websocket_create_consumer', {channel: 'OrdersChannel'});
this.socket = new WebSocket(`${Constants.foxy_api_action_cable.host}?auth_token=${encodedData.auth_token}`);
this.socket.onopen = this.subscribe;
this.socket.onclose = this.onClose;
this.socket.onmessage = this.onMessage;
this.socket.onerror = this.onError;
};
subscribe = () => {
logEvent('websocket_subscribe', {channel: 'OrdersChannel'});
if (!encodedData || !encodedData.auth_token) {
console.error('Skipping websocket connection, no auth token available');
return;
}
const message = {
command: 'subscribe',
identifier: JSON.stringify({
channel: 'OrdersChannel'
}),
};
this.socket.send(JSON.stringify(message))
};
onClose = () => {
logEvent('websocket_disconnected', {channel: 'OrdersChannel'});
window.setTimeout(() => {
logEvent('websocket_reconnect_attempt', {channel: 'OrdersChannel'});
this.createConsumer();
}, 5000);
};
onMessage = (message) => {
let data = JSON.parse(message.data);
// ignore everything but message types
if (!Object.keys(data).includes('message') || (['ping', 'welcome', 'confirm_subscription'].includes(data.type))) {
return
};
logEvent('websocket_message', {channel: 'OrdersChannel', message: JSON.stringify(data)});
this.onOrderStatusChange(data.message);
};
onError = (data) => {
console.error(data);
}
}
export default OrdersChannel;
```
```ruby=
```