summaryrefslogtreecommitdiff
path: root/src/hero.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'src/hero.mjs')
-rw-r--r--src/hero.mjs76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/hero.mjs b/src/hero.mjs
index c249d4f..b623943 100644
--- a/src/hero.mjs
+++ b/src/hero.mjs
@@ -148,6 +148,7 @@ export const makeRequestListener = table => async (req, res) => {
export const loggerDefaults = {
pid: process.pid,
ppid: process.ppid,
+ tool: "hero",
};
export let loggerGlobals = {};
@@ -170,6 +171,7 @@ export const makeLogger = (writerFn = console.error) => ({
warn: u.partial(logit, writerFn, "WARN"),
error: u.partial(logit, writerFn, "ERROR"),
});
+
export const log = makeLogger();
export const interceptorsFn = ({
@@ -250,6 +252,80 @@ export const wrapHandler = (fn, arr) =>
fn :
chainInterceptors(arr.concat([ (req, _next) => fn(req) ]));
+export const actionsFn = ({
+ logger,
+} = {
+ logger: log,
+}) => ({
+ "toggle-debug-env": action => {
+ const before = process.env.DEBUG;
+ if (process.env.DEBUG) {
+ delete process.env.DEBUG;
+ } else {
+ process.env.DEBUG = "1";
+ }
+ const after = process.env.DEBUG;
+
+ logger.info({
+ type: "action-response",
+ action,
+ message: "toggle process.env.DEBUG",
+ before: u.undefinedAsNull(before),
+ after: u.undefinedAsNull(after),
+ });
+ },
+ "config-dump": action => logger.info({
+ type: "action-response",
+ action,
+ data: {
+ ...loggerDefaults,
+ ...loggerGlobals,
+ },
+ }),
+});
+
+export const actions = actionsFn();
+
+export const lineHandlerFn = ({
+ logger,
+ actionsMap,
+} = {
+ logger: log,
+ actionsMap: actions,
+}) => line => {
+ let cmd = null;
+ try {
+ cmd = JSON.parse(line);
+ } catch (e) {
+ logger.info({
+ type: "invalid-cmd-input",
+ message: e.message,
+ });
+ return;
+ }
+
+ if (typeof cmd?.action !== "string") {
+ logger.info({
+ type: "missing-key-action",
+ message: `missing the "action" key from the given object`,
+ });
+ return;
+ }
+
+ const fn = actionsMap[cmd.action];
+ if (!fn) {
+ logger.info({
+ type: "unsupported-action",
+ message: `can't run given action: ${cmd.action}`,
+ });
+ return;
+ }
+
+ return fn(cmd.action, ...(cmd?.args || []));
+};
+
+export const lineHandler = lineHandlerFn();
+
export const buildRoutes = (routes, globalInterceptors = []) =>
routes.reduce(
(acc, [methods, path, handlerFn, interceptors = []]) =>