particle-api-js 9.1.2 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/Agent.js CHANGED
@@ -69,10 +69,15 @@ var Agent = function () {
69
69
  function Agent(baseUrl) {
70
70
  (0, _classCallCheck3.default)(this, Agent);
71
71
 
72
- this.prefix = (0, _superagentPrefix2.default)(baseUrl);
72
+ this.setBaseUrl(baseUrl);
73
73
  }
74
74
 
75
75
  (0, _createClass3.default)(Agent, [{
76
+ key: 'setBaseUrl',
77
+ value: function setBaseUrl(baseUrl) {
78
+ this.prefix = (0, _superagentPrefix2.default)(baseUrl);
79
+ }
80
+ }, {
76
81
  key: 'get',
77
82
  value: function get(_ref) {
78
83
  var uri = _ref.uri,
package/lib/Agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Agent.js"],"names":["Agent","baseUrl","prefix","uri","auth","headers","query","context","request","method","data","undefined","form","files","raw","requestFiles","_sanitizeFiles","_request","req","_buildRequest","_promiseResponse","fulfill","reject","_sendRequest","end","error","res","body","url","statusCode","status","errorDescription","shortErrorDescription","error_description","reason","Error","makerequest","use","_authorizationHeader","_applyContext","set","name","file","options","filepath","path","isForBrowser","attach","value","field","type","send","getXHR","tool","_addToolContext","project","_addProjectContext","_toolIdent","components","component","_nameAtVersion","version","_buildSemicolonSeparatedProperties","obj","primaryProperty","prop","hasOwnProperty","username","password","Authorization","forEach","k","i"],"mappings":"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","file":"Agent.js","sourcesContent":["/*\n ******************************************************************************\n Copyright (c) 2016 Particle Industries, Inc. All rights reserved.\n\n This program is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, either\n version 3 of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public\n License along with this program; if not, see <http://www.gnu.org/licenses/>.\n ******************************************************************************\n */\n\nimport request from 'superagent';\nimport prefix from 'superagent-prefix';\n\nexport default class Agent {\n\tconstructor(baseUrl){\n\t\tthis.prefix = prefix(baseUrl);\n\t}\n\n\tget({ uri, auth, headers, query, context }){\n\t\treturn this.request({ uri, method: 'get', auth, headers, query, context });\n\t}\n\n\thead({ uri, auth, headers, query, context }){\n\t\treturn this.request({ uri, method: 'head', auth, headers, query, context });\n\t}\n\n\tpost({ uri, headers, data, auth, context }){\n\t\treturn this.request({ uri, method: 'post', auth, headers, data, context });\n\t}\n\n\tput({ uri, auth, headers, data, context }){\n\t\treturn this.request({ uri, method: 'put', auth, headers, data, context });\n\t}\n\n\tdelete({ uri, auth, headers, data, context }){\n\t\treturn this.request({ uri, method: 'delete', auth, headers, data, context });\n\t}\n\n\n\t/**\n\t *\n\t * @param {String} uri The URI to request\n\t * @param {String} method The method used to request the URI, should be in uppercase.\n\t * @param {Object} headers Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.\n\t * @param {String} data Arbitrary data to send as the body.\n\t * @param {Object} auth Authorization\n\t * @param {String} query Query parameters\n\t * @param {Object} form Form fields\n\t * @param {Object} files array of file names and file content\n\t * @parma {Object} context the invocation context, describing the tool and project.\n\t * @return {Promise} A promise. fulfilled with {body, statusCode}, rejected with { statusCode, errorDescription, error, body }\n\t */\n\trequest({\n\t\turi,\n\t\tmethod,\n\t\theaders = undefined,\n\t\tdata = undefined,\n\t\tauth,\n\t\tquery = undefined,\n\t\tform = undefined,\n\t\tfiles = undefined,\n\t\tcontext = undefined,\n\t\traw = false\n\t}){\n\t\tconst requestFiles = this._sanitizeFiles(files);\n\t\treturn this._request({ uri, method, headers, data, auth, query, form, context, files: requestFiles, raw });\n\t}\n\n\t/**\n\t *\n\t * @param {String} uri The URI to request\n\t * @param {String} method The method used to request the URI, should be in uppercase.\n\t * @param {Object} headers Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.\n\t * @param {String} data Arbitrary data to send as the body.\n\t * @param {Object} auth Authorization\n\t * @param {String} query Query parameters\n\t * @param {Object} form Form fields\n\t * @param {Object} files array of file names and file content\n\t * @param {Object} context the invocation context\n\t * @return {Promise} A promise. fulfilled with {body, statusCode}, rejected with { statusCode, errorDescription, error, body }\n\t */\n\t_request({ uri, method, headers, data, auth, query, form, files, context, raw }){\n\t\tconst req = this._buildRequest({ uri, method, headers, data, auth, query, form, context, files });\n\n\t\tif (raw){\n\t\t\treturn req;\n\t\t}\n\t\treturn this._promiseResponse(req);\n\t}\n\n\t/**\n\t * Promises to send the request and retreive the response.\n\t * @param {Request} req The request to send\n\t * @returns {Promise} The promise to send the request and retrieve the response.\n\t * @private\n\t */\n\t_promiseResponse(req){\n\t\treturn new Promise((fulfill, reject) => this._sendRequest(req, fulfill, reject));\n\t}\n\n\t/**\n\t * Sends the given request, calling the fulfill or reject methods for success/failure.\n\t * @param {object} request The request to send\n\t * @param {function} fulfill Called on success with the response\n\t * @param {function} reject Called on failure with the failure reason.\n\t * @private\n\t * @returns {undefined} Nothing\n\t */\n\t_sendRequest(request, fulfill, reject){\n\t\trequest.end((error, res) => {\n\t\t\tconst body = res && res.body;\n\t\t\tif (error){\n\t\t\t\tconst uri = request.url;\n\t\t\t\tconst statusCode = error.status;\n\t\t\t\tlet errorDescription = `${statusCode ? 'HTTP error ' + statusCode : 'Network error'} from ${uri}`;\n\t\t\t\tlet shortErrorDescription;\n\t\t\t\tif (body && body.error_description){\n\t\t\t\t\terrorDescription += ' - ' + body.error_description;\n\t\t\t\t\tshortErrorDescription = body.error_description;\n\t\t\t\t}\n\t\t\t\tconst reason = new Error(errorDescription);\n\t\t\t\tObject.assign(reason, { statusCode, errorDescription, shortErrorDescription, error, body });\n\t\t\t\treject(reason);\n\t\t\t} else {\n\t\t\t\tfulfill({\n\t\t\t\t\tbody: body,\n\t\t\t\t\tstatusCode: res.statusCode\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_buildRequest({ uri, method, headers, data, auth, query, form, files, context, makerequest = request }){\n\t\tconst req = makerequest(method, uri);\n\t\tif (this.prefix){\n\t\t\treq.use(this.prefix);\n\t\t}\n\t\tthis._authorizationHeader(req, auth);\n\t\tif (context){\n\t\t\tthis._applyContext(req, context);\n\t\t}\n\t\tif (query){\n\t\t\treq.query(query);\n\t\t}\n\t\tif (headers){\n\t\t\treq.set(headers);\n\t\t}\n\t\tif (files){\n\t\t\tfor (let [name, file] of Object.entries(files)){\n\t\t\t\t// API for Form Data is different in Node and in browser\n\t\t\t\tlet options = {\n\t\t\t\t\tfilepath: file.path\n\t\t\t\t};\n\t\t\t\tif (this.isForBrowser(makerequest)){\n\t\t\t\t\toptions = file.path;\n\t\t\t\t}\n\t\t\t\treq.attach(name, file.data, options);\n\t\t\t}\n\t\t\tif (form){\n\t\t\t\tfor (let [name, value] of Object.entries(form)){\n\t\t\t\t\treq.field(name, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (form){\n\t\t\treq.type('form');\n\t\t\treq.send(form);\n\t\t} else if (data){\n\t\t\treq.send(data);\n\t\t}\n\t\treturn req;\n\t}\n\n\tisForBrowser(makerequest = request){\n\t\t// superagent only has the getXHR method in the browser version\n\t\treturn !!makerequest.getXHR;\n\t}\n\n\t_applyContext(req, context){\n\t\tif (context.tool){\n\t\t\tthis._addToolContext(req, context.tool);\n\t\t}\n\t\tif (context.project){\n\t\t\tthis._addProjectContext(req, context.project);\n\t\t}\n\t}\n\n\t_addToolContext(req, tool){\n\t\tlet value = '';\n\t\tif (tool.name){\n\t\t\tvalue += this._toolIdent(tool);\n\t\t\tif (tool.components){\n\t\t\t\tfor (let component of tool.components){\n\t\t\t\t\tvalue += ', '+this._toolIdent(component);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (value){\n\t\t\treq.set('X-Particle-Tool', value);\n\t\t}\n\t}\n\n\t_toolIdent(tool){\n\t\treturn this._nameAtVersion(tool.name, tool.version);\n\t}\n\n\t_nameAtVersion(name, version){\n\t\tlet value = '';\n\t\tif (name){\n\t\t\tvalue += name;\n\t\t\tif (version){\n\t\t\t\tvalue += '@'+version;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\t_addProjectContext(req, project){\n\t\tlet value = this._buildSemicolonSeparatedProperties(project, 'name');\n\t\tif (value){\n\t\t\treq.set('X-Particle-Project', value);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a string like primaryPropertyValue; name=value; name1=value\n\t * from the properties of an object.\n\t * @param {object} obj The object to create the string from\n\t * @param {string} primaryProperty The name of the primary property which is the default value and must be defined.\n\t * @private\n\t * @return {string} The formatted string representing the object properties and the default property.\n\t */\n\t_buildSemicolonSeparatedProperties(obj, primaryProperty){\n\t\tlet value = '';\n\t\tif (obj[primaryProperty]){\n\t\t\tvalue += obj[primaryProperty];\n\t\t\tfor (let prop in obj){\n\t\t\t\tif (prop!==primaryProperty && obj.hasOwnProperty(prop)){\n\t\t\t\t\tvalue += '; '+prop+'='+obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Adds an authorization header.\n\t * @param {Request} req The request to add the authorization header to.\n\t * @param {object|string} auth The authorization. Either a string authorization bearer token,\n\t * or a username/password object.\n\t * @returns {Request} req The original request.\n\t */\n\t_authorizationHeader(req, auth){\n\t\tif (auth){\n\t\t\tif (auth.username !== undefined){\n\t\t\t\treq.auth(auth.username, auth.password);\n\t\t\t} else {\n\t\t\t\treq.set({ Authorization: `Bearer ${auth}` });\n\t\t\t}\n\t\t}\n\t\treturn req;\n\t}\n\n\t/**\n\t *\n\t * @param {Array} files converts the file names to file, file1, file2.\n\t * @returns {object} the renamed files.\n\t */\n\t_sanitizeFiles(files){\n\t\tlet requestFiles;\n\t\tif (files){\n\t\t\trequestFiles = {};\n\t\t\tObject.keys(files).forEach((k, i) => {\n\t\t\t\tconst name = i ? `file${i + 1}` : 'file';\n\t\t\t\trequestFiles[name] = {\n\t\t\t\t\tdata: files[k],\n\t\t\t\t\tpath: k\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn requestFiles;\n\t}\n}\n\n"]}
1
+ {"version":3,"sources":["../src/Agent.js"],"names":["Agent","baseUrl","setBaseUrl","prefix","uri","auth","headers","query","context","request","method","data","undefined","form","files","raw","requestFiles","_sanitizeFiles","_request","req","_buildRequest","_promiseResponse","fulfill","reject","_sendRequest","end","error","res","body","url","statusCode","status","errorDescription","shortErrorDescription","error_description","reason","Error","makerequest","use","_authorizationHeader","_applyContext","set","name","file","options","filepath","path","isForBrowser","attach","value","field","type","send","getXHR","tool","_addToolContext","project","_addProjectContext","_toolIdent","components","component","_nameAtVersion","version","_buildSemicolonSeparatedProperties","obj","primaryProperty","prop","hasOwnProperty","username","password","Authorization","forEach","k","i"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA;;;;AACA;;;;;;AApBA;;;;;;;;;;;;;;;;;;;IAsBqBA,K;AACpB,gBAAYC,OAAZ,EAAoB;AAAA;;AACnB,OAAKC,UAAL,CAAgBD,OAAhB;AACA;;;;6BAEUA,O,EAAS;AACnB,QAAKE,MAAL,GAAc,gCAAOF,OAAP,CAAd;AACA;;;4BAE0C;AAAA,OAArCG,GAAqC,QAArCA,GAAqC;AAAA,OAAhCC,IAAgC,QAAhCA,IAAgC;AAAA,OAA1BC,OAA0B,QAA1BA,OAA0B;AAAA,OAAjBC,KAAiB,QAAjBA,KAAiB;AAAA,OAAVC,OAAU,QAAVA,OAAU;;AAC1C,UAAO,KAAKC,OAAL,CAAa,EAAEL,QAAF,EAAOM,QAAQ,KAAf,EAAsBL,UAAtB,EAA4BC,gBAA5B,EAAqCC,YAArC,EAA4CC,gBAA5C,EAAb,CAAP;AACA;;;8BAE2C;AAAA,OAArCJ,GAAqC,SAArCA,GAAqC;AAAA,OAAhCC,IAAgC,SAAhCA,IAAgC;AAAA,OAA1BC,OAA0B,SAA1BA,OAA0B;AAAA,OAAjBC,KAAiB,SAAjBA,KAAiB;AAAA,OAAVC,OAAU,SAAVA,OAAU;;AAC3C,UAAO,KAAKC,OAAL,CAAa,EAAEL,QAAF,EAAOM,QAAQ,MAAf,EAAuBL,UAAvB,EAA6BC,gBAA7B,EAAsCC,YAAtC,EAA6CC,gBAA7C,EAAb,CAAP;AACA;;;8BAE0C;AAAA,OAApCJ,GAAoC,SAApCA,GAAoC;AAAA,OAA/BE,OAA+B,SAA/BA,OAA+B;AAAA,OAAtBK,IAAsB,SAAtBA,IAAsB;AAAA,OAAhBN,IAAgB,SAAhBA,IAAgB;AAAA,OAAVG,OAAU,SAAVA,OAAU;;AAC1C,UAAO,KAAKC,OAAL,CAAa,EAAEL,QAAF,EAAOM,QAAQ,MAAf,EAAuBL,UAAvB,EAA6BC,gBAA7B,EAAsCK,UAAtC,EAA4CH,gBAA5C,EAAb,CAAP;AACA;;;6BAEyC;AAAA,OAApCJ,GAAoC,SAApCA,GAAoC;AAAA,OAA/BC,IAA+B,SAA/BA,IAA+B;AAAA,OAAzBC,OAAyB,SAAzBA,OAAyB;AAAA,OAAhBK,IAAgB,SAAhBA,IAAgB;AAAA,OAAVH,OAAU,SAAVA,OAAU;;AACzC,UAAO,KAAKC,OAAL,CAAa,EAAEL,QAAF,EAAOM,QAAQ,KAAf,EAAsBL,UAAtB,EAA4BC,gBAA5B,EAAqCK,UAArC,EAA2CH,gBAA3C,EAAb,CAAP;AACA;;;iCAE4C;AAAA,OAApCJ,GAAoC,SAApCA,GAAoC;AAAA,OAA/BC,IAA+B,SAA/BA,IAA+B;AAAA,OAAzBC,OAAyB,SAAzBA,OAAyB;AAAA,OAAhBK,IAAgB,SAAhBA,IAAgB;AAAA,OAAVH,OAAU,SAAVA,OAAU;;AAC5C,UAAO,KAAKC,OAAL,CAAa,EAAEL,QAAF,EAAOM,QAAQ,QAAf,EAAyBL,UAAzB,EAA+BC,gBAA/B,EAAwCK,UAAxC,EAA8CH,gBAA9C,EAAb,CAAP;AACA;;AAGD;;;;;;;;;;;;;;;;iCAwBE;AAAA,OAVDJ,GAUC,SAVDA,GAUC;AAAA,OATDM,MASC,SATDA,MASC;AAAA,6BARDJ,OAQC;AAAA,OARDA,OAQC,iCARSM,SAQT;AAAA,0BAPDD,IAOC;AAAA,OAPDA,IAOC,8BAPMC,SAON;AAAA,OANDP,IAMC,SANDA,IAMC;AAAA,2BALDE,KAKC;AAAA,OALDA,KAKC,+BALOK,SAKP;AAAA,0BAJDC,IAIC;AAAA,OAJDA,IAIC,8BAJMD,SAIN;AAAA,2BAHDE,KAGC;AAAA,OAHDA,KAGC,+BAHOF,SAGP;AAAA,6BAFDJ,OAEC;AAAA,OAFDA,OAEC,iCAFSI,SAET;AAAA,yBADDG,GACC;AAAA,OADDA,GACC,6BADK,KACL;;AACD,OAAMC,eAAe,KAAKC,cAAL,CAAoBH,KAApB,CAArB;AACA,UAAO,KAAKI,QAAL,CAAc,EAAEd,QAAF,EAAOM,cAAP,EAAeJ,gBAAf,EAAwBK,UAAxB,EAA8BN,UAA9B,EAAoCE,YAApC,EAA2CM,UAA3C,EAAiDL,gBAAjD,EAA0DM,OAAOE,YAAjE,EAA+ED,QAA/E,EAAd,CAAP;AACA;;AAED;;;;;;;;;;;;;;;;kCAagF;AAAA,OAArEX,GAAqE,SAArEA,GAAqE;AAAA,OAAhEM,MAAgE,SAAhEA,MAAgE;AAAA,OAAxDJ,OAAwD,SAAxDA,OAAwD;AAAA,OAA/CK,IAA+C,SAA/CA,IAA+C;AAAA,OAAzCN,IAAyC,SAAzCA,IAAyC;AAAA,OAAnCE,KAAmC,SAAnCA,KAAmC;AAAA,OAA5BM,IAA4B,SAA5BA,IAA4B;AAAA,OAAtBC,KAAsB,SAAtBA,KAAsB;AAAA,OAAfN,OAAe,SAAfA,OAAe;AAAA,OAANO,GAAM,SAANA,GAAM;;AAC/E,OAAMI,MAAM,KAAKC,aAAL,CAAmB,EAAEhB,QAAF,EAAOM,cAAP,EAAeJ,gBAAf,EAAwBK,UAAxB,EAA8BN,UAA9B,EAAoCE,YAApC,EAA2CM,UAA3C,EAAiDL,gBAAjD,EAA0DM,YAA1D,EAAnB,CAAZ;;AAEA,OAAIC,GAAJ,EAAQ;AACP,WAAOI,GAAP;AACA;AACD,UAAO,KAAKE,gBAAL,CAAsBF,GAAtB,CAAP;AACA;;AAED;;;;;;;;;mCAMiBA,G,EAAI;AAAA;;AACpB,UAAO,sBAAY,UAACG,OAAD,EAAUC,MAAV;AAAA,WAAqB,MAAKC,YAAL,CAAkBL,GAAlB,EAAuBG,OAAvB,EAAgCC,MAAhC,CAArB;AAAA,IAAZ,CAAP;AACA;;AAED;;;;;;;;;;;+BAQad,O,EAASa,O,EAASC,M,EAAO;AACrCd,WAAQgB,GAAR,CAAY,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAC3B,QAAMC,OAAOD,OAAOA,IAAIC,IAAxB;AACA,QAAIF,KAAJ,EAAU;AACT,SAAMtB,MAAMK,QAAQoB,GAApB;AACA,SAAMC,aAAaJ,MAAMK,MAAzB;AACA,SAAIC,oBAAsBF,aAAa,gBAAgBA,UAA7B,GAA0C,eAAhE,eAAwF1B,GAA5F;AACA,SAAI6B,8BAAJ;AACA,SAAIL,QAAQA,KAAKM,iBAAjB,EAAmC;AAClCF,0BAAoB,QAAQJ,KAAKM,iBAAjC;AACAD,8BAAwBL,KAAKM,iBAA7B;AACA;AACD,SAAMC,SAAS,IAAIC,KAAJ,CAAUJ,gBAAV,CAAf;AACA,2BAAcG,MAAd,EAAsB,EAAEL,sBAAF,EAAcE,kCAAd,EAAgCC,4CAAhC,EAAuDP,YAAvD,EAA8DE,UAA9D,EAAtB;AACAL,YAAOY,MAAP;AACA,KAZD,MAYO;AACNb,aAAQ;AACPM,YAAMA,IADC;AAEPE,kBAAYH,IAAIG;AAFT,MAAR;AAIA;AACD,IApBD;AAqBA;;;uCAEsG;AAAA,OAAvF1B,GAAuF,SAAvFA,GAAuF;AAAA,OAAlFM,MAAkF,SAAlFA,MAAkF;AAAA,OAA1EJ,OAA0E,SAA1EA,OAA0E;AAAA,OAAjEK,IAAiE,SAAjEA,IAAiE;AAAA,OAA3DN,IAA2D,SAA3DA,IAA2D;AAAA,OAArDE,KAAqD,SAArDA,KAAqD;AAAA,OAA9CM,IAA8C,SAA9CA,IAA8C;AAAA,OAAxCC,KAAwC,SAAxCA,KAAwC;AAAA,OAAjCN,OAAiC,SAAjCA,OAAiC;AAAA,iCAAxB6B,WAAwB;AAAA,OAAxBA,WAAwB;;AACtG,OAAMlB,MAAMkB,YAAY3B,MAAZ,EAAoBN,GAApB,CAAZ;AACA,OAAI,KAAKD,MAAT,EAAgB;AACfgB,QAAImB,GAAJ,CAAQ,KAAKnC,MAAb;AACA;AACD,QAAKoC,oBAAL,CAA0BpB,GAA1B,EAA+Bd,IAA/B;AACA,OAAIG,OAAJ,EAAY;AACX,SAAKgC,aAAL,CAAmBrB,GAAnB,EAAwBX,OAAxB;AACA;AACD,OAAID,KAAJ,EAAU;AACTY,QAAIZ,KAAJ,CAAUA,KAAV;AACA;AACD,OAAID,OAAJ,EAAY;AACXa,QAAIsB,GAAJ,CAAQnC,OAAR;AACA;AACD,OAAIQ,KAAJ,EAAU;AAAA;AAAA;AAAA;;AAAA;AACT,qDAAyB,uBAAeA,KAAf,CAAzB,4GAA+C;AAAA;AAAA,UAArC4B,IAAqC;AAAA,UAA/BC,IAA+B;;AAC9C;AACA,UAAIC,UAAU;AACbC,iBAAUF,KAAKG;AADF,OAAd;AAGA,UAAI,KAAKC,YAAL,CAAkBV,WAAlB,CAAJ,EAAmC;AAClCO,iBAAUD,KAAKG,IAAf;AACA;AACD3B,UAAI6B,MAAJ,CAAWN,IAAX,EAAiBC,KAAKhC,IAAtB,EAA4BiC,OAA5B;AACA;AAVQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAWT,QAAI/B,IAAJ,EAAS;AAAA;AAAA;AAAA;;AAAA;AACR,uDAA0B,uBAAeA,IAAf,CAA1B,iHAA+C;AAAA;AAAA,WAArC6B,IAAqC;AAAA,WAA/BO,KAA+B;;AAC9C9B,WAAI+B,KAAJ,CAAUR,IAAV,EAAgBO,KAAhB;AACA;AAHO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIR;AACD,IAhBD,MAgBO,IAAIpC,IAAJ,EAAS;AACfM,QAAIgC,IAAJ,CAAS,MAAT;AACAhC,QAAIiC,IAAJ,CAASvC,IAAT;AACA,IAHM,MAGA,IAAIF,IAAJ,EAAS;AACfQ,QAAIiC,IAAJ,CAASzC,IAAT;AACA;AACD,UAAOQ,GAAP;AACA;;;iCAEkC;AAAA,OAAtBkB,WAAsB;;AAClC;AACA,UAAO,CAAC,CAACA,YAAYgB,MAArB;AACA;;;gCAEalC,G,EAAKX,O,EAAQ;AAC1B,OAAIA,QAAQ8C,IAAZ,EAAiB;AAChB,SAAKC,eAAL,CAAqBpC,GAArB,EAA0BX,QAAQ8C,IAAlC;AACA;AACD,OAAI9C,QAAQgD,OAAZ,EAAoB;AACnB,SAAKC,kBAAL,CAAwBtC,GAAxB,EAA6BX,QAAQgD,OAArC;AACA;AACD;;;kCAEerC,G,EAAKmC,I,EAAK;AACzB,OAAIL,QAAQ,EAAZ;AACA,OAAIK,KAAKZ,IAAT,EAAc;AACbO,aAAS,KAAKS,UAAL,CAAgBJ,IAAhB,CAAT;AACA,QAAIA,KAAKK,UAAT,EAAoB;AAAA;AAAA;AAAA;;AAAA;AACnB,uDAAsBL,KAAKK,UAA3B,iHAAsC;AAAA,WAA7BC,SAA6B;;AACrCX,gBAAS,OAAK,KAAKS,UAAL,CAAgBE,SAAhB,CAAd;AACA;AAHkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAInB;AACD;AACD,OAAIX,KAAJ,EAAU;AACT9B,QAAIsB,GAAJ,CAAQ,iBAAR,EAA2BQ,KAA3B;AACA;AACD;;;6BAEUK,I,EAAK;AACf,UAAO,KAAKO,cAAL,CAAoBP,KAAKZ,IAAzB,EAA+BY,KAAKQ,OAApC,CAAP;AACA;;;iCAEcpB,I,EAAMoB,O,EAAQ;AAC5B,OAAIb,QAAQ,EAAZ;AACA,OAAIP,IAAJ,EAAS;AACRO,aAASP,IAAT;AACA,QAAIoB,OAAJ,EAAY;AACXb,cAAS,MAAIa,OAAb;AACA;AACD;AACD,UAAOb,KAAP;AACA;;;qCAEkB9B,G,EAAKqC,O,EAAQ;AAC/B,OAAIP,QAAQ,KAAKc,kCAAL,CAAwCP,OAAxC,EAAiD,MAAjD,CAAZ;AACA,OAAIP,KAAJ,EAAU;AACT9B,QAAIsB,GAAJ,CAAQ,oBAAR,EAA8BQ,KAA9B;AACA;AACD;;AAED;;;;;;;;;;;qDAQmCe,G,EAAKC,e,EAAgB;AACvD,OAAIhB,QAAQ,EAAZ;AACA,OAAIe,IAAIC,eAAJ,CAAJ,EAAyB;AACxBhB,aAASe,IAAIC,eAAJ,CAAT;AACA,SAAK,IAAIC,IAAT,IAAiBF,GAAjB,EAAqB;AACpB,SAAIE,SAAOD,eAAP,IAA0BD,IAAIG,cAAJ,CAAmBD,IAAnB,CAA9B,EAAuD;AACtDjB,eAAS,OAAKiB,IAAL,GAAU,GAAV,GAAcF,IAAIE,IAAJ,CAAvB;AACA;AACD;AACD;AACD,UAAOjB,KAAP;AACA;;AAED;;;;;;;;;;uCAOqB9B,G,EAAKd,I,EAAK;AAC9B,OAAIA,IAAJ,EAAS;AACR,QAAIA,KAAK+D,QAAL,KAAkBxD,SAAtB,EAAgC;AAC/BO,SAAId,IAAJ,CAASA,KAAK+D,QAAd,EAAwB/D,KAAKgE,QAA7B;AACA,KAFD,MAEO;AACNlD,SAAIsB,GAAJ,CAAQ,EAAE6B,2BAAyBjE,IAA3B,EAAR;AACA;AACD;AACD,UAAOc,GAAP;AACA;;AAED;;;;;;;;iCAKeL,K,EAAM;AACpB,OAAIE,qBAAJ;AACA,OAAIF,KAAJ,EAAU;AACTE,mBAAe,EAAf;AACA,wBAAYF,KAAZ,EAAmByD,OAAnB,CAA2B,UAACC,CAAD,EAAIC,CAAJ,EAAU;AACpC,SAAM/B,OAAO+B,cAAWA,IAAI,CAAf,IAAqB,MAAlC;AACAzD,kBAAa0B,IAAb,IAAqB;AACpB/B,YAAMG,MAAM0D,CAAN,CADc;AAEpB1B,YAAM0B;AAFc,MAArB;AAIA,KAND;AAOA;AACD,UAAOxD,YAAP;AACA;;;;;kBA/QmBhB,K","file":"Agent.js","sourcesContent":["/*\n ******************************************************************************\n Copyright (c) 2016 Particle Industries, Inc. All rights reserved.\n\n This program is free software; you can redistribute it and/or\n modify it under the terms of the GNU Lesser General Public\n License as published by the Free Software Foundation, either\n version 3 of the License, or (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public\n License along with this program; if not, see <http://www.gnu.org/licenses/>.\n ******************************************************************************\n */\n\nimport request from 'superagent';\nimport prefix from 'superagent-prefix';\n\nexport default class Agent {\n\tconstructor(baseUrl){\n\t\tthis.setBaseUrl(baseUrl);\n\t}\n\n\tsetBaseUrl(baseUrl) {\n\t\tthis.prefix = prefix(baseUrl);\n\t}\n\n\tget({ uri, auth, headers, query, context }){\n\t\treturn this.request({ uri, method: 'get', auth, headers, query, context });\n\t}\n\n\thead({ uri, auth, headers, query, context }){\n\t\treturn this.request({ uri, method: 'head', auth, headers, query, context });\n\t}\n\n\tpost({ uri, headers, data, auth, context }){\n\t\treturn this.request({ uri, method: 'post', auth, headers, data, context });\n\t}\n\n\tput({ uri, auth, headers, data, context }){\n\t\treturn this.request({ uri, method: 'put', auth, headers, data, context });\n\t}\n\n\tdelete({ uri, auth, headers, data, context }){\n\t\treturn this.request({ uri, method: 'delete', auth, headers, data, context });\n\t}\n\n\n\t/**\n\t *\n\t * @param {String} uri The URI to request\n\t * @param {String} method The method used to request the URI, should be in uppercase.\n\t * @param {Object} headers Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.\n\t * @param {String} data Arbitrary data to send as the body.\n\t * @param {Object} auth Authorization\n\t * @param {String} query Query parameters\n\t * @param {Object} form Form fields\n\t * @param {Object} files array of file names and file content\n\t * @parma {Object} context the invocation context, describing the tool and project.\n\t * @return {Promise} A promise. fulfilled with {body, statusCode}, rejected with { statusCode, errorDescription, error, body }\n\t */\n\trequest({\n\t\turi,\n\t\tmethod,\n\t\theaders = undefined,\n\t\tdata = undefined,\n\t\tauth,\n\t\tquery = undefined,\n\t\tform = undefined,\n\t\tfiles = undefined,\n\t\tcontext = undefined,\n\t\traw = false\n\t}){\n\t\tconst requestFiles = this._sanitizeFiles(files);\n\t\treturn this._request({ uri, method, headers, data, auth, query, form, context, files: requestFiles, raw });\n\t}\n\n\t/**\n\t *\n\t * @param {String} uri The URI to request\n\t * @param {String} method The method used to request the URI, should be in uppercase.\n\t * @param {Object} headers Key/Value pairs like `{ 'X-FOO': 'foo', X-BAR: 'bar' }` to send as headers.\n\t * @param {String} data Arbitrary data to send as the body.\n\t * @param {Object} auth Authorization\n\t * @param {String} query Query parameters\n\t * @param {Object} form Form fields\n\t * @param {Object} files array of file names and file content\n\t * @param {Object} context the invocation context\n\t * @return {Promise} A promise. fulfilled with {body, statusCode}, rejected with { statusCode, errorDescription, error, body }\n\t */\n\t_request({ uri, method, headers, data, auth, query, form, files, context, raw }){\n\t\tconst req = this._buildRequest({ uri, method, headers, data, auth, query, form, context, files });\n\n\t\tif (raw){\n\t\t\treturn req;\n\t\t}\n\t\treturn this._promiseResponse(req);\n\t}\n\n\t/**\n\t * Promises to send the request and retreive the response.\n\t * @param {Request} req The request to send\n\t * @returns {Promise} The promise to send the request and retrieve the response.\n\t * @private\n\t */\n\t_promiseResponse(req){\n\t\treturn new Promise((fulfill, reject) => this._sendRequest(req, fulfill, reject));\n\t}\n\n\t/**\n\t * Sends the given request, calling the fulfill or reject methods for success/failure.\n\t * @param {object} request The request to send\n\t * @param {function} fulfill Called on success with the response\n\t * @param {function} reject Called on failure with the failure reason.\n\t * @private\n\t * @returns {undefined} Nothing\n\t */\n\t_sendRequest(request, fulfill, reject){\n\t\trequest.end((error, res) => {\n\t\t\tconst body = res && res.body;\n\t\t\tif (error){\n\t\t\t\tconst uri = request.url;\n\t\t\t\tconst statusCode = error.status;\n\t\t\t\tlet errorDescription = `${statusCode ? 'HTTP error ' + statusCode : 'Network error'} from ${uri}`;\n\t\t\t\tlet shortErrorDescription;\n\t\t\t\tif (body && body.error_description){\n\t\t\t\t\terrorDescription += ' - ' + body.error_description;\n\t\t\t\t\tshortErrorDescription = body.error_description;\n\t\t\t\t}\n\t\t\t\tconst reason = new Error(errorDescription);\n\t\t\t\tObject.assign(reason, { statusCode, errorDescription, shortErrorDescription, error, body });\n\t\t\t\treject(reason);\n\t\t\t} else {\n\t\t\t\tfulfill({\n\t\t\t\t\tbody: body,\n\t\t\t\t\tstatusCode: res.statusCode\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t_buildRequest({ uri, method, headers, data, auth, query, form, files, context, makerequest = request }){\n\t\tconst req = makerequest(method, uri);\n\t\tif (this.prefix){\n\t\t\treq.use(this.prefix);\n\t\t}\n\t\tthis._authorizationHeader(req, auth);\n\t\tif (context){\n\t\t\tthis._applyContext(req, context);\n\t\t}\n\t\tif (query){\n\t\t\treq.query(query);\n\t\t}\n\t\tif (headers){\n\t\t\treq.set(headers);\n\t\t}\n\t\tif (files){\n\t\t\tfor (let [name, file] of Object.entries(files)){\n\t\t\t\t// API for Form Data is different in Node and in browser\n\t\t\t\tlet options = {\n\t\t\t\t\tfilepath: file.path\n\t\t\t\t};\n\t\t\t\tif (this.isForBrowser(makerequest)){\n\t\t\t\t\toptions = file.path;\n\t\t\t\t}\n\t\t\t\treq.attach(name, file.data, options);\n\t\t\t}\n\t\t\tif (form){\n\t\t\t\tfor (let [name, value] of Object.entries(form)){\n\t\t\t\t\treq.field(name, value);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (form){\n\t\t\treq.type('form');\n\t\t\treq.send(form);\n\t\t} else if (data){\n\t\t\treq.send(data);\n\t\t}\n\t\treturn req;\n\t}\n\n\tisForBrowser(makerequest = request){\n\t\t// superagent only has the getXHR method in the browser version\n\t\treturn !!makerequest.getXHR;\n\t}\n\n\t_applyContext(req, context){\n\t\tif (context.tool){\n\t\t\tthis._addToolContext(req, context.tool);\n\t\t}\n\t\tif (context.project){\n\t\t\tthis._addProjectContext(req, context.project);\n\t\t}\n\t}\n\n\t_addToolContext(req, tool){\n\t\tlet value = '';\n\t\tif (tool.name){\n\t\t\tvalue += this._toolIdent(tool);\n\t\t\tif (tool.components){\n\t\t\t\tfor (let component of tool.components){\n\t\t\t\t\tvalue += ', '+this._toolIdent(component);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (value){\n\t\t\treq.set('X-Particle-Tool', value);\n\t\t}\n\t}\n\n\t_toolIdent(tool){\n\t\treturn this._nameAtVersion(tool.name, tool.version);\n\t}\n\n\t_nameAtVersion(name, version){\n\t\tlet value = '';\n\t\tif (name){\n\t\t\tvalue += name;\n\t\t\tif (version){\n\t\t\t\tvalue += '@'+version;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\t_addProjectContext(req, project){\n\t\tlet value = this._buildSemicolonSeparatedProperties(project, 'name');\n\t\tif (value){\n\t\t\treq.set('X-Particle-Project', value);\n\t\t}\n\t}\n\n\t/**\n\t * Creates a string like primaryPropertyValue; name=value; name1=value\n\t * from the properties of an object.\n\t * @param {object} obj The object to create the string from\n\t * @param {string} primaryProperty The name of the primary property which is the default value and must be defined.\n\t * @private\n\t * @return {string} The formatted string representing the object properties and the default property.\n\t */\n\t_buildSemicolonSeparatedProperties(obj, primaryProperty){\n\t\tlet value = '';\n\t\tif (obj[primaryProperty]){\n\t\t\tvalue += obj[primaryProperty];\n\t\t\tfor (let prop in obj){\n\t\t\t\tif (prop!==primaryProperty && obj.hasOwnProperty(prop)){\n\t\t\t\t\tvalue += '; '+prop+'='+obj[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * Adds an authorization header.\n\t * @param {Request} req The request to add the authorization header to.\n\t * @param {object|string} auth The authorization. Either a string authorization bearer token,\n\t * or a username/password object.\n\t * @returns {Request} req The original request.\n\t */\n\t_authorizationHeader(req, auth){\n\t\tif (auth){\n\t\t\tif (auth.username !== undefined){\n\t\t\t\treq.auth(auth.username, auth.password);\n\t\t\t} else {\n\t\t\t\treq.set({ Authorization: `Bearer ${auth}` });\n\t\t\t}\n\t\t}\n\t\treturn req;\n\t}\n\n\t/**\n\t *\n\t * @param {Array} files converts the file names to file, file1, file2.\n\t * @returns {object} the renamed files.\n\t */\n\t_sanitizeFiles(files){\n\t\tlet requestFiles;\n\t\tif (files){\n\t\t\trequestFiles = {};\n\t\t\tObject.keys(files).forEach((k, i) => {\n\t\t\t\tconst name = i ? `file${i + 1}` : 'file';\n\t\t\t\trequestFiles[name] = {\n\t\t\t\t\tdata: files[k],\n\t\t\t\t\tpath: k\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn requestFiles;\n\t}\n}\n\n"]}
package/lib/Defaults.js CHANGED
@@ -7,7 +7,8 @@ exports.default = {
7
7
  baseUrl: 'https://api.particle.io',
8
8
  clientSecret: 'particle-api',
9
9
  clientId: 'particle-api',
10
- tokenDuration: 7776000 // 90 days
10
+ tokenDuration: 7776000, // 90 days
11
+ auth: undefined
11
12
  };
12
13
  module.exports = exports['default'];
13
14
  //# sourceMappingURL=Defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Defaults.js"],"names":["baseUrl","clientSecret","clientId","tokenDuration"],"mappings":";;;;;kBAAe;AACdA,UAAS,yBADK;AAEdC,eAAc,cAFA;AAGdC,WAAU,cAHI;AAIdC,gBAAe,OAJD,CAIS;AAJT,C","file":"Defaults.js","sourcesContent":["export default {\n\tbaseUrl: 'https://api.particle.io',\n\tclientSecret: 'particle-api',\n\tclientId: 'particle-api',\n\ttokenDuration: 7776000 // 90 days\n};\n"]}
1
+ {"version":3,"sources":["../src/Defaults.js"],"names":["baseUrl","clientSecret","clientId","tokenDuration","auth","undefined"],"mappings":";;;;;kBAAe;AACdA,UAAS,yBADK;AAEdC,eAAc,cAFA;AAGdC,WAAU,cAHI;AAIdC,gBAAe,OAJD,EAIU;AACxBC,OAAMC;AALQ,C","file":"Defaults.js","sourcesContent":["export default {\n\tbaseUrl: 'https://api.particle.io',\n\tclientSecret: 'particle-api',\n\tclientId: 'particle-api',\n\ttokenDuration: 7776000, // 90 days\n\tauth: undefined\n};\n"]}
package/lib/Particle.js CHANGED
@@ -59,6 +59,10 @@ var Particle = function () {
59
59
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
60
60
  (0, _classCallCheck3.default)(this, Particle);
61
61
 
62
+ if (options.auth) {
63
+ this.setDefaultAuth(options.auth);
64
+ }
65
+
62
66
  // todo - this seems a bit dangerous - would be better to put all options/context in a contained object
63
67
  (0, _assign2.default)(this, _Defaults2.default, options);
64
68
  this.context = {};
@@ -77,7 +81,7 @@ var Particle = function () {
77
81
  if (this._isValidContext(name, context)) {
78
82
  this.context[name] = context;
79
83
  } else {
80
- throw Error('uknown context name or undefined context: ' + name);
84
+ throw Error('unknown context name or undefined context: ' + name);
81
85
  }
82
86
  }
83
87
  }
@@ -1301,6 +1305,7 @@ var Particle = function () {
1301
1305
  uri += '/' + encodeURIComponent(name);
1302
1306
  }
1303
1307
 
1308
+ auth = this._getActiveAuthToken(auth);
1304
1309
  return new _EventStream2.default('' + this.baseUrl + uri, auth).connect();
1305
1310
  }
1306
1311
 
@@ -3097,6 +3102,33 @@ var Particle = function () {
3097
3102
  });
3098
3103
  }
3099
3104
 
3105
+ /**
3106
+ * Set default auth token that will be used in each method if `auth` is not provided
3107
+ * @param {String} auth A Particle access token
3108
+ * @returns {undefined}
3109
+ */
3110
+
3111
+ }, {
3112
+ key: 'setDefaultAuth',
3113
+ value: function setDefaultAuth(auth) {
3114
+ if (typeof auth === 'string' && auth.length !== 0) {
3115
+ this._defaultAuth = auth;
3116
+ } else {
3117
+ throw new Error('Must pass a non-empty string');
3118
+ }
3119
+ }
3120
+ /**
3121
+ * Return provided token if truthy else use default auth if truthy else undefined
3122
+ * @param {*} auth Optional auth token or undefined
3123
+ * @private
3124
+ * @returns {String|undefined} a Particle auth token or undefined
3125
+ */
3126
+
3127
+ }, {
3128
+ key: '_getActiveAuthToken',
3129
+ value: function _getActiveAuthToken(auth) {
3130
+ return auth || this._defaultAuth;
3131
+ }
3100
3132
  /**
3101
3133
  * API URI to access a device
3102
3134
  * @param {Object} options Options for this API call
@@ -3124,6 +3156,7 @@ var Particle = function () {
3124
3156
  context = _ref104.context;
3125
3157
 
3126
3158
  context = this._buildContext(context);
3159
+ auth = this._getActiveAuthToken(auth);
3127
3160
  return this.agent.get({ uri: uri, auth: auth, headers: headers, query: query, context: context });
3128
3161
  }
3129
3162
  }, {
@@ -3136,6 +3169,7 @@ var Particle = function () {
3136
3169
  context = _ref105.context;
3137
3170
 
3138
3171
  context = this._buildContext(context);
3172
+ auth = this._getActiveAuthToken(auth);
3139
3173
  return this.agent.head({ uri: uri, auth: auth, headers: headers, query: query, context: context });
3140
3174
  }
3141
3175
  }, {
@@ -3148,6 +3182,7 @@ var Particle = function () {
3148
3182
  context = _ref106.context;
3149
3183
 
3150
3184
  context = this._buildContext(context);
3185
+ auth = this._getActiveAuthToken(auth);
3151
3186
  return this.agent.post({ uri: uri, auth: auth, headers: headers, data: data, context: context });
3152
3187
  }
3153
3188
  }, {
@@ -3160,6 +3195,7 @@ var Particle = function () {
3160
3195
  context = _ref107.context;
3161
3196
 
3162
3197
  context = this._buildContext(context);
3198
+ auth = this._getActiveAuthToken(auth);
3163
3199
  return this.agent.put({ uri: uri, auth: auth, headers: headers, data: data, context: context });
3164
3200
  }
3165
3201
  }, {
@@ -3172,12 +3208,14 @@ var Particle = function () {
3172
3208
  context = _ref108.context;
3173
3209
 
3174
3210
  context = this._buildContext(context);
3211
+ auth = this._getActiveAuthToken(auth);
3175
3212
  return this.agent.delete({ uri: uri, auth: auth, headers: headers, data: data, context: context });
3176
3213
  }
3177
3214
  }, {
3178
3215
  key: 'request',
3179
3216
  value: function request(args) {
3180
3217
  args.context = this._buildContext(args.context);
3218
+ args.auth = this._getActiveAuthToken(args.auth);
3181
3219
  return this.agent.request(args);
3182
3220
  }
3183
3221
  }, {
@@ -3187,6 +3225,15 @@ var Particle = function () {
3187
3225
 
3188
3226
  return new _Client2.default((0, _assign2.default)({ api: this }, options));
3189
3227
  }
3228
+
3229
+ // Internal method used to target Particle's APIs other than the default
3230
+
3231
+ }, {
3232
+ key: 'setBaseUrl',
3233
+ value: function setBaseUrl(baseUrl) {
3234
+ this.baseUrl = baseUrl;
3235
+ this.agent.setBaseUrl(baseUrl);
3236
+ }
3190
3237
  }]);
3191
3238
  return Particle;
3192
3239
  }();