fix(WebSocketShard): close errors not being catchable (#9704)

* fix(WebSocketShard): close errors not being catchable

* fix(WebSocketShard): requested changes
This commit is contained in:
David Malchin
2023-07-15 13:55:05 +03:00
committed by GitHub
parent 8d97017458
commit 8c782bfd52

View File

@@ -143,6 +143,8 @@ export class WebSocketShard extends AsyncEventEmitter<WebSocketShardEventsMap> {
try { try {
await promise; await promise;
} catch ({ error }: any) {
throw error;
} finally { } finally {
// cleanup hanging listeners // cleanup hanging listeners
controller.abort(); controller.abort();
@@ -710,7 +712,10 @@ export class WebSocketShard extends AsyncEventEmitter<WebSocketShardEventsMap> {
} }
case GatewayCloseCodes.AuthenticationFailed: { case GatewayCloseCodes.AuthenticationFailed: {
throw new Error('Authentication failed'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Authentication failed'),
});
return this.destroy({ code });
} }
case GatewayCloseCodes.AlreadyAuthenticated: { case GatewayCloseCodes.AlreadyAuthenticated: {
@@ -734,23 +739,38 @@ export class WebSocketShard extends AsyncEventEmitter<WebSocketShardEventsMap> {
} }
case GatewayCloseCodes.InvalidShard: { case GatewayCloseCodes.InvalidShard: {
throw new Error('Invalid shard'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Invalid shard'),
});
return this.destroy({ code });
} }
case GatewayCloseCodes.ShardingRequired: { case GatewayCloseCodes.ShardingRequired: {
throw new Error('Sharding is required'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Sharding is required'),
});
return this.destroy({ code });
} }
case GatewayCloseCodes.InvalidAPIVersion: { case GatewayCloseCodes.InvalidAPIVersion: {
throw new Error('Used an invalid API version'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Used an invalid API version'),
});
return this.destroy({ code });
} }
case GatewayCloseCodes.InvalidIntents: { case GatewayCloseCodes.InvalidIntents: {
throw new Error('Used invalid intents'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Used invalid intents'),
});
return this.destroy({ code });
} }
case GatewayCloseCodes.DisallowedIntents: { case GatewayCloseCodes.DisallowedIntents: {
throw new Error('Used disallowed intents'); this.emit(WebSocketShardEvents.Error, {
error: new Error('Used disallowed intents'),
});
return this.destroy({ code });
} }
default: { default: {