Skip to content

Commit b146a36

Browse files
fix: Always delete socket when close is emitted
1 parent 5450fd9 commit b146a36

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

packages/snaps-controllers/src/websocket/WebSocketService.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ class MockWebSocket {
3232
} else if (type === 'close') {
3333
this.#closeListener = listener;
3434
} else if (type === 'error' && this.#origin === MOCK_WEBSOCKET_BROKEN_URI) {
35-
listener(new Event('error'));
36-
this.#closeWithCode(1006, '', false);
35+
setTimeout(() => {
36+
listener(new Event('error'));
37+
this.#closeWithCode(1006, '', false);
38+
}, 1);
3739
} else if (type === 'message') {
3840
this.#messageListener = listener;
3941
}
@@ -259,6 +261,10 @@ describe('WebSocketService', () => {
259261
MOCK_WEBSOCKET_BROKEN_URI,
260262
),
261263
).rejects.toThrow('An error occurred while opening the WebSocket.');
264+
265+
expect(
266+
messenger.call('WebSocketService:getAll', MOCK_SNAP_ID),
267+
).toHaveLength(0);
262268
});
263269

264270
it('logs if the Snap request fails', async () => {

packages/snaps-controllers/src/websocket/WebSocketService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ export class WebSocketService {
219219
});
220220

221221
socket.addEventListener('close', (event) => {
222+
this.#sockets.delete(id);
223+
222224
this.#handleEvent(snapId, {
223225
type: 'close',
224226
id,
@@ -284,8 +286,6 @@ export class WebSocketService {
284286
const { socket } = this.#get(snapId, id);
285287

286288
socket.close();
287-
288-
this.#sockets.delete(id);
289289
}
290290

291291
/**

0 commit comments

Comments
 (0)