UNPKG

mozu-node-sdk

Version:

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

81 lines (72 loc) 2.45 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; var NodeDefaultPlugins = { authenticationStorage: inMemoryAuthCache, prerequisiteTasks: serverSidePrerequisites, urlResolver: expandUriTemplateFromContext }; function applyDefaultPlugins(client, plugins) { Object.keys(plugins).forEach(function (n) { return 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 sub(methods) { return makeClient(_sub(Client, methods)); }, constants: constants }); module.exports = Client;