UNPKG

@factset/sdk-utils

Version:

Utilities for interacting with FactSet APIs.

70 lines (69 loc) 3.02 kB
"use strict"; 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;