{"version":3,"sources":["meteor://💻app/packages/socket-stream-client/server.js","meteor://💻app/packages/socket-stream-client/node.js","meteor://💻app/packages/socket-stream-client/common.js","meteor://💻app/packages/socket-stream-client/urls.js"],"names":["setMinimumBrowserVersions","module1","link","v","chrome","edge","firefox","ie","mobileSafari","phantomjs","safari","electron","module","id","export","ClientStream","Meteor","toWebsocketUrl","StreamClientCommon","constructor","endpoint","options","client","headers","npmFayeOptions","_initCommon","_launchConnection","send","data","currentStatus","connected","_changeUrl","url","_onConnect","Error","_forcedToDisconnect","close","_clearConnectionTimer","status","retryCount","statusChanged","forEachCallback","callback","_cleanup","maybeError","connectionTimer","clearTimeout","_getProxyUrl","targetUrl","proxy","process","env","HTTP_PROXY","http_proxy","noproxy","NO_PROXY","no_proxy","match","HTTPS_PROXY","https_proxy","indexOf","item","split","trim","replace","FayeWebSocket","Npm","require","deflate","fayeOptions","extensions","Object","assign","proxyUrl","origin","subprotocols","Client","setTimeout","_lostConnection","ConnectionError","CONNECT_TIMEOUT","on","bindEnvironment","clientOnIfCurrent","event","description","error","_dontPrintErrors","_debug","message","_objectSpread","default","Retry","forcedReconnectError","retry","name","eventCallbacks","push","cb","length","forEach","create","connectTimeoutMs","Package","tracker","statusListeners","Tracker","Dependency","changed","_retry","reconnect","_sockjsOptions","_force","clear","_retryNow","disconnect","_permanent","_error","reason","_retryLater","_online","timeout","retryLater","bind","retryTime","Date","getTime","depend","toSockjsUrl","translateUrl","newSchemeBase","subPath","startsWith","absoluteUrl","substr","ddpUrlMatch","httpUrlMatch","newScheme","urlAfterDDP","slashPos","host","rest","Math","floor","random","urlAfterHttp","_relativeToSiteRootUrl","endsWith"],"mappings":"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","file":"/packages/socket-stream-client.js","sourcesContent":["import {\n setMinimumBrowserVersions,\n} from \"meteor/modern-browsers\";\n\nsetMinimumBrowserVersions({\n chrome: 16,\n edge: 12,\n firefox: 11,\n ie: 10,\n mobileSafari: [6, 1],\n phantomjs: 2,\n safari: 7,\n electron: [0, 20],\n}, module.id);\n","import { Meteor } from \"meteor/meteor\";\nimport { toWebsocketUrl } from \"./urls.js\";\nimport { StreamClientCommon } from \"./common.js\";\n\n// @param endpoint {String} URL to Meteor app\n// \"http://subdomain.meteor.com/\" or \"/\" or\n// \"ddp+sockjs://foo-**.meteor.com/sockjs\"\n//\n// We do some rewriting of the URL to eventually make it \"ws://\" or \"wss://\",\n// whatever was passed in. At the very least, what Meteor.absoluteUrl() returns\n// us should work.\n//\n// We don't do any heartbeating. (The logic that did this in sockjs was removed,\n// because it used a built-in sockjs mechanism. We could do it with WebSocket\n// ping frames or with DDP-level messages.)\nexport class ClientStream extends StreamClientCommon {\n constructor(endpoint, options) {\n super(options);\n\n this.client = null; // created in _launchConnection\n this.endpoint = endpoint;\n\n this.headers = this.options.headers || {};\n this.npmFayeOptions = this.options.npmFayeOptions || {};\n\n this._initCommon(this.options);\n\n //// Kickoff!\n this._launchConnection();\n }\n\n // data is a utf8 string. Data sent while not connected is dropped on\n // the floor, and it is up the user of this API to retransmit lost\n // messages on 'reset'\n send(data) {\n if (this.currentStatus.connected) {\n this.client.send(data);\n }\n }\n\n // Changes where this connection points\n _changeUrl(url) {\n this.endpoint = url;\n }\n\n _onConnect(client) {\n if (client !== this.client) {\n // This connection is not from the last call to _launchConnection.\n // But _launchConnection calls _cleanup which closes previous connections.\n // It's our belief that this stifles future 'open' events, but maybe\n // we are wrong?\n throw new Error('Got open from inactive client ' + !!this.client);\n }\n\n if (this._forcedToDisconnect) {\n // We were asked to disconnect between trying to open the connection and\n // actually opening it. Let's just pretend this never happened.\n this.client.close();\n this.client = null;\n return;\n }\n\n if (this.currentStatus.connected) {\n // We already have a connection. It must have been the case that we\n // started two parallel connection attempts (because we wanted to\n // 'reconnect now' on a hanging connection and we had no way to cancel the\n // connection attempt.) But this shouldn't happen (similarly to the client\n // !== this.client check above).\n throw new Error('Two parallel connections?');\n }\n\n this._clearConnectionTimer();\n\n // update status\n this.currentStatus.status = 'connected';\n this.currentStatus.connected = true;\n this.currentStatus.retryCount = 0;\n this.statusChanged();\n\n // fire resets. This must come after status change so that clients\n // can call send from within a reset callback.\n this.forEachCallback('reset', callback => {\n callback();\n });\n }\n\n _cleanup(maybeError) {\n this._clearConnectionTimer();\n if (this.client) {\n var client = this.client;\n this.client = null;\n client.close();\n\n this.forEachCallback('disconnect', callback => {\n callback(maybeError);\n });\n }\n }\n\n _clearConnectionTimer() {\n if (this.connectionTimer) {\n clearTimeout(this.connectionTimer);\n this.connectionTimer = null;\n }\n }\n\n _getProxyUrl(targetUrl) {\n // Similar to code in tools/http-helpers.js.\n var proxy = process.env.HTTP_PROXY || process.env.http_proxy || null;\n var noproxy = process.env.NO_PROXY || process.env.no_proxy || null;\n // if we're going to a secure url, try the https_proxy env variable first.\n if (targetUrl.match(/^wss:/) || targetUrl.match(/^https:/)) {\n proxy = process.env.HTTPS_PROXY || process.env.https_proxy || proxy;\n }\n if (targetUrl.indexOf('localhost') != -1 || targetUrl.indexOf('127.0.0.1') != -1) {\n return null;\n }\n if (noproxy) {\n for (let item of noproxy.split(',')) {\n if (targetUrl.indexOf(item.trim().replace(/\\*/, '')) !== -1) {\n proxy = null;\n }\n }\n }\n return proxy;\n }\n\n _launchConnection() {\n this._cleanup(); // cleanup the old socket, if there was one.\n\n // Since server-to-server DDP is still an experimental feature, we only\n // require the module if we actually create a server-to-server\n // connection.\n var FayeWebSocket = Npm.require('faye-websocket');\n var deflate = Npm.require('permessage-deflate');\n\n var targetUrl = toWebsocketUrl(this.endpoint);\n var fayeOptions = {\n headers: this.headers,\n extensions: [deflate]\n };\n fayeOptions = Object.assign(fayeOptions, this.npmFayeOptions);\n var proxyUrl = this._getProxyUrl(targetUrl);\n if (proxyUrl) {\n fayeOptions.proxy = { origin: proxyUrl };\n }\n\n // We would like to specify 'ddp' as the subprotocol here. The npm module we\n // used to use as a client would fail the handshake if we ask for a\n // subprotocol and the server doesn't send one back (and sockjs doesn't).\n // Faye doesn't have that behavior; it's unclear from reading RFC 6455 if\n // Faye is erroneous or not. So for now, we don't specify protocols.\n var subprotocols = [];\n\n var client = (this.client = new FayeWebSocket.Client(\n targetUrl,\n subprotocols,\n fayeOptions\n ));\n\n this._clearConnectionTimer();\n this.connectionTimer = Meteor.setTimeout(() => {\n this._lostConnection(new this.ConnectionError('DDP connection timed out'));\n }, this.CONNECT_TIMEOUT);\n\n this.client.on(\n 'open',\n Meteor.bindEnvironment(() => {\n return this._onConnect(client);\n }, 'stream connect callback')\n );\n\n var clientOnIfCurrent = (event, description, callback) => {\n this.client.on(\n event,\n Meteor.bindEnvironment((...args) => {\n // Ignore events from any connection we've already cleaned up.\n if (client !== this.client) return;\n callback(...args);\n }, description)\n );\n };\n\n clientOnIfCurrent('error', 'stream error callback', error => {\n if (!this.options._dontPrintErrors)\n Meteor._debug('stream error', error.message);\n\n // Faye's 'error' object is not a JS error (and among other things,\n // doesn't stringify well). Convert it to one.\n this._lostConnection(new this.ConnectionError(error.message));\n });\n\n clientOnIfCurrent('close', 'stream close callback', () => {\n this._lostConnection();\n });\n\n clientOnIfCurrent('message', 'stream message callback', message => {\n // Ignore binary frames, where message.data is a Buffer\n if (typeof message.data !== 'string') return;\n\n this.forEachCallback('message', callback => {\n callback(message.data);\n });\n });\n }\n}\n","import { Retry } from 'meteor/retry';\n\nconst forcedReconnectError = new Error(\"forced reconnect\");\n\nexport class StreamClientCommon {\n constructor(options) {\n this.options = {\n retry: true,\n ...(options || null),\n };\n\n this.ConnectionError =\n options && options.ConnectionError || Error;\n }\n\n // Register for callbacks.\n on(name, callback) {\n if (name !== 'message' && name !== 'reset' && name !== 'disconnect')\n throw new Error('unknown event type: ' + name);\n\n if (!this.eventCallbacks[name]) this.eventCallbacks[name] = [];\n this.eventCallbacks[name].push(callback);\n }\n\n forEachCallback(name, cb) {\n if (!this.eventCallbacks[name] || !this.eventCallbacks[name].length) {\n return;\n }\n\n this.eventCallbacks[name].forEach(cb);\n }\n\n _initCommon(options) {\n options = options || Object.create(null);\n\n //// Constants\n\n // how long to wait until we declare the connection attempt\n // failed.\n this.CONNECT_TIMEOUT = options.connectTimeoutMs || 10000;\n\n this.eventCallbacks = Object.create(null); // name -> [callback]\n\n this._forcedToDisconnect = false;\n\n //// Reactive status\n this.currentStatus = {\n status: 'connecting',\n connected: false,\n retryCount: 0\n };\n\n if (Package.tracker) {\n this.statusListeners = new Package.tracker.Tracker.Dependency();\n }\n\n this.statusChanged = () => {\n if (this.statusListeners) {\n this.statusListeners.changed();\n }\n };\n\n //// Retry logic\n this._retry = new Retry();\n this.connectionTimer = null;\n }\n\n // Trigger a reconnect.\n reconnect(options) {\n options = options || Object.create(null);\n\n if (options.url) {\n this._changeUrl(options.url);\n }\n\n if (options._sockjsOptions) {\n this.options._sockjsOptions = options._sockjsOptions;\n }\n\n if (this.currentStatus.connected) {\n if (options._force || options.url) {\n this._lostConnection(forcedReconnectError);\n }\n return;\n }\n\n // if we're mid-connection, stop it.\n if (this.currentStatus.status === 'connecting') {\n // Pretend it's a clean close.\n this._lostConnection();\n }\n\n this._retry.clear();\n this.currentStatus.retryCount -= 1; // don't count manual retries\n this._retryNow();\n }\n\n disconnect(options) {\n options = options || Object.create(null);\n\n // Failed is permanent. If we're failed, don't let people go back\n // online by calling 'disconnect' then 'reconnect'.\n if (this._forcedToDisconnect) return;\n\n // If _permanent is set, permanently disconnect a stream. Once a stream\n // is forced to disconnect, it can never reconnect. This is for\n // error cases such as ddp version mismatch, where trying again\n // won't fix the problem.\n if (options._permanent) {\n this._forcedToDisconnect = true;\n }\n\n this._cleanup();\n this._retry.clear();\n\n this.currentStatus = {\n status: options._permanent ? 'failed' : 'offline',\n connected: false,\n retryCount: 0\n };\n\n if (options._permanent && options._error)\n this.currentStatus.reason = options._error;\n\n this.statusChanged();\n }\n\n // maybeError is set unless it's a clean protocol-level close.\n _lostConnection(maybeError) {\n this._cleanup(maybeError);\n this._retryLater(maybeError); // sets status. no need to do it here.\n }\n\n // fired when we detect that we've gone online. try to reconnect\n // immediately.\n _online() {\n // if we've requested to be offline by disconnecting, don't reconnect.\n if (this.currentStatus.status != 'offline') this.reconnect();\n }\n\n _retryLater(maybeError) {\n var timeout = 0;\n if (this.options.retry ||\n maybeError === forcedReconnectError) {\n timeout = this._retry.retryLater(\n this.currentStatus.retryCount,\n this._retryNow.bind(this)\n );\n this.currentStatus.status = 'waiting';\n this.currentStatus.retryTime = new Date().getTime() + timeout;\n } else {\n this.currentStatus.status = 'failed';\n delete this.currentStatus.retryTime;\n }\n\n this.currentStatus.connected = false;\n this.statusChanged();\n }\n\n _retryNow() {\n if (this._forcedToDisconnect) return;\n\n this.currentStatus.retryCount += 1;\n this.currentStatus.status = 'connecting';\n this.currentStatus.connected = false;\n delete this.currentStatus.retryTime;\n this.statusChanged();\n\n this._launchConnection();\n }\n\n // Get current status. Reactive.\n status() {\n if (this.statusListeners) {\n this.statusListeners.depend();\n }\n return this.currentStatus;\n }\n}\n","import { Meteor } from \"meteor/meteor\";\n\n// @param url {String} URL to Meteor app, eg:\n// \"/\" or \"madewith.meteor.com\" or \"https://foo.meteor.com\"\n// or \"ddp+sockjs://ddp--****-foo.meteor.com/sockjs\"\n// @returns {String} URL to the endpoint with the specific scheme and subPath, e.g.\n// for scheme \"http\" and subPath \"sockjs\"\n// \"http://subdomain.meteor.com/sockjs\" or \"/sockjs\"\n// or \"https://ddp--1234-foo.meteor.com/sockjs\"\nfunction translateUrl(url, newSchemeBase, subPath) {\n if (!newSchemeBase) {\n newSchemeBase = 'http';\n }\n\n if (subPath !== \"sockjs\" && url.startsWith(\"/\")) {\n url = Meteor.absoluteUrl(url.substr(1));\n }\n\n var ddpUrlMatch = url.match(/^ddp(i?)\\+sockjs:\\/\\//);\n var httpUrlMatch = url.match(/^http(s?):\\/\\//);\n var newScheme;\n if (ddpUrlMatch) {\n // Remove scheme and split off the host.\n var urlAfterDDP = url.substr(ddpUrlMatch[0].length);\n newScheme = ddpUrlMatch[1] === 'i' ? newSchemeBase : newSchemeBase + 's';\n var slashPos = urlAfterDDP.indexOf('/');\n var host = slashPos === -1 ? urlAfterDDP : urlAfterDDP.substr(0, slashPos);\n var rest = slashPos === -1 ? '' : urlAfterDDP.substr(slashPos);\n\n // In the host (ONLY!), change '*' characters into random digits. This\n // allows different stream connections to connect to different hostnames\n // and avoid browser per-hostname connection limits.\n host = host.replace(/\\*/g, () => Math.floor(Math.random() * 10));\n\n return newScheme + '://' + host + rest;\n } else if (httpUrlMatch) {\n newScheme = !httpUrlMatch[1] ? newSchemeBase : newSchemeBase + 's';\n var urlAfterHttp = url.substr(httpUrlMatch[0].length);\n url = newScheme + '://' + urlAfterHttp;\n }\n\n // Prefix FQDNs but not relative URLs\n if (url.indexOf('://') === -1 && !url.startsWith('/')) {\n url = newSchemeBase + '://' + url;\n }\n\n // XXX This is not what we should be doing: if I have a site\n // deployed at \"/foo\", then DDP.connect(\"/\") should actually connect\n // to \"/\", not to \"/foo\". \"/\" is an absolute path. (Contrast: if\n // deployed at \"/foo\", it would be reasonable for DDP.connect(\"bar\")\n // to connect to \"/foo/bar\").\n //\n // We should make this properly honor absolute paths rather than\n // forcing the path to be relative to the site root. Simultaneously,\n // we should set DDP_DEFAULT_CONNECTION_URL to include the site\n // root. See also client_convenience.js #RationalizingRelativeDDPURLs\n url = Meteor._relativeToSiteRootUrl(url);\n\n if (url.endsWith('/')) return url + subPath;\n else return url + '/' + subPath;\n}\n\nexport function toSockjsUrl(url) {\n return translateUrl(url, 'http', 'sockjs');\n}\n\nexport function toWebsocketUrl(url) {\n return translateUrl(url, 'ws', 'websocket');\n}\n"]}