Working on GoDaddy Terminus
Luigi Zaccagnini
Posted on December 10, 2021
Hello! Welcome to another blog post. Today I will be discussing my progress on my Telescope issue and how I got to Terminus.
Trying to Solve the Problem
To start, I thought I could solve Telescopes Issue by fixing some code on Telescope or Satellite in order for the CORS errors to stop. I soon learned that the main problem wasn't fixable from our code bases and had to be fixed from Terminus.
Working on Terminus
Once I moved to Terminus's issue I began to start learning the code and ways I can solve the CORS issue. I discussed ways inside the issue thread about how I can solve the CORS issue and how I could add middleware. The proposed ideas were all hypothetical solutions so I didn't know if they could work until I started working in the code.
Problems Encountered
While trying to solve this problem I tried to add middleware with compose-middleware. While trying to implement it I had troubles with integrating the middleware with the server. Since the middleware wasn't working I attempted to allow users to write headers instead.
Coding in the Terminus Project
Once I got comfortable and understood the code of the project I wanted to create a mock project to help.
const http = require("http");
const express = require("express");
const terminus = require("../terminus/index.js");
const app = express();
app.get("/", (req, res) => {
res.send("ok");
});
const server = http.createServer(app);
function healthCheck({ state }) {
// `state.isShuttingDown` (boolean) shows whether the server is shutting down or not
return Promise
.resolve
// optionally include a resolve value to be included as
// info in the health check response
();
}
const options = {
healthChecks: {
"/healthcheck": healthCheck,
verbatim: true,
__unsafeExposeStackTraces: true,
},
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS, POST, GET",
},
};
terminus.createTerminus(server, options);
server.listen(3000);
This test project would help me test if I could pass headers to my local version of Terminus, and if I could fix any CORS related issues with the health check.
Within Terminus I wrote an extra parameter to allow users to send over their header options:
decorateWithSignalHandler(server, state, {
signals,
onSignal,
beforeShutdown,
onShutdown,
timeout,
logger
}, options.headers)
By passing the header parameter through the decorateWithSignalHandler
I am now able to give the sendSuccess
and sendFailure
functions the headers information needed so I could write my CORS headers.
Conclusion
So far everything is working and the next steps are to get the pull request accepted and to figure out a way to include middleware into the project.
Posted on December 10, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.