+function authenticateRunnerSocket (socket: Socket, next: (err?: any) => void) {
+ const runnerToken = socket.handshake.auth['runnerToken']
+
+ logger.debug('Checking runner token in socket.')
+
+ if (!runnerToken) return next(new Error('No runner token provided'))
+ if (typeof runnerToken !== 'string') return next(new Error('Runner token is invalid'))
+
+ RunnerModel.loadByToken(runnerToken)
+ .then(runner => {
+ if (!runner) return next(new Error('Invalid runner token.'))
+
+ socket.handshake.auth.runner = runner
+
+ return next()
+ })
+ .catch(err => logger.error('Cannot get runner token.', { err }))
+}
+
+// ---------------------------------------------------------------------------
+