Files
bodyshop/server/utils/instanceMgr.js

122 lines
3.7 KiB
JavaScript

/**
* Returns the corresponding component/function/object based on the type of instance.
* Based on the node env params, return the correct prop.
* Default is to return the ImEX Prop
* @typedef {Object} InstanceManagerObject
* @property { string | object | function } rome Return this prop if Rome.
* @property { string | object | function } promanager Return this prop if Rome.
* @property { string | object | function } imex Return this prop if Rome.
*/
const { isString, isEmpty } = require("lodash");
/**
* InstanceManager is a utility function that determines which property to return based on the current instance type.
* @param param0
* @param param0.args
* @param param0.instance
* @param param0.debug
* @param param0.executeFunction
* @param param0.rome
* @param param0.promanager
* @param param0.imex
* @returns {*|null}
* @constructor
*/
const InstanceManager = ({ args, instance, debug, executeFunction, rome, promanager, imex }) => {
let propToReturn = null;
switch (instance || process.env.INSTANCE) {
case "IMEX":
propToReturn = imex;
break;
case "ROME":
if (rome === "USE_IMEX") {
propToReturn = imex;
} else {
propToReturn = rome;
}
break;
case "PROMANAGER":
//Return the rome prop if USE_ROME.
//If not USE_ROME, we want to default back to the rome prop if it's undefined.
//If null, we might want to show nothing, so make sure we return null.
propToReturn = promanager === "USE_ROME" ? rome : promanager !== undefined ? promanager : rome;
break;
default:
propToReturn = imex;
break;
}
if (debug) {
console.log("InstanceRenderManager Debugger");
console.log("=========================");
console.log({ executeFunction, rome, promanager, imex, debug, propToReturn });
console.log("=========================");
}
//Checking to see if we need to default to another one.
if (propToReturn === "imex") {
propToReturn = imex;
}
if (executeFunction && typeof propToReturn === "function") return propToReturn(...args);
return propToReturn === undefined ? null : propToReturn;
};
/**
* Returns the AWS region to be used for the current instance, which is determined by the INSTANCE environment variable.
* @returns {*}
* @constructor
*/
const InstanceRegion = () =>
InstanceManager({
imex: "ca-central-1",
rome: "us-east-2"
});
/**
* Checks if the instance is configured to use LocalStack by verifying the presence of the LOCALSTACK_HOSTNAME
* environment variable.
* @returns {boolean}
* @constructor
*/
const InstanceIsLocalStackEnabled = () =>
isString(process.env?.LOCALSTACK_HOSTNAME) && !isEmpty(process.env?.LOCALSTACK_HOSTNAME);
/**
* Returns the LocalStack endpoint URL based on the LOCALSTACK_HOSTNAME environment variable.
* @returns {`http://${*}:4566`}
* @constructor
*/
const InstanceLocalStackEndpoint = () => `http://${process.env.LOCALSTACK_HOSTNAME}:4566`;
/**
* Returns the appropriate endpoints for the current instance, which can be used for making API calls or other network
* requests.
* @returns {*|null}
* @constructor
*/
const InstanceEndpoints = () =>
InstanceManager({
imex:
process.env?.NODE_ENV === "development"
? "https://localhost:3000"
: process.env?.NODE_ENV === "test"
? "https://test.imex.online"
: "https://imex.online",
rome:
process.env?.NODE_ENV === "development"
? "https://localhost:3000"
: process.env?.NODE_ENV === "test"
? "https://test.romeonline.io"
: "https://romeonline.io"
});
module.exports = {
InstanceManager,
InstanceRegion,
InstanceIsLocalStackEnabled,
InstanceLocalStackEndpoint,
InstanceEndpoints,
default: InstanceManager
};