import { IAuthPacket } from 'mqtt-packet' import { ErrorWithReasonCode, PacketHandler } from '../shared' import { ReasonCodes } from './ack' const handleAuth: PacketHandler = ( client, packet: IAuthPacket & { returnCode: number }, ) => { const { options } = client const version = options.protocolVersion const rc = version === 5 ? packet.reasonCode : packet.returnCode if (version !== 5) { const err = new ErrorWithReasonCode( `Protocol error: Auth packets are only supported in MQTT 5. Your version:${version}`, rc, ) client.emit('error', err) return } client.handleAuth( packet, (err: ErrorWithReasonCode, packet2: IAuthPacket) => { if (err) { client.emit('error', err) return } if (rc === 24) { client.reconnecting = false client['_sendPacket'](packet2) } else { const error = new ErrorWithReasonCode( `Connection refused: ${ReasonCodes[rc]}`, rc, ) client.emit('error', error) } }, ) } export default handleAuth