particle-api-js 9.1.0 → 9.1.1
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/CHANGELOG.md +3 -0
- package/dist/particle.min.js +85 -88
- package/dist/particle.min.js.map +1 -1
- package/docs/api.md +102 -102
- package/lib/EventStream.js +0 -1
- package/lib/EventStream.js.map +1 -1
- package/package.json +2 -4
- package/test/EventStream.spec.js +0 -1
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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "particle-api-js",
|
|
3
|
-
"version": "9.1.
|
|
3
|
+
"version": "9.1.1",
|
|
4
4
|
"description": "Particle API Client",
|
|
5
5
|
"main": "lib/Particle.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
"test:browser": "karma start --single-run",
|
|
13
13
|
"test:watch": "npm run test:node -- --watch",
|
|
14
14
|
"cover": "istanbul cover ./node_modules/.bin/_mocha test/ -- -R spec --compilers js:babel-register",
|
|
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",
|
|
16
15
|
"lint": "eslint . --ext .js --format unix --ignore-path .gitignore --ignore-pattern \"dist/*\"",
|
|
17
16
|
"lint:fix": "npm run lint -- --fix",
|
|
18
17
|
"docs": "documentation build src/Particle.js --shallow -g -f md -o docs/api.md",
|
|
@@ -56,7 +55,6 @@
|
|
|
56
55
|
"browserify": "^13.0.0",
|
|
57
56
|
"chai": "^3.5.0",
|
|
58
57
|
"chai-as-promised": "^5.3.0",
|
|
59
|
-
"coveralls": "^2.11.4",
|
|
60
58
|
"documentation": "^4.0.0-rc.1",
|
|
61
59
|
"eslint": "^5.16.0",
|
|
62
60
|
"eslint-config-particle": "^2.2.1",
|
|
@@ -79,7 +77,7 @@
|
|
|
79
77
|
"dependencies": {
|
|
80
78
|
"babel-runtime": "^6.9.2",
|
|
81
79
|
"form-data": ">2.2.0",
|
|
82
|
-
"stream-http": "
|
|
80
|
+
"stream-http": "^3.2.0",
|
|
83
81
|
"superagent": "^5.1.2",
|
|
84
82
|
"superagent-prefix": "0.0.2"
|
|
85
83
|
},
|