zcatalyst-cli
Version:
Command Line Tool for CATALYST
102 lines (88 loc) • 2.67 kB
JavaScript
;
import { inspect } from 'util';
import { join } from 'path';
import { writeFileSync } from 'fs';
import { pathToFileURL } from 'url';
const args = process.argv.slice(2);
const target = JSON.parse(args[0]);
const data = JSON.parse(args[1]);
const projectJson = JSON.parse(args[2]);
const authJson = JSON.parse(args[3]);
const buildDir = JSON.parse(args[4]);
const responseFile = join(buildDir, '.catalyst', 'user_res_body');
const writeAndExit = (resp) => {
writeFileSync(responseFile, JSON.stringify(resp));
process.exit(0);
};
/**
* execution timeout of 15 minutes
*/
const timeout = 15 * 60 * 1000;
// const endTime = timeout + Date.now();
// exit on timeout
process.env.DEBUG === 'false' &&
setTimeout(() => {
writeToFile('TIMEOUT', 408);
process.exit(0);
}, timeout);
const integrationRequest = data || {};
integrationRequest.catalystHeaders = Object.assign(projectJson, authJson);
integrationRequest.timestamp = Date.now();
const integrationResponse = {
end: (response) => {
if (response === undefined) {
return writeAndExit({ Status: 204 });
}
if (
response.constructor.name !== 'IntegResponse' ||
response.buildResponse === undefined ||
typeof response.buildResponse !== 'function'
) {
// eslint-disable-next-line no-console
console.error('Invalid response object: ', response);
return writeAndExit({ Status: 500 });
}
const clean_response = response.buildResponse();
if (
clean_response === undefined ||
clean_response.status === undefined ||
typeof clean_response.status !== 'number' ||
clean_response.contentType === undefined ||
typeof clean_response.contentType !== 'string' ||
clean_response.responseBody === undefined
) {
// eslint-disable-next-line no-console
console.error(
"Invalid value returned from function 'buildResponse()': ",
clean_response
);
return writeAndExit({ Status: 500 });
}
return writeAndExit({
Status: clean_response.status,
ContentType: clean_response.contentType,
responseBody: clean_response.responseBody
});
}
};
import(pathToFileURL(target.index))
.then((module) => {
try {
if (!('default' in module)) {
throw new Error('Could not find any default export');
}
if (typeof module.default !== 'function') {
throw new Error('The default export is not a function');
}
module.default(integrationRequest, integrationResponse);
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);
writeAndExit({ error: inspect(e) }, 0);
}
})
.catch((e) => {
// eslint-disable-next-line no-console
console.error(e);
writeAndExit({ error: inspect(e) });
});