@factset/sdk-utils
Version:
Utilities for interacting with FactSet APIs.
70 lines (69 loc) • 3.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Configuration = void 0;
const joi_1 = __importDefault(require("joi"));
const errors_1 = require("./errors");
const constants_1 = require("./constants");
const fs_1 = require("fs");
const debug_1 = __importDefault(require("debug"));
const debug = (0, debug_1.default)(`${constants_1.PACKAGE_NAME}:configuration`);
const schema = joi_1.default.object({
name: joi_1.default.string().required(),
clientId: joi_1.default.string().required(),
clientAuthType: joi_1.default.string().required(),
owners: joi_1.default.array().items(joi_1.default.string()).min(1).required(),
wellKnownUri: joi_1.default.string().uri().default(constants_1.FACTSET_WELL_KNOWN_URI),
jwk: joi_1.default
.object({
kty: joi_1.default.string().required(),
use: joi_1.default.string().required(),
alg: joi_1.default.string().required(),
kid: joi_1.default.string().required(),
d: joi_1.default.string().required(),
n: joi_1.default.string().required(),
e: joi_1.default.string().required(),
p: joi_1.default.string().required(),
q: joi_1.default.string().required(),
dp: joi_1.default.string().required(),
dq: joi_1.default.string().required(),
qi: joi_1.default.string().required(),
})
.required(),
});
class Configuration {
static validateConfig(config) {
debug('Validating the config');
const result = schema.validate(config, { abortEarly: false, errors: {} });
if (result.error !== undefined) {
throw new errors_1.ConfigurationError(`Configuration is not valid: ${result.error.message}`);
}
debug('Config is vaild');
return result.value;
}
static loadConfig(param) {
debug('Trying to load the config');
if (typeof param === 'object') {
debug('Config is an object');
return Configuration.validateConfig(param);
}
else if (typeof param === 'string') {
try {
debug('Config is a string, trying to load from a file: %s', param);
const configString = (0, fs_1.readFileSync)(param, 'utf8');
const parsedConfig = JSON.parse(configString);
return Configuration.validateConfig(parsedConfig);
}
catch (error) {
if (error instanceof errors_1.ConfigurationError) {
throw error;
}
throw new errors_1.ConfigurationError(`Could not load config: ${param} (${error})`, error);
}
}
throw new errors_1.ConfigurationError('Invalid parameter type, needs to be a path (string) or configuration (ConfidentialClientConfiguration)"');
}
}
exports.Configuration = Configuration;