Source: RouterRunner/runner/controller.js

// @ts-check
/**
 * @import {ExpressRequestAuthorized, ExpressResponse} from '../../types.js'
 */

import { sendOk, sendErrorFrom } from '../../utils/apiEnvelope.js';
import * as service from './service.js';
import * as registration from '../registration/service.js';

/**
 * GET /api/runners
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const listRunners = async (req, res) => {
    try {
        sendOk(res, await service.listRunners(req));
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * GET /api/runners/:UID
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const getRunner = async (req, res) => {
    try {
        const result = await service.getRunner(req, req.params.UID);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * POST /api/runners/:UID/revoke
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const revokeRunner = async (req, res) => {
    try {
        const result = await service.revokeRunner(req, req.params.UID);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * POST /api/runners/:UID/drain
 */
export const drainRunner = async (req, res) => {
    try {
        const result = await service.drainRunner(req, req.params.UID);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * DELETE /api/runners/:UID
 * Hard-delete a runner (cleanup; `revoke` is the soft path).
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const deleteRunner = async (req, res) => {
    try {
        const result = await service.deleteRunner(req, req.params.UID);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * GET /api/runners/registrations
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const createRegistration = async (req, res) => {
    try {
        const result = await registration.createRegistration(req);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};

/**
 * POST /api/runners/registrations/:code/approve
 * @param {ExpressRequestAuthorized} req
 * @param {ExpressResponse} res
 */
export const approveRegistration = async (req, res) => {
    try {
        const result = await registration.approveRegistration(req, req.params.code);
        sendOk(res, result.result);
    } catch (e) {
        sendErrorFrom(res, e);
    }
};