{"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":["module1","module","setMinimumBrowserVersions","link","v","chrome","edge","firefox","ie","mobileSafari","phantomjs","safari","electron","id","export","ClientStream","Meteor","toWebsocketUrl","StreamClientCommon","constructor","endpoint","options","client","headers","Object","create","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","match","HTTPS_PROXY","https_proxy","FayeWebSocket","Npm","require","deflate","fayeOptions","extensions","assign","proxyUrl","origin","subprotocols","Client","setTimeout","_lostConnection","ConnectionError","CONNECT_TIMEOUT","on","bindEnvironment","clientOnIfCurrent","event","description","args","error","_dontPrintErrors","_debug","message","Retry","forcedReconnectError","retry","name","eventCallbacks","push","cb","length","forEach","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","indexOf","host","rest","replace","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 || Object.create(null);\n this.npmFayeOptions = this.options.npmFayeOptions || Object.create(null);\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 // if we're going to a secure url, try the https_proxy env variable first.\n if (targetUrl.match(/^wss:/)) {\n proxy = process.env.HTTPS_PROXY || process.env.https_proxy || proxy;\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","// @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"]}