Hello Team,
I'm trying to connect websocket via node sdk I tried both the old and new ways defined in this file,
https://github.com/angel-one/smartapi-javascript
Error message Im getting,
D:\user\node\jupiter-trader\node_modules\smartapi-javascript\lib\websocket2.0.js:89
throw new Error(evt.message);
^
Error: Unexpected server response: 401
at ws.onerror (D:\user\node\jupiter-trader\node_modules\smartapi-javascript\lib\websocket2.0.js:89:15)
at callListener (D:\user\node\jupiter-trader\node_modules\ws\lib\event-target.js:290:14)
at WebSocket.onError (D:\user\node\jupiter-trader\node_modules\ws\lib\event-target.js:230:9)
at WebSocket.emit (node:events:518:28)
at emitErrorAndClose (D:\user\node\jupiter-trader\node_modules\ws\lib\websocket.js:1046:13)
at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
Below is the sample code I'm trying to do,
async function connectWebSocket() {
try {
const web_socket = new WebSocketV2({
jwttoken: smart_api.access_token, // response from loginAPI
apikey: smart_api.api_key, // response from loginAPI
clientcode: 'K518180', // my client codo
feedtype: 'market_feed',
});
console.log('🔄 Connecting with WebSocketV2...');
// Set up event handlers BEFORE connecting
web_socket.on('open', () => {
console.log('✅ WebSocketV2 connected successfully');
});
web_socket.on('tick', (data) => {
console.log('📈 Market data received:', data);
// Process market data for your trading logic
// data will contain ltp, volume, etc.
});
web_socket.on('error', (err) => {
console.error('❌ WebSocketV2 error:', err.message);
if (err.message.includes('401')) {
console.error('⚠️ Authentication failed! JWT token may be invalid or expired.');
console.error('Get a fresh JWT token from generateSession()');
}
});
web_socket.on('close', () => {
console.log('🔌 WebSocketV2 connection closed');
// Attempt reconnect after delay
setTimeout(() => {
console.log('Attempting to reconnect...');
connectWebSocket();
}, 5000);
});
// Connect
console.log('🔄 Establishing WebSocketV2 connection...');
await web_socket.connect();
console.log('✅ WebSocketV2 connection established');
// Use the format from documentation
const json_req = {
correlationID: 'order_monitor_' + Date.now(),
action: 1, // 1 = subscribe, 0 = unsubscribe
mode: 1,
exchangeType: 1,
tokens: ["market_feed"], // For order feed
};
web_socket.fetchData(json_req);
web_socket.on('tick', (data) => {
console.log('📦 Order update:', data);
});
web_socket.on('error', (err) => {
console.error('WebSocketV2 error:', err);
});
return web_socket;
} catch (error) {
console.error('WebSocketV2 connection failed:', error);
return;
}
}