UNPKG

box-node-sdk

Version:

Official SDK for Box Plaform APIs

213 lines 8.77 kB
"use strict"; /** * @fileoverview Configuration Object */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var assert = require("assert"); var https = __importStar(require("https")); var stream_1 = require("stream"); // ------------------------------------------------------------------------------ // Requirements // ------------------------------------------------------------------------------ var merge = require('merge-options'), sdkVersion = require('../../package.json').version; // ------------------------------------------------------------------------------ // Private // ------------------------------------------------------------------------------ var nodeVersion = process.version; var defaults = { clientID: null, clientSecret: null, apiRootURL: 'https://api.box.com', uploadAPIRootURL: 'https://upload.box.com/api', authorizeRootURL: 'https://account.box.com/api', apiVersion: '2.0', uploadRequestTimeoutMS: 60000, retryIntervalMS: 2000, numMaxRetries: 5, retryStrategy: null, expiredBufferMS: 180000, appAuth: undefined, iterators: false, enterpriseID: undefined, analyticsClient: null, disableStreamPassThrough: false, proxy: { url: null, username: null, password: null, }, request: { // By default, require API SSL cert to be valid strictSSL: true, // Use an agent with keep-alive enabled to avoid performing SSL handshake per connection agentClass: https.Agent, agentOptions: { keepAlive: true, }, // Encode requests as JSON. Encode the response as well if JSON is returned. json: true, // Do not encode the response as a string, since the response could be a file. return Buffers instead. encoding: null, // A redirect is usually information we want to handle, so don't automatically follow followRedirect: false, // By default, we attach a version-specific user-agent string to SDK requests headers: { 'User-Agent': "Box Node.js SDK v".concat(sdkVersion, " (Node ").concat(nodeVersion, ")"), }, }, }; var appAuthDefaults = { algorithm: 'RS256', expirationTime: 30, verifyTimestamp: false, }; /** * Validate the basic Config values needed for the SDK to function * @param {UserConfigurationOptions} params The user-supplied config values * @returns {void} * @throws {AssertionError} * @private */ function validateBasicParams(params) { // Assert that the given params valid, and that required values are present assert(typeof params.clientID === 'string', '"clientID" must be set via init() before using the SDK.'); assert(typeof params.clientSecret === 'string', '"clientSecret" must be set via init() before using the SDK.'); } /** * Validate app auth-specific Config values * @param {Object} appAuth The user-supplied app auth values * @returns {void} * @throws {AssertionError} * @private */ function validateAppAuthParams(appAuth) { assert(typeof appAuth.keyID === 'string', 'Key ID must be provided in app auth params'); assert(typeof appAuth.privateKey === 'string' || appAuth.privateKey instanceof Buffer, 'Private key must be provided in app auth params'); assert(typeof appAuth.passphrase === 'string' && appAuth.passphrase.length > 0, 'Passphrase must be provided in app auth params'); var validAlgorithms = ['RS256', 'RS384', 'RS512']; if (typeof appAuth.algorithm !== 'undefined') { assert(validAlgorithms.indexOf(appAuth.algorithm) > -1, "Algorithm in app auth params must be one of: ".concat(validAlgorithms.join(', '))); } if (typeof appAuth.expirationTime !== 'undefined') { assert(Number.isInteger(appAuth.expirationTime) && appAuth.expirationTime > 0 && appAuth.expirationTime <= 60, 'Valid token expiration time (0 - 60) must be provided in app auth params'); } } /** * Update the agentClass based on the proxy config values passed in by the user * @param {UserConfigurationOptions} params The current Config values * @returns {void} * @private */ function updateRequestAgent(params) { if (params.proxy.url) { var proxyUrl_1 = params.proxy.url; if (params.proxy.username && params.proxy.password) { proxyUrl_1 = proxyUrl_1.replace('://', "://".concat(params.proxy.username, ":").concat(params.proxy.password, "@")); } var ProxyAgent = require('proxy-agent').ProxyAgent; params.request.agentClass = ProxyAgent; params.request.agentOptions = Object.assign({}, params.request.agentOptions, { getProxyForUrl: function (url) { return proxyUrl_1; }, }); } } /** * Deep freeze an object and all nested objects within it. It doesn't go deep on * Buffers and Readable streams so can be used on objects containing requests. * @param {Object} obj The object to freeze * @returns {Object} The frozen object */ function deepFreezeWithRequest(obj) { Object.freeze(obj); Object.getOwnPropertyNames(obj).forEach(function (name) { var prop = obj[name]; if (prop !== null && typeof prop === 'object' && obj.hasOwnProperty(name) && !Object.isFrozen(prop) && !(prop instanceof Buffer) && !(prop instanceof stream_1.Readable)) { deepFreezeWithRequest(obj[name]); } }); return obj; } // ------------------------------------------------------------------------------ // Public // ------------------------------------------------------------------------------ /** * A Config Object holds the configuration options of the current setup. These are all * customizable by the user, and will default if no value is specified in the given params * object. The object is frozen on initialization, so that no values can be changed after * setup. * * @param {UserConfigurationOptions} params - The config options set by the user * @constructor */ var Config = /** @class */ (function () { function Config(params) { validateBasicParams(params); if (typeof params.appAuth === 'object') { validateAppAuthParams(params.appAuth); params.appAuth = merge({}, appAuthDefaults, params.appAuth); } // Ensure that we don't accidentally assign over Config methods assert(!params.hasOwnProperty('extend'), 'Config params may not override Config methods'); assert(!params.hasOwnProperty('_params'), 'Config params may not override Config methods'); // Set the given params or default value if params property is missing this._params = merge(defaults, params); updateRequestAgent(this._params); Object.assign(this, this._params); // Freeze the object so that configuration options cannot be modified deepFreezeWithRequest(this); } /** * Extend the current config into a new config with new params overriding old ones * @param {UserConfigurationOptions} params The override options * @returns {Config} The extended configuration */ Config.prototype.extend = function (params) { var newParams = merge({}, this._params, params); delete newParams.extend; delete newParams._params; return new Config(newParams); }; return Config; }()); module.exports = Config; //# sourceMappingURL=config.js.map