Uncaught TypeError: Illegal invocation
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- nextjs, react, typescript
Piste de recherche
Commencez par les appels à io() et le point d’entrée connectMessageSocket dans la reproduction du client Next.js fournie, puis isolez si le fait d’envelopper l’instance de Socket dans le proxy Valtio provoque l’erreur d’invocation. Reproduisez le flux de connexion authentifiée avec le token initialement indisponible et vérifiez que la connexion s’établit correctement une fois le token fourni.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
It produces Uncaught TypeError: Illegal invocation error when calling io()
context: I'm working in a react project where valtio is used for state manamement.
To Reproduce
Socket.IO server version: 4.8.1
Server
Using Nest.js for server. The server is working fine.
Socket.IO client version: 4.8.1
Client
// (next.js projec) the valtio store
'use client';
import {proxy, ref} from "valtio";
import {devtools, useProxy} from "valtio/utils";
import {IS_PRODUCTION_MODE, isServer} from "@/util/constants";
import {io, Socket} from "socket.io-client";
import {endpoints} from "@/util/urls";
type MsgModule<Actions = any> = {
socket: Socket;
connecting: boolean;
actions: Actions
}
type Data = {
message: MsgModule;
}
export const socketStore = proxy<Data>({
message: {
socket: io(endpoints.api.baseUrl + '/message', {
auth: {
token: ''
},
autoConnect: false
}),
connecting: false,
actions: ref({
abc: () => {}
}),
},
});
// socketStore.message.
export const useStoreSockMsg = () => useProxy(socketStore.message);
devtools(socketStore, {
name: 'socket',
enabled: !isServer && !IS_PRODUCTION_MODE,
});
export const socketActions = {
connectMessageSocket(accessToken: string) {
if (socketStore.message.socket.connected || socketStore.message.connecting) return;
console.log('proceed to socket connection with token', accessToken)
socketStore.message.socket = io(
endpoints.api.baseUrl + '/message',
{
auth: {
token: accessToken,
},
autoConnect: false,
}
);
// Listen for connection events
socketStore.message.socket.on('connect', () => {
console.log('socket is connected')
});
socketStore.message.socket.on('disconnect', () => {
console.log('socket is disconnected')
});
// Handle auth errors (e.g., expired token)
socketStore.message.socket.on('connect_error', async (err) => {
console.log('socket connection err: ', err.message)
// if (err.message === 'Unauthorized') {
// retry connection with updated token ...
// }
});
socketStore.message.socket.connect();
},
// Disconnect and cleanup
disconnectSocket: () => {
if (socketStore.message.socket) {
socketStore.message.socket.disconnect();
}
},
};
// the component
function MessageSocket() {
const userStore = useStoreUser();
const sockStore = useStoreSockMsg();
useEffect(() => {
if (sockStore.socket.connected || !userStore.at) return; // at is access token
socketActions.connectMessageSocket(userStore.at); // calling this producting the err: Uncaught TypeError: Illegal invocation
return () => socketActions.disconnectSocket();
}, [userStore.at, sockStore.socket.connected]);
useEffect(() => {
console.log('sock connected?', sockStore.socket.connected)
}, [sockStore.socket.connected]);
// ...
}
Expected behavior
Obviously expectation was to successfully connect, The official docs has a guide on how to use with react but that doesn't covers how to use with authentication when the token becomes available later.
Platform:
- Device: A Desktop PC
- OS: Ubuntu 24.04
- Langage dominant
- TypeScript
- Étoiles
- 63.2k
- Forks
- 10.2k
- Merge moyen
- 6 j 4 h
- PR mergées (30 j)
- 6
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de socketio/socket.io
-
[engine.io-client] The Node.js cookie jar lets Expires override Max-AgePeut-être pris @Ayush701-code-zm l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
socketio/socket.io#5590 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
Raise Engine.IO minimum to 6.6.10 for published security fixesPeut-être pris @harshit-exe-dev l’a pris il y a 29 jours. Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 2 jours
-
Can't set response headers in Server.handleUpgradePeut-être pris @MsfPablo l’a pris il y a 90 jours. Ouvertequestion
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
socketio/socket.io#5497 · 2 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
WebTransport ignores query parameters in URLPeut-être pris @cyphercodes l’a pris il y a 178 jours. Ouverteneeds major release question
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
socketio/socket.io#5496 · 3 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
[engine.io-client] close() called in an upgrade listener does not close the socketPeut-être pris @adityajai119 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 20/100
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de socketio/socket.io
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
outline/outline#14529 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 86/100
g1331/phantom-circuit#93 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
compiler
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
HerringtonDarkholme/hd-lang#1699 ·
Les mainteneurs répondent en général sous 1 jour