NodeJs websocket is not connecting throwing 401 error


  • 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;
        }
    
    }
    
    

  • @kavita-0

    let web_socket = new WebSocketV2({
    	jwttoken: 'JWT_TOKEN',
    	apikey: 'API_KEY',
    	clientcode: 'Client_code',
    	feedtype: 'FEED_TYPE',
    });
     // for mode, action and exchangeTypes , can use values from constants file.
    web_socket.connect().then((res) => {
    	let json_req = {
    		correlationID: 'correlation_id',
    		action: 1,
    		mode : 1,
    		exchangeType: 1,
    		tokens: ["123"],
    	};
    
    	web_socket.fetchData(json_req);
    	web_socket.on('tick', receiveTick);
    
    	function receiveTick(data) {
    		console.log('receiveTick:::::', data);
    	}
    });
    

    Try this official sample code mentioned in the README.md of https://github.com/angel-one/smartapi-javascript