ivr-tester-cli
Version:
CLI for automated testing of IVR call flows
73 lines (72 loc) • 2.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadConfigOption = void 0;
const validateJsonConfig_1 = require("./json/validateJsonConfig");
const MODULE_PREFIX = "ivr-tester-transcriber-";
function validateTwilioClientAuth(env) {
const accountSid = env.TWILIO_ACCOUNT_SID;
const authToken = env.TWILIO_AUTH_TOKEN;
let error;
if (!accountSid && authToken) {
error = new Error("TWILIO_ACCOUNT_SID environment variable must be set");
}
if (accountSid && !authToken) {
error = new Error("TWILIO_AUTH_TOKEN environment variable must be set");
}
if (!accountSid && !authToken) {
error = new Error("TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN environment variables must be set");
}
return {
error,
value: error
? undefined
: {
accountSid,
authToken,
},
};
}
function loadConfigOption(options, jsonFileReader, moduleRequire) {
function loadTranscriber(transcriber) {
const transcriberModuleName = `${MODULE_PREFIX}${transcriber.name}`;
let factory;
try {
factory = moduleRequire(transcriberModuleName);
}
catch (error) {
if (error.code === "MODULE_NOT_FOUND") {
throw new Error(`Cannot find module '${error.moduleName}' for the transcriber '${transcriber.name}'`);
}
throw error;
}
if (typeof factory.default !== "function") {
throw new Error(`Transcriber loaded does not have a default export '${transcriberModuleName}'. Contact the author of this package`);
}
return factory.default(transcriber.options);
}
function convert(configuration) {
const configResult = validateJsonConfig_1.validateConfig(configuration);
if (configResult.error) {
throw new Error(configResult.error.message);
}
const authResult = validateTwilioClientAuth(process.env);
if (authResult.error) {
throw new Error(authResult.error.message);
}
return {
transcriber: loadTranscriber(configResult.config.transcriber),
localServerPort: configResult.config.localServerPort,
recording: configResult.config.recording,
twilioAuth: authResult.value,
};
}
const configPath = options.configPath;
const jsonContent = jsonFileReader(configPath);
try {
return convert(jsonContent);
}
catch (error) {
throw new Error(`Invalid config '${configPath}. Reason: ${error.message}`);
}
}
exports.loadConfigOption = loadConfigOption;