UNPKG

mozu-node-sdk

Version:

Mozu JavaScript SDK for Node.js and Arc.js environments

88 lines (79 loc) 2.46 kB
'use strict'; var extend = require('./utils/tiny-extend'), sub = require('./utils/sub'), constants = require('./constants'), makeMethod = require('./utils/make-method'), getConfig = require('./utils/get-config'), normalizeContext = require('./utils/normalize-context'), inMemoryAuthCache = require('./plugins/in-memory-auth-cache'), serverSidePrerequisites = require('./plugins/server-side-prerequisites'), expandUriTemplateFromContext = require( './plugins/expand-uritemplate-from-context' ), versionKey = constants.headers.VERSION, version = constants.version; const NodeDefaultPlugins = { authenticationStorage: inMemoryAuthCache, prerequisiteTasks: serverSidePrerequisites, urlResolver: expandUriTemplateFromContext }; function applyDefaultPlugins(client, plugins) { Object.keys(plugins).forEach(n => client[n] = plugins[n](client)); } function makeClient(clientCls) { return function(cfg) { return new clientCls(extend({}, this, cfg)); }; } function cloneContext(ctx) { var newCtx; if (!ctx) return {}; try { newCtx = JSON.parse(JSON.stringify(ctx)); } catch(e) { throw new Error( 'Could not serialize context when creating Client. ' + 'Do not assign non-serializable objects to the client.context.' ); } newCtx[versionKey] = newCtx[versionKey] || version; return newCtx; } function isContextSufficient(context) { return context && context.baseUrl; } function Client(cfg) { cfg = cfg || {}; var context = normalizeContext(cfg.apiContext || cfg.context || {}); if (!isContextSufficient(context)) { context = context ? extend(getConfig(), context) : getConfig(); } this.context = cloneContext(context); this.defaultRequestOptions = extend( {}, Client.defaultRequestOptions, cfg.defaultRequestOptions ); // apply the right default plugin config for a server-side environment // (that is, Node, ArcJS, or perhaps Rhino/Nashorn/WinJS) if (typeof process !== "undefined") { applyDefaultPlugins(this, NodeDefaultPlugins); } if (cfg.plugins) { // override plugins if necessary this.plugins = cfg.plugins.slice(); this.plugins.forEach(function(p) { p(this); }.bind(this)); } } // statics extend(Client, { defaultRequestOptions: {}, method: makeMethod, sub: function(methods) { return makeClient(sub(Client, methods)); }, constants: constants }); module.exports = Client;