Files
api/app/core/modules/get-services.ts
Alexis Tyler 4e1b0bd72c chore: lint
2021-01-28 15:45:14 +10:30

73 lines
1.5 KiB
TypeScript

/*!
* Copyright 2019-2020 Lime Technology Inc. All rights reserved.
* Written by: Alexis Tyler
*/
import { getEmhttpdService, getUnraidApiService } from './services';
import { coreLogger } from '../log';
import { envs } from '../envs';
import { NodeService } from '../utils';
import { CoreResult, CoreContext } from '../types';
const devNames = [
'emhttpd',
'rest-api'
];
const coreNames = [
'unraid-api'
];
interface ServiceResult extends CoreResult {
json: NodeService;
}
interface NodeServiceWithName extends NodeService {
name: string;
}
/**
* Add name to services.
*
* @param services
* @param names
*/
const addNameToService = (services: ServiceResult[], names: string[]): NodeServiceWithName[] => {
return services.map((service, index) => ({
name: names[index],
...service.json
}));
};
interface Result extends CoreResult {
json: NodeServiceWithName[];
}
/**
* Get all services.
*/
export const getServices = async (context: CoreContext): Promise<Result> => {
const logErrorAndReturnEmptyArray = (error: Error) => {
coreLogger.error(error);
return [];
};
const devServices = envs.NODE_ENV === 'development' ? await Promise.all([
getEmhttpdService(context)
]).catch(logErrorAndReturnEmptyArray) : [];
const coreServices = await Promise.all([
getUnraidApiService(context)
]).catch(logErrorAndReturnEmptyArray);
const result = [
...addNameToService(devServices, devNames),
...addNameToService(coreServices, coreNames)
];
return {
text: `Services: ${JSON.stringify(result, null, 2)}`,
json: result
};
};