particle-api-js 9.1.0 → 9.2.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/.circleci/config.yml +79 -0
- package/.nvmrc +1 -0
- package/CHANGELOG.md +9 -0
- package/README.md +62 -2
- package/RELEASE.md +8 -10
- package/dist/particle.min.js +86 -89
- package/dist/particle.min.js.map +1 -1
- package/docs/api.md +102 -102
- package/lib/Client.js +2 -2
- package/lib/Client.js.map +1 -1
- package/lib/EventStream.js +0 -1
- package/lib/EventStream.js.map +1 -1
- package/package.json +13 -9
- package/test/Client.spec.js +2 -2
- package/test/EventStream-e2e-node.js +1 -0
- package/test/EventStream.spec.js +0 -1
- package/.travis.yml +0 -34
- package/travis_tests.sh +0 -11
package/lib/Client.js
CHANGED
|
@@ -181,8 +181,8 @@ var Client = function () {
|
|
|
181
181
|
}
|
|
182
182
|
}, {
|
|
183
183
|
key: 'downloadFile',
|
|
184
|
-
value: function downloadFile(
|
|
185
|
-
return this.api.downloadFile({
|
|
184
|
+
value: function downloadFile(uri) {
|
|
185
|
+
return this.api.downloadFile({ uri: uri });
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
/**
|
package/lib/Client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Client.js"],"names":["Client","auth","api","Boolean","query","listLibraries","then","libraries","payload","body","data","map","l","name","getLibrary","library","getLibraryVersions","archive","contributeLibrary","_throwError","error","publishLibrary","force","deleteLibrary","errors","errorMessages","e","message","join","Error","
|
|
1
|
+
{"version":3,"sources":["../src/Client.js"],"names":["Client","auth","api","Boolean","query","listLibraries","then","libraries","payload","body","data","map","l","name","getLibrary","library","getLibraryVersions","archive","contributeLibrary","_throwError","error","publishLibrary","force","deleteLibrary","errors","errorMessages","e","message","join","Error","uri","downloadFile","files","platformId","targetVersion","compileCode","signal","deviceId","signalDevice","listDevices","listBuildTargets","onlyFeatured","targets","target","platforms","platform","push","version","prerelease","prereleases","indexOf","firmware_vendor","full","context","trackingIdentity"],"mappings":"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","file":"Client.js","sourcesContent":["import Particle from './Particle';\nimport Library from './Library';\n\n\nexport default class Client {\n\tconstructor({ auth, api = new Particle() }){\n\t\tObject.assign(this, { auth, api });\n\t}\n\n\tready(){\n\t\treturn Boolean(this.auth);\n\t}\n\n\t/**\n\t * Get firmware library objects\n\t * @param {Object} query The query parameters for libraries. See Particle.listLibraries\n\t * @returns {Promise} A promise\n\t */\n\tlibraries(query = {}){\n\t\treturn this.api.listLibraries(Object.assign({}, query, { auth: this.auth }))\n\t\t\t.then(payload => {\n\t\t\t\tconst libraries = payload.body.data || [];\n\t\t\t\treturn libraries.map(l => new Library(this, l));\n\t\t\t});\n\t}\n\n\t/**\n\t * Get one firmware library object\n\t * @param {String} name Name of the library to fetch\n\t * @param {Object} query The query parameters for libraries. See Particle.getLibrary\n\t * @returns {Promise} A promise\n\t */\n\tlibrary(name, query = {}){\n\t\treturn this.api.getLibrary(Object.assign({}, query, { name, auth: this.auth }))\n\t\t\t.then(payload => {\n\t\t\t\tconst library = payload.body.data || {};\n\t\t\t\treturn new Library(this, library);\n\t\t\t});\n\t}\n\n\t/**\n\t * Get list of library versions\n\t * @param {String} name Name of the library to fetch\n\t * @param {Object} query The query parameters for versions. See Particle.getLibraryVersions\n\t * @returns {Promise} A promise\n\t */\n\tlibraryVersions(name, query = {}){\n\t\treturn this.api.getLibraryVersions(Object.assign({}, query, { name, auth: this.auth }))\n\t\t\t.then(payload => {\n\t\t\t\tconst libraries = payload.body.data || [];\n\t\t\t\treturn libraries.map(l => new Library(this, l));\n\t\t\t});\n\t}\n\n\t/**\n\t * Contribute a new library version\n\t * @param {Buffer} archive The compressed archive with the library source\n\t * @returns {Promise} A promise\n\t */\n\tcontributeLibrary(archive){\n\t\treturn this.api.contributeLibrary({ archive, auth: this.auth })\n\t\t\t.then(payload => {\n\t\t\t\tconst library = payload.body.data || {};\n\t\t\t\treturn new Library(this, library);\n\t\t\t}, error => {\n\t\t\t\tthis._throwError(error);\n\t\t\t});\n\t}\n\n\t/**\n\t * Make the the most recent private library version public\n\t * @param {string} name The name of the library to publish\n\t * @return {Promise} To publish the library\n\t */\n\tpublishLibrary(name){\n\t\treturn this.api.publishLibrary({ name, auth: this.auth })\n\t\t\t.then(payload => {\n\t\t\t\tconst library = payload.body.data || {};\n\t\t\t\treturn new Library(this, library);\n\t\t\t}, error => {\n\t\t\t\tthis._throwError(error);\n\t\t\t});\n\t}\n\n\t/**\n\t * Delete an entire published library\n\t * @param {String} $0.name Name of the library to delete\n\t * @param {String} $0.force Key to force deleting a public library\n\t * @returns {Promise} A promise\n\t */\n\tdeleteLibrary({ name, force }){\n\t\treturn this.api.deleteLibrary({ name, force, auth: this.auth })\n\t\t\t.then(() => true, error => this._throwError(error));\n\t}\n\n\t_throwError(error){\n\t\tif (error.body && error.body.errors){\n\t\t\tconst errorMessages = error.body.errors.map((e) => e.message).join('\\n');\n\t\t\tthrow new Error(errorMessages);\n\t\t}\n\t\tthrow error;\n\t}\n\n\tdownloadFile(uri){\n\t\treturn this.api.downloadFile({ uri });\n\t}\n\n\t/**\n\t * @param {Object} files Object containing files to be compiled\n\t * @param {Number} platformId Platform id number of the device you are compiling for\n\t * @param {String} targetVersion System firmware version to compile against\n\t * @returns {Promise} A promise\n\t * @deprecated Will be removed in 6.5\n\t */\n\tcompileCode(files, platformId, targetVersion){\n\t\treturn this.api.compileCode({ files, platformId, targetVersion, auth: this.auth });\n\t}\n\n\t/**\n\t * @param {String} $0.deviceId Device ID or Name\n\t * @param {Boolean} $0.signal Signal on or off\n\t * @returns {Promise} A promise\n\t * @deprecated Will be removed in 6.5\n\t */\n\tsignalDevice({ signal, deviceId }){\n\t\treturn this.api.signalDevice({ signal, deviceId, auth: this.auth });\n\t}\n\n\t/**\n\t * @returns {Promise} A promise\n\t * @deprecated Will be removed in 6.5\n\t */\n\tlistDevices(){\n\t\treturn this.api.listDevices({ auth: this.auth });\n\t}\n\n\t/**\n\t * @returns {Promise} A promise\n\t * @deprecated Will be removed in 6.5\n\t */\n\tlistBuildTargets(){\n\t\treturn this.api.listBuildTargets({ onlyFeatured: true, auth: this.auth })\n\t\t\t.then(payload => {\n\t\t\t\tlet targets = [];\n\t\t\t\tfor (let target of payload.body.targets){\n\t\t\t\t\tfor (let platform of target.platforms){\n\t\t\t\t\t\ttargets.push({\n\t\t\t\t\t\t\tversion: target.version,\n\t\t\t\t\t\t\tplatform: platform,\n\t\t\t\t\t\t\tprerelease: target.prereleases.indexOf(platform) > -1,\n\t\t\t\t\t\t\tfirmware_vendor: target.firmware_vendor\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn targets;\n\t\t\t}, () => {});\n\t}\n\n\ttrackingIdentity({ full=false, context }={}){\n\t\treturn this.api.trackingIdentity({ full, context, auth: this.auth })\n\t\t\t.then(payload => {\n\t\t\t\treturn payload.body;\n\t\t\t});\n\t}\n}\n"]}
|
package/lib/EventStream.js
CHANGED
package/lib/EventStream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/EventStream.js"],"names":["EventStream","uri","token","reconnectInterval","timeout","data","buf","parse","bind","end","idleTimeoutExpired","resolve","reject","hostname","protocol","port","path","origin","isSecure","requestor","req","request","method","parseInt","avoidFetch","mode","connected","connectionTimeout","setTimeout","abort","error","Error","errorDescription","on","clearTimeout","e","statusCode","res","body","chunk","JSON","error_description","undefined","once","startIdleTimeout","removeAllListeners","event","param","emit","emitSafe","stopIdleTimeout","reconnect","isOffline","connect","then","catch","err","navigator","hasOwnProperty","onLine","idleTimeout","pos","length","discardTrailingNewline","lineLength","fieldLength","i","c","parseEventStreamLine","slice","name","eventName","field","step","valueLength","value"],"mappings":"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","file":"EventStream.js","sourcesContent":["/* eslint max-depth: 0 */\nimport http from 'http';\nimport https from 'https';\nimport url from 'url';\nimport { EventEmitter } from 'events';\n\nclass EventStream extends EventEmitter {\n\tconstructor(uri, token) {\n\t\tsuper();\n\t\tthis.uri = uri;\n\t\tthis.token = token;\n\t\tthis.reconnectInterval = 2000;\n\t\tthis.timeout = 13000; // keep alive can be sent up to 12 seconds after last event\n\t\tthis.data = '';\n\t\tthis.buf = '';\n\n\t\tthis.parse = this.parse.bind(this);\n\t\tthis.end = this.end.bind(this);\n\t\tthis.idleTimeoutExpired = this.idleTimeoutExpired.bind(this);\n\t}\n\n\tconnect() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst { hostname, protocol, port, path } = url.parse(this.uri);\n\t\t\tthis.origin = `${protocol}//${hostname}${port ? (':' + port) : ''}`;\n\n\t\t\tconst isSecure = protocol === 'https:';\n\t\t\tconst requestor = isSecure ? https : http;\n\t\t\tconst req = requestor.request({\n\t\t\t\thostname,\n\t\t\t\tprotocol,\n\t\t\t\tpath: `${path}?access_token=${this.token}`,\n\t\t\t\tmethod: 'get',\n\t\t\t\tport: parseInt(port, 10) || (isSecure ? 443 : 80),\n\t\t\t\tavoidFetch: true,\n\t\t\t\tmode: 'prefer-streaming'\n\t\t\t});\n\n\t\t\tthis.req = req;\n\n\t\t\tlet connected = false;\n\t\t\tlet connectionTimeout = setTimeout(() => {\n\t\t\t\tif (this.req) {\n\t\t\t\t\tthis.req.abort();\n\t\t\t\t}\n\t\t\t\treject({ error: new Error('Timeout'), errorDescription: `Timeout connecting to ${this.uri}` });\n\t\t\t}, this.timeout);\n\n\t\t\treq.on('error', e => {\n\t\t\t\tclearTimeout(connectionTimeout);\n\n\t\t\t\tif (connected) {\n\t\t\t\t\tthis.end();\n\t\t\t\t} else {\n\t\t\t\t\treject({ error: e, errorDescription: `Network error from ${this.uri}` });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treq.on('response', res => {\n\t\t\t\tclearTimeout(connectionTimeout);\n\n\t\t\t\tconst statusCode = res.statusCode;\n\t\t\t\tif (statusCode !== 200) {\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tres.on('data', chunk => body += chunk);\n\t\t\t\t\tres.on('end', () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = JSON.parse(body);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// don't bother doing anything special if the JSON.parse fails\n\t\t\t\t\t\t\t// since we are already about to reject the promise anyway\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tlet errorDescription = `HTTP error ${statusCode} from ${this.uri}`;\n\t\t\t\t\t\t\tif (body && body.error_description) {\n\t\t\t\t\t\t\t\terrorDescription += ' - ' + body.error_description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treject({ statusCode, errorDescription, body });\n\t\t\t\t\t\t\tthis.req = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.data = '';\n\t\t\t\tthis.buf = '';\n\n\t\t\t\tconnected = true;\n\t\t\t\tres.on('data', this.parse);\n\t\t\t\tres.once('end', this.end);\n\t\t\t\tthis.startIdleTimeout();\n\t\t\t\tresolve(this);\n\t\t\t});\n\t\t\treq.end();\n\t\t});\n\t}\n\n\tabort() {\n\t\tif (this.req) {\n\t\t\tthis.req.abort();\n\t\t\tthis.req = undefined;\n\t\t}\n\t\tthis.removeAllListeners();\n\t}\n\n\t/* Private methods */\n\n\temitSafe(event, param) {\n\t\ttry {\n\t\t\tthis.emit(event, param);\n\t\t} catch (error) {\n\t\t\tif (event !== 'error') {\n\t\t\t\tthis.emitSafe('error', error);\n\t\t\t}\n\t\t}\n\t}\n\n\tend() {\n\t\tthis.stopIdleTimeout();\n\n\t\tif (!this.req) {\n\t\t\t// request was ended intentionally by abort\n\t\t\t// do not auto reconnect.\n\t\t\treturn;\n\t\t}\n\n\t\tthis.req = undefined;\n\t\tthis.emitSafe('disconnect');\n\t\tthis.reconnect();\n\t}\n\n\treconnect() {\n\t\tsetTimeout(() => {\n\t\t\tif (this.isOffline()) {\n\t\t\t\tthis.reconnect();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emitSafe('reconnect');\n\t\t\tthis.connect().then(() => {\n\t\t\t\tthis.emitSafe('reconnect-success');\n\t\t\t}).catch(err => {\n\t\t\t\tthis.emitSafe('reconnect-error', err);\n\t\t\t\tthis.reconnect();\n\t\t\t});\n\t\t}, this.reconnectInterval);\n\t}\n\n\tisOffline() {\n\t\tif (typeof navigator === 'undefined' || navigator.hasOwnProperty('onLine')) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !navigator.onLine;\n\t}\n\n\tstartIdleTimeout() {\n\t\tthis.stopIdleTimeout();\n\t\tthis.idleTimeout = setTimeout(this.idleTimeoutExpired, this.timeout);\n\t}\n\n\tstopIdleTimeout() {\n\t\tif (this.idleTimeout) {\n\t\t\tclearTimeout(this.idleTimeout);\n\t\t\tthis.idleTimeout = null;\n\t\t}\n\t}\n\n\tidleTimeoutExpired() {\n\t\tif (this.req) {\n\t\t\tthis.req.abort();\n\t\t\tthis.end();\n\t\t}\n\t}\n\n\tparse(chunk) {\n\t\tthis.startIdleTimeout();\n\n\t\tthis.buf += chunk;\n\t\tlet pos = 0;\n\t\tlet length = this.buf.length;\n\t\tlet discardTrailingNewline = false;\n\n\t\twhile (pos < length) {\n\t\t\tif (discardTrailingNewline) {\n\t\t\t\tif (this.buf[pos] === '\\n') {\n\t\t\t\t\t++pos;\n\t\t\t\t}\n\t\t\t\tdiscardTrailingNewline = false;\n\t\t\t}\n\n\t\t\tlet lineLength = -1;\n\t\t\tlet fieldLength = -1;\n\n\t\t\tfor (let i = pos; lineLength < 0 && i < length; ++i) {\n\t\t\t\tconst c = this.buf[i];\n\t\t\t\tif (c === ':') {\n\t\t\t\t\tif (fieldLength < 0) {\n\t\t\t\t\t\tfieldLength = i - pos;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '\\r') {\n\t\t\t\t\tdiscardTrailingNewline = true;\n\t\t\t\t\tlineLength = i - pos;\n\t\t\t\t} else if (c === '\\n') {\n\t\t\t\t\tlineLength = i - pos;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (lineLength < 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.parseEventStreamLine(pos, fieldLength, lineLength);\n\n\t\t\tpos += lineLength + 1;\n\t\t}\n\n\t\tif (pos === length) {\n\t\t\tthis.buf = '';\n\t\t} else if (pos > 0) {\n\t\t\tthis.buf = this.buf.slice(pos);\n\t\t}\n\t}\n\n\tparseEventStreamLine(pos, fieldLength, lineLength) {\n\t\tif (lineLength === 0) {\n\t\t\ttry {\n\t\t\t\tif (this.data.length > 0 && this.event) {\n\t\t\t\t\tconst event = JSON.parse(this.data);\n\t\t\t\t\tevent.name = this.eventName || '';\n\t\t\t\t\tthis.emitSafe('event', event);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// do nothing if JSON.parse fails\n\t\t\t} finally {\n\t\t\t\tthis.data = '';\n\t\t\t\tthis.eventName = undefined;\n\t\t\t\tthis.event = false;\n\t\t\t}\n\t\t} else if (fieldLength > 0) {\n\t\t\tconst field = this.buf.slice(pos, pos + fieldLength);\n\t\t\tlet step = 0;\n\n\t\t\tif (this.buf[pos + fieldLength + 1] !== ' ') {\n\t\t\t\tstep = fieldLength + 1;\n\t\t\t} else {\n\t\t\t\tstep = fieldLength + 2;\n\t\t\t}\n\t\t\tpos += step;\n\t\t\tconst valueLength = lineLength - step;\n\t\t\tconst value = this.buf.slice(pos, pos + valueLength);\n\n\t\t\tif (field === 'data') {\n\t\t\t\tthis.data += value + '\\n';\n\t\t\t} else if (field === 'event') {\n\t\t\t\tthis.eventName = value;\n\t\t\t\tthis.event = true;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default EventStream;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/EventStream.js"],"names":["EventStream","uri","token","reconnectInterval","timeout","data","buf","parse","bind","end","idleTimeoutExpired","resolve","reject","hostname","protocol","port","path","origin","isSecure","requestor","req","request","method","parseInt","mode","connected","connectionTimeout","setTimeout","abort","error","Error","errorDescription","on","clearTimeout","e","statusCode","res","body","chunk","JSON","error_description","undefined","once","startIdleTimeout","removeAllListeners","event","param","emit","emitSafe","stopIdleTimeout","reconnect","isOffline","connect","then","catch","err","navigator","hasOwnProperty","onLine","idleTimeout","pos","length","discardTrailingNewline","lineLength","fieldLength","i","c","parseEventStreamLine","slice","name","eventName","field","step","valueLength","value"],"mappings":"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","file":"EventStream.js","sourcesContent":["/* eslint max-depth: 0 */\nimport http from 'http';\nimport https from 'https';\nimport url from 'url';\nimport { EventEmitter } from 'events';\n\nclass EventStream extends EventEmitter {\n\tconstructor(uri, token) {\n\t\tsuper();\n\t\tthis.uri = uri;\n\t\tthis.token = token;\n\t\tthis.reconnectInterval = 2000;\n\t\tthis.timeout = 13000; // keep alive can be sent up to 12 seconds after last event\n\t\tthis.data = '';\n\t\tthis.buf = '';\n\n\t\tthis.parse = this.parse.bind(this);\n\t\tthis.end = this.end.bind(this);\n\t\tthis.idleTimeoutExpired = this.idleTimeoutExpired.bind(this);\n\t}\n\n\tconnect() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst { hostname, protocol, port, path } = url.parse(this.uri);\n\t\t\tthis.origin = `${protocol}//${hostname}${port ? (':' + port) : ''}`;\n\n\t\t\tconst isSecure = protocol === 'https:';\n\t\t\tconst requestor = isSecure ? https : http;\n\t\t\tconst req = requestor.request({\n\t\t\t\thostname,\n\t\t\t\tprotocol,\n\t\t\t\tpath: `${path}?access_token=${this.token}`,\n\t\t\t\tmethod: 'get',\n\t\t\t\tport: parseInt(port, 10) || (isSecure ? 443 : 80),\n\t\t\t\tmode: 'prefer-streaming'\n\t\t\t});\n\n\t\t\tthis.req = req;\n\n\t\t\tlet connected = false;\n\t\t\tlet connectionTimeout = setTimeout(() => {\n\t\t\t\tif (this.req) {\n\t\t\t\t\tthis.req.abort();\n\t\t\t\t}\n\t\t\t\treject({ error: new Error('Timeout'), errorDescription: `Timeout connecting to ${this.uri}` });\n\t\t\t}, this.timeout);\n\n\t\t\treq.on('error', e => {\n\t\t\t\tclearTimeout(connectionTimeout);\n\n\t\t\t\tif (connected) {\n\t\t\t\t\tthis.end();\n\t\t\t\t} else {\n\t\t\t\t\treject({ error: e, errorDescription: `Network error from ${this.uri}` });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treq.on('response', res => {\n\t\t\t\tclearTimeout(connectionTimeout);\n\n\t\t\t\tconst statusCode = res.statusCode;\n\t\t\t\tif (statusCode !== 200) {\n\t\t\t\t\tlet body = '';\n\t\t\t\t\tres.on('data', chunk => body += chunk);\n\t\t\t\t\tres.on('end', () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tbody = JSON.parse(body);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// don't bother doing anything special if the JSON.parse fails\n\t\t\t\t\t\t\t// since we are already about to reject the promise anyway\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tlet errorDescription = `HTTP error ${statusCode} from ${this.uri}`;\n\t\t\t\t\t\t\tif (body && body.error_description) {\n\t\t\t\t\t\t\t\terrorDescription += ' - ' + body.error_description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treject({ statusCode, errorDescription, body });\n\t\t\t\t\t\t\tthis.req = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.data = '';\n\t\t\t\tthis.buf = '';\n\n\t\t\t\tconnected = true;\n\t\t\t\tres.on('data', this.parse);\n\t\t\t\tres.once('end', this.end);\n\t\t\t\tthis.startIdleTimeout();\n\t\t\t\tresolve(this);\n\t\t\t});\n\t\t\treq.end();\n\t\t});\n\t}\n\n\tabort() {\n\t\tif (this.req) {\n\t\t\tthis.req.abort();\n\t\t\tthis.req = undefined;\n\t\t}\n\t\tthis.removeAllListeners();\n\t}\n\n\t/* Private methods */\n\n\temitSafe(event, param) {\n\t\ttry {\n\t\t\tthis.emit(event, param);\n\t\t} catch (error) {\n\t\t\tif (event !== 'error') {\n\t\t\t\tthis.emitSafe('error', error);\n\t\t\t}\n\t\t}\n\t}\n\n\tend() {\n\t\tthis.stopIdleTimeout();\n\n\t\tif (!this.req) {\n\t\t\t// request was ended intentionally by abort\n\t\t\t// do not auto reconnect.\n\t\t\treturn;\n\t\t}\n\n\t\tthis.req = undefined;\n\t\tthis.emitSafe('disconnect');\n\t\tthis.reconnect();\n\t}\n\n\treconnect() {\n\t\tsetTimeout(() => {\n\t\t\tif (this.isOffline()) {\n\t\t\t\tthis.reconnect();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emitSafe('reconnect');\n\t\t\tthis.connect().then(() => {\n\t\t\t\tthis.emitSafe('reconnect-success');\n\t\t\t}).catch(err => {\n\t\t\t\tthis.emitSafe('reconnect-error', err);\n\t\t\t\tthis.reconnect();\n\t\t\t});\n\t\t}, this.reconnectInterval);\n\t}\n\n\tisOffline() {\n\t\tif (typeof navigator === 'undefined' || navigator.hasOwnProperty('onLine')) {\n\t\t\treturn false;\n\t\t}\n\t\treturn !navigator.onLine;\n\t}\n\n\tstartIdleTimeout() {\n\t\tthis.stopIdleTimeout();\n\t\tthis.idleTimeout = setTimeout(this.idleTimeoutExpired, this.timeout);\n\t}\n\n\tstopIdleTimeout() {\n\t\tif (this.idleTimeout) {\n\t\t\tclearTimeout(this.idleTimeout);\n\t\t\tthis.idleTimeout = null;\n\t\t}\n\t}\n\n\tidleTimeoutExpired() {\n\t\tif (this.req) {\n\t\t\tthis.req.abort();\n\t\t\tthis.end();\n\t\t}\n\t}\n\n\tparse(chunk) {\n\t\tthis.startIdleTimeout();\n\n\t\tthis.buf += chunk;\n\t\tlet pos = 0;\n\t\tlet length = this.buf.length;\n\t\tlet discardTrailingNewline = false;\n\n\t\twhile (pos < length) {\n\t\t\tif (discardTrailingNewline) {\n\t\t\t\tif (this.buf[pos] === '\\n') {\n\t\t\t\t\t++pos;\n\t\t\t\t}\n\t\t\t\tdiscardTrailingNewline = false;\n\t\t\t}\n\n\t\t\tlet lineLength = -1;\n\t\t\tlet fieldLength = -1;\n\n\t\t\tfor (let i = pos; lineLength < 0 && i < length; ++i) {\n\t\t\t\tconst c = this.buf[i];\n\t\t\t\tif (c === ':') {\n\t\t\t\t\tif (fieldLength < 0) {\n\t\t\t\t\t\tfieldLength = i - pos;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '\\r') {\n\t\t\t\t\tdiscardTrailingNewline = true;\n\t\t\t\t\tlineLength = i - pos;\n\t\t\t\t} else if (c === '\\n') {\n\t\t\t\t\tlineLength = i - pos;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (lineLength < 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.parseEventStreamLine(pos, fieldLength, lineLength);\n\n\t\t\tpos += lineLength + 1;\n\t\t}\n\n\t\tif (pos === length) {\n\t\t\tthis.buf = '';\n\t\t} else if (pos > 0) {\n\t\t\tthis.buf = this.buf.slice(pos);\n\t\t}\n\t}\n\n\tparseEventStreamLine(pos, fieldLength, lineLength) {\n\t\tif (lineLength === 0) {\n\t\t\ttry {\n\t\t\t\tif (this.data.length > 0 && this.event) {\n\t\t\t\t\tconst event = JSON.parse(this.data);\n\t\t\t\t\tevent.name = this.eventName || '';\n\t\t\t\t\tthis.emitSafe('event', event);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t// do nothing if JSON.parse fails\n\t\t\t} finally {\n\t\t\t\tthis.data = '';\n\t\t\t\tthis.eventName = undefined;\n\t\t\t\tthis.event = false;\n\t\t\t}\n\t\t} else if (fieldLength > 0) {\n\t\t\tconst field = this.buf.slice(pos, pos + fieldLength);\n\t\t\tlet step = 0;\n\n\t\t\tif (this.buf[pos + fieldLength + 1] !== ' ') {\n\t\t\t\tstep = fieldLength + 1;\n\t\t\t} else {\n\t\t\t\tstep = fieldLength + 2;\n\t\t\t}\n\t\t\tpos += step;\n\t\t\tconst valueLength = lineLength - step;\n\t\t\tconst value = this.buf.slice(pos, pos + valueLength);\n\n\t\t\tif (field === 'data') {\n\t\t\t\tthis.data += value + '\\n';\n\t\t\t} else if (field === 'event') {\n\t\t\t\tthis.eventName = value;\n\t\t\t\tthis.event = true;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default EventStream;\n"]}
|
package/package.json
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "particle-api-js",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.2.0",
|
|
4
4
|
"description": "Particle API Client",
|
|
5
5
|
"main": "lib/Particle.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"babel-watch": "babel src -d lib --watch --source-maps",
|
|
8
8
|
"prepublish": "npm run lint && npm run compile",
|
|
9
9
|
"compile": "babel src -sd lib",
|
|
10
|
-
"test": "npm run lint && npm run test:
|
|
11
|
-
"test:
|
|
10
|
+
"test": "npm run lint && npm run test:unit",
|
|
11
|
+
"test:ci": "npm run lint && npm run test:unit -- --forbid-only && npm run coverage",
|
|
12
|
+
"test:unit": "mocha test/ -R spec --compilers js:babel-register",
|
|
13
|
+
"test:unit:silent": "npm run test:unit > tmp/test-unit-log.txt 2>&1",
|
|
12
14
|
"test:browser": "karma start --single-run",
|
|
13
|
-
"test:watch": "npm run test:
|
|
14
|
-
"
|
|
15
|
-
"coveralls": "istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec --compilers js:babel-register test/ && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage",
|
|
15
|
+
"test:watch": "npm run test:unit -- --watch",
|
|
16
|
+
"coverage": "nyc --reporter=text --include='src/**/*.js' --temp-dir=./tmp/ --check-coverage --lines 50 npm run test:unit:silent",
|
|
16
17
|
"lint": "eslint . --ext .js --format unix --ignore-path .gitignore --ignore-pattern \"dist/*\"",
|
|
17
18
|
"lint:fix": "npm run lint -- --fix",
|
|
18
19
|
"docs": "documentation build src/Particle.js --shallow -g -f md -o docs/api.md",
|
|
@@ -56,11 +57,9 @@
|
|
|
56
57
|
"browserify": "^13.0.0",
|
|
57
58
|
"chai": "^3.5.0",
|
|
58
59
|
"chai-as-promised": "^5.3.0",
|
|
59
|
-
"coveralls": "^2.11.4",
|
|
60
60
|
"documentation": "^4.0.0-rc.1",
|
|
61
61
|
"eslint": "^5.16.0",
|
|
62
62
|
"eslint-config-particle": "^2.2.1",
|
|
63
|
-
"istanbul": "1.0.0-alpha.2",
|
|
64
63
|
"karma": "^1.1.1",
|
|
65
64
|
"karma-browserify": "^5.1.0",
|
|
66
65
|
"karma-chai": "^0.1.0",
|
|
@@ -70,6 +69,7 @@
|
|
|
70
69
|
"karma-mocha": "^1.1.1",
|
|
71
70
|
"minifyify": "^7.3.1",
|
|
72
71
|
"mocha": "^2.5.1",
|
|
72
|
+
"nyc": "^15.1.0",
|
|
73
73
|
"should": "^9.0.0",
|
|
74
74
|
"sinon": "^7.2.5",
|
|
75
75
|
"sinon-as-promised": "^4.0.3",
|
|
@@ -79,12 +79,16 @@
|
|
|
79
79
|
"dependencies": {
|
|
80
80
|
"babel-runtime": "^6.9.2",
|
|
81
81
|
"form-data": ">2.2.0",
|
|
82
|
-
"stream-http": "
|
|
82
|
+
"stream-http": "^3.2.0",
|
|
83
83
|
"superagent": "^5.1.2",
|
|
84
84
|
"superagent-prefix": "0.0.2"
|
|
85
85
|
},
|
|
86
86
|
"browser": {
|
|
87
87
|
"http": "stream-http",
|
|
88
88
|
"https": "stream-http"
|
|
89
|
+
},
|
|
90
|
+
"engines": {
|
|
91
|
+
"node": ">=12.x",
|
|
92
|
+
"npm": "8.x"
|
|
89
93
|
}
|
|
90
94
|
}
|
package/test/Client.spec.js
CHANGED
|
@@ -56,8 +56,8 @@ describe('Client', () => {
|
|
|
56
56
|
|
|
57
57
|
describe('downloadFile', () => {
|
|
58
58
|
it('delegates to api', () => {
|
|
59
|
-
api.downloadFile = () => Promise.resolve(
|
|
60
|
-
return expect(client.downloadFile('
|
|
59
|
+
api.downloadFile = ({ uri }) => Promise.resolve(`${uri} delegated`);
|
|
60
|
+
return expect(client.downloadFile('uri')).to.eventually.equal('uri delegated');
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
|
package/test/EventStream.spec.js
CHANGED
package/.travis.yml
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
language: node_js
|
|
2
|
-
node_js:
|
|
3
|
-
- 6
|
|
4
|
-
- 8
|
|
5
|
-
- 10
|
|
6
|
-
cache:
|
|
7
|
-
directories:
|
|
8
|
-
- node_modules
|
|
9
|
-
sudo: false
|
|
10
|
-
services:
|
|
11
|
-
- xvfb
|
|
12
|
-
install:
|
|
13
|
-
- npm -g install npm@5.10
|
|
14
|
-
- npm install
|
|
15
|
-
- npm prune
|
|
16
|
-
script: "./travis_tests.sh"
|
|
17
|
-
after_success:
|
|
18
|
-
- npm run coveralls
|
|
19
|
-
jobs:
|
|
20
|
-
include:
|
|
21
|
-
- node_js: 8
|
|
22
|
-
env: TEST_SUITE=browser
|
|
23
|
-
- stage: npm release
|
|
24
|
-
script: echo "Publishing to npm..."
|
|
25
|
-
node_js: 8
|
|
26
|
-
if: tag =~ ^v\d+\.\d+\.\d+$
|
|
27
|
-
deploy:
|
|
28
|
-
provider: npm
|
|
29
|
-
email: engineering+npm@particle.io
|
|
30
|
-
api_key:
|
|
31
|
-
secure: JzhJNTYb5bZmETc+MN7ivqeXTSUPMJ+ImGtiSXMFPNGnZc8PSwp82Q9Yx+cvno/8sSGaisleIcWDJ/4d9Vq6fNVchftu2tjCIauRUaQUf07tvO2bXW9HWmTaYCpySmvHsZD+v3FFOPEyWwkHWBGO0pQnlWOlPeJrzrpyp006uoh7shefK147zKwwUmZKJC0/VDbGOyWXeDXe1C0AapwxFovTaINir4OROmPCrmUX0ZzWQqWn6edyYZHMDDLLrAIywqiuj1f7MU5M4y+0lILVm0SC79x7fIm6ZnIk+V1KxbNYN1zrKAFLkGSRpVXbNPUULT/jxVFn+ThcSNidQf3cI5kX6sXfQLN8ue7MfMAYCcL3JZ4W0LkrsYn4RqC5t8D4VATTqsNMUn+oUDzgDm8NL8hW+RaE9hLkXEGz9NjMpXie4JThcJt/To6NEGDMd0hvzBcvKTG34xgsitM1XBnOe6uk/L4lx058hRshnIxHkctyvVQ/dZfHrRfTz6CkfC3UhSaw7ufKxBCceDId/DM2WDL2eUyy+ruJTbWhjbJv/GUBhR69atYriEqGmRmZSiA5nvj2+vTT6yrD0RbHi/CqhiEMFcZf3DI+mIrjXjmbvdKdt0cDUHazxxGSmU3S0EV+Qdvbv1pZxU/049WAnJWiwxwXHdpl9T6jZLw2e8d/xYs=
|
|
32
|
-
skip_cleanup: true
|
|
33
|
-
on:
|
|
34
|
-
tags: true
|
package/travis_tests.sh
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Run different test suites on Travis depending on environment variables
|
|
3
|
-
set -ev
|
|
4
|
-
if [ "${TEST_SUITE}" = "browser" ]; then
|
|
5
|
-
# Load display for browser tests
|
|
6
|
-
export DISPLAY=:99.0
|
|
7
|
-
npm run build
|
|
8
|
-
npm run test:browser
|
|
9
|
-
else
|
|
10
|
-
npm run test
|
|
11
|
-
fi
|