{"version":3,"sources":["webpack://Pusher/webpack/universalModuleDefinition","webpack://Pusher/webpack/bootstrap","webpack://Pusher/./node_modules/@stablelib/base64/base64.ts","webpack://Pusher/./node_modules/@stablelib/utf8/utf8.ts","webpack://Pusher/./src/core/pusher.js","webpack://Pusher/./src/runtimes/web/dom/script_receiver_factory.ts","webpack://Pusher/./src/core/defaults.ts","webpack://Pusher/./src/runtimes/web/dom/dependency_loader.ts","webpack://Pusher/./src/runtimes/web/dom/dependencies.ts","webpack://Pusher/./src/core/utils/url_store.ts","webpack://Pusher/./src/core/auth/options.ts","webpack://Pusher/./src/core/errors.ts","webpack://Pusher/./src/runtimes/isomorphic/auth/xhr_auth.ts","webpack://Pusher/./src/core/base64.ts","webpack://Pusher/./src/core/utils/timers/abstract_timer.ts","webpack://Pusher/./src/core/utils/timers/index.ts","webpack://Pusher/./src/core/util.ts","webpack://Pusher/./src/core/utils/collections.ts","webpack://Pusher/./src/core/logger.ts","webpack://Pusher/./src/runtimes/web/auth/jsonp_auth.ts","webpack://Pusher/./src/runtimes/web/dom/script_request.ts","webpack://Pusher/./src/runtimes/web/dom/jsonp_request.ts","webpack://Pusher/./src/runtimes/web/timeline/jsonp_timeline.ts","webpack://Pusher/./src/core/transports/url_schemes.ts","webpack://Pusher/./src/core/events/callback_registry.ts","webpack://Pusher/./src/core/events/dispatcher.ts","webpack://Pusher/./src/core/transports/transport_connection.ts","webpack://Pusher/./src/core/transports/transport.ts","webpack://Pusher/./src/runtimes/isomorphic/transports/transports.ts","webpack://Pusher/./src/runtimes/web/transports/transports.ts","webpack://Pusher/./src/runtimes/web/net_info.ts","webpack://Pusher/./src/core/transports/assistant_to_the_transport_manager.ts","webpack://Pusher/./src/core/connection/protocol/protocol.ts","webpack://Pusher/./src/core/connection/connection.ts","webpack://Pusher/./src/core/connection/handshake/index.ts","webpack://Pusher/./src/core/timeline/timeline_sender.ts","webpack://Pusher/./src/core/channels/channel.ts","webpack://Pusher/./src/core/channels/private_channel.ts","webpack://Pusher/./src/core/channels/members.ts","webpack://Pusher/./src/core/channels/presence_channel.ts","webpack://Pusher/./src/core/channels/encrypted_channel.ts","webpack://Pusher/./src/core/connection/connection_manager.ts","webpack://Pusher/./src/core/channels/channels.ts","webpack://Pusher/./src/core/utils/factory.ts","webpack://Pusher/./src/core/transports/transport_manager.ts","webpack://Pusher/./src/core/strategies/sequential_strategy.ts","webpack://Pusher/./src/core/strategies/best_connected_ever_strategy.ts","webpack://Pusher/./src/core/strategies/websocket_prioritized_cached_strategy.ts","webpack://Pusher/./src/core/strategies/delayed_strategy.ts","webpack://Pusher/./src/core/strategies/if_strategy.ts","webpack://Pusher/./src/core/strategies/first_connected_strategy.ts","webpack://Pusher/./src/runtimes/web/default_strategy.ts","webpack://Pusher/./src/runtimes/web/transports/transport_connection_initializer.ts","webpack://Pusher/./src/runtimes/web/http/http_xdomain_request.ts","webpack://Pusher/./src/core/http/http_request.ts","webpack://Pusher/./src/core/http/state.ts","webpack://Pusher/./src/core/http/http_socket.ts","webpack://Pusher/./src/core/http/http_streaming_socket.ts","webpack://Pusher/./src/core/http/http_polling_socket.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http_xhr_request.ts","webpack://Pusher/./src/runtimes/isomorphic/http/http.ts","webpack://Pusher/./src/runtimes/web/http/http.ts","webpack://Pusher/./src/runtimes/web/runtime.ts","webpack://Pusher/./src/core/timeline/level.ts","webpack://Pusher/./src/core/timeline/timeline.ts","webpack://Pusher/./src/core/strategies/transport_strategy.ts","webpack://Pusher/./src/core/strategies/strategy_builder.ts","webpack://Pusher/./src/core/options.ts","webpack://Pusher/./src/core/auth/user_authenticator.ts","webpack://Pusher/./src/core/auth/channel_authorizer.ts","webpack://Pusher/./src/core/auth/deprecated_channel_authorizer.ts","webpack://Pusher/./src/core/config.ts","webpack://Pusher/./src/core/watchlist.ts","webpack://Pusher/./src/core/utils/flat_promise.ts","webpack://Pusher/./src/core/user.ts","webpack://Pusher/./src/core/pusher.ts"],"names":[],"mappings":"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","file":"pusher.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nconst INVALID_BYTE = 256;\n\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nexport class Coder {\n // TODO(dchest): methods to encode chunk-by-chunk.\n\n constructor(private _paddingCharacter = \"=\") { }\n\n encodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n }\n\n encode(data: Uint8Array): string {\n let out = \"\";\n\n let i = 0;\n for (; i < data.length - 2; i += 3) {\n let c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n\n const left = data.length - i;\n if (left > 0) {\n let c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n } else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n\n return out;\n }\n\n maxDecodedLength(length: number): number {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n }\n\n decodedLength(s: string): number {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n }\n\n decode(s: string): Uint8Array {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n const paddingLength = this._getPaddingLength(s);\n const length = s.length - paddingLength;\n const out = new Uint8Array(this.maxDecodedLength(length));\n let op = 0;\n let i = 0;\n let haveBad = 0;\n let v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n }\n\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n\n // Encode 6 bits in b into a new character.\n protected _encodeByte(b: number): string {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n\n return String.fromCharCode(result);\n }\n\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n protected _decodeChar(c: number): number {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n let result = INVALID_BYTE; // start with invalid character\n\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n\n private _getPaddingLength(s: string): number {\n let paddingLength = 0;\n if (this._paddingCharacter) {\n for (let i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n }\n\n}\n\nconst stdCoder = new Coder();\n\nexport function encode(data: Uint8Array): string {\n return stdCoder.encode(data);\n}\n\nexport function decode(s: string): Uint8Array {\n return stdCoder.decode(s);\n}\n\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nexport class URLSafeCoder extends Coder {\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n\n protected _encodeByte(b: number): string {\n let result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n\n return String.fromCharCode(result);\n }\n\n protected _decodeChar(c: number): number {\n let result = INVALID_BYTE;\n\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n\n return result;\n }\n}\n\nconst urlSafeCoder = new URLSafeCoder();\n\nexport function encodeURLSafe(data: Uint8Array): string {\n return urlSafeCoder.encode(data);\n}\n\nexport function decodeURLSafe(s: string): Uint8Array {\n return urlSafeCoder.decode(s);\n}\n\n\nexport const encodedLength = (length: number) =>\n stdCoder.encodedLength(length);\n\nexport const maxDecodedLength = (length: number) =>\n stdCoder.maxDecodedLength(length);\n\nexport const decodedLength = (s: string) =>\n stdCoder.decodedLength(s);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\n\nconst INVALID_UTF16 = \"utf8: invalid string\";\nconst INVALID_UTF8 = \"utf8: invalid source encoding\";\n\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encode(s: string): Uint8Array {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n const arr = new Uint8Array(encodedLength(s));\n\n let pos = 0;\n for (let i = 0; i < s.length; i++) {\n let c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n } else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n } else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n } else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nexport function encodedLength(s: string): number {\n let result = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n } else if (c < 0x800) {\n result += 2;\n } else if (c < 0xd800) {\n result += 3;\n } else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n } else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nexport function decode(arr: Uint8Array): string {\n const chars: string[] = [];\n for (let i = 0; i < arr.length; i++) {\n let b = arr[i];\n\n if (b & 0x80) {\n let min;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n } else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n } else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n const n1 = arr[++i];\n const n2 = arr[++i];\n const n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n } else {\n throw new Error(INVALID_UTF8);\n }\n\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\n","// required so we don't have to do require('pusher').default etc.\nmodule.exports = require('./pusher').default;\n","import ScriptReceiver from './script_receiver';\n\n/** Builds receivers for JSONP and Script requests.\n *\n * Each receiver is an object with following fields:\n * - number - unique (for the factory instance), numerical id of the receiver\n * - id - a string ID that can be used in DOM attributes\n * - name - name of the function triggering the receiver\n * - callback - callback function\n *\n * Receivers are triggered only once, on the first callback call.\n *\n * Receivers can be called by their name or by accessing factory object\n * by the number key.\n *\n * @param {String} prefix the prefix used in ids\n * @param {String} name the name of the object\n */\nexport class ScriptReceiverFactory {\n lastId: number;\n prefix: string;\n name: string;\n\n constructor(prefix: string, name: string) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n\n create(callback: Function): ScriptReceiver {\n this.lastId++;\n\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n\n var called = false;\n var callbackWrapper = function() {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n\n remove(receiver: ScriptReceiver) {\n delete this[receiver.number];\n }\n}\n\nexport var ScriptReceivers = new ScriptReceiverFactory(\n '_pusher_script_',\n 'Pusher.ScriptReceivers'\n);\n","import {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport { AuthTransport } from './config';\n\nexport interface DefaultConfig {\n VERSION: string;\n PROTOCOL: number;\n wsPort: number;\n wssPort: number;\n wsPath: string;\n httpHost: string;\n httpPort: number;\n httpsPort: number;\n httpPath: string;\n stats_host: string;\n authEndpoint: string;\n authTransport: AuthTransport;\n activityTimeout: number;\n pongTimeout: number;\n unavailableTimeout: number;\n userAuthentication: UserAuthenticationOptions;\n channelAuthorization: ChannelAuthorizationOptions;\n\n cdn_http?: string;\n cdn_https?: string;\n dependency_suffix?: string;\n}\n\nvar Defaults: DefaultConfig = {\n VERSION: VERSION,\n PROTOCOL: 7,\n\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n // DEPRECATED: SockJS fallback parameters\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n // DEPRECATED: Stats\n stats_host: 'stats.pusher.com',\n // DEPRECATED: Other settings\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax'\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax'\n },\n\n // CDN configuration\n cdn_http: CDN_HTTP,\n cdn_https: CDN_HTTPS,\n dependency_suffix: DEPENDENCY_SUFFIX\n};\n\nexport default Defaults;\n","import {\n ScriptReceivers,\n ScriptReceiverFactory\n} from './script_receiver_factory';\nimport Runtime from 'runtime';\nimport ScriptRequest from './script_request';\n\n/** Handles loading dependency files.\n *\n * Dependency loaders don't remember whether a resource has been loaded or\n * not. It is caller's responsibility to make sure the resource is not loaded\n * twice. This is because it's impossible to detect resource loading status\n * without knowing its content.\n *\n * Options:\n * - cdn_http - url to HTTP CND\n * - cdn_https - url to HTTPS CDN\n * - version - version of pusher-js\n * - suffix - suffix appended to all names of dependency files\n *\n * @param {Object} options\n */\nexport default class DependencyLoader {\n options: any;\n receivers: ScriptReceiverFactory;\n loading: any;\n\n constructor(options: any) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n\n /** Loads the dependency from CDN.\n *\n * @param {String} name\n * @param {Function} callback\n */\n load(name: string, options: any, callback: Function) {\n var self = this;\n\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n } else {\n self.loading[name] = [callback];\n\n var request = Runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function(error) {\n self.receivers.remove(receiver);\n\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n\n var successCallback = function(wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n\n /** Returns a root URL for pusher-js CDN.\n *\n * @returns {String}\n */\n getRoot(options: any): string {\n var cdn;\n var protocol = Runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n } else {\n cdn = this.options.cdn_http;\n }\n // make sure there are no double slashes\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n\n /** Returns a full path to a dependency file.\n *\n * @param {String} name\n * @returns {String}\n */\n getPath(name: string, options: any): string {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n","import { ScriptReceiverFactory } from './script_receiver_factory';\nimport Defaults from 'core/defaults';\nimport DependencyLoader from './dependency_loader';\n\nexport var DependenciesReceivers = new ScriptReceiverFactory(\n '_pusher_dependencies',\n 'Pusher.DependenciesReceivers'\n);\n\nexport var Dependencies = new DependencyLoader({\n cdn_http: Defaults.cdn_http,\n cdn_https: Defaults.cdn_https,\n version: Defaults.VERSION,\n suffix: Defaults.dependency_suffix,\n receivers: DependenciesReceivers\n});\n","/**\n * A place to store help URLs for error messages etc\n */\n\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users'\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/'\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start'\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events'\n },\n encryptedChannelSupport: {\n fullUrl:\n 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support'\n }\n }\n};\n\n/** Builds a consistent string with links to pusher documentation\n *\n * @param {string} key - relevant key in the url_store.urls object\n * @return {string} suffix string to append to log message\n */\nconst buildLogSuffix = function(key: string): string {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj) return '';\n\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n } else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n\n if (!url) return '';\n return `${urlPrefix} ${url}`;\n};\n\nexport default { buildLogSuffix };\n","export enum AuthRequestType {\n UserAuthentication = 'user-authentication',\n ChannelAuthorization = 'channel-authorization'\n}\n\nexport interface ChannelAuthorizationData {\n auth: string;\n channel_data?: string;\n shared_secret?: string;\n}\n\nexport type ChannelAuthorizationCallback = (\n error: Error | null,\n authData: ChannelAuthorizationData | null\n) => void;\n\nexport interface ChannelAuthorizationRequestParams {\n socketId: string;\n channelName: string;\n}\n\nexport interface ChannelAuthorizationHandler {\n (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ): void;\n}\n\nexport interface UserAuthenticationData {\n auth: string;\n user_data: string;\n}\n\nexport type UserAuthenticationCallback = (\n error: Error | null,\n authData: UserAuthenticationData | null\n) => void;\n\nexport interface UserAuthenticationRequestParams {\n socketId: string;\n}\n\nexport interface UserAuthenticationHandler {\n (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ): void;\n}\n\nexport type AuthTransportCallback =\n | ChannelAuthorizationCallback\n | UserAuthenticationCallback;\n\nexport interface AuthOptionsT {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n customHandler?: AuthHandler;\n}\n\nexport declare type UserAuthenticationOptions = AuthOptionsT<\n UserAuthenticationHandler\n>;\nexport declare type ChannelAuthorizationOptions = AuthOptionsT<\n ChannelAuthorizationHandler\n>;\n\nexport interface InternalAuthOptions {\n transport: 'ajax' | 'jsonp';\n endpoint: string;\n params?: any;\n headers?: any;\n paramsProvider?: () => any;\n headersProvider?: () => any;\n}\n","/** Error classes used throughout the library. */\n// https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nexport class BadEventName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class BadChannelName extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class RequestTimedOut extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportPriorityTooLow extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class TransportClosed extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedFeature extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedTransport extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class UnsupportedStrategy extends Error {\n constructor(msg?: string) {\n super(msg);\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nexport class HTTPAuthError extends Error {\n status: number;\n constructor(status: number, msg?: string) {\n super(msg);\n this.status = status;\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport AbstractRuntime from 'runtimes/interface';\nimport UrlStore from 'core/utils/url_store';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\nimport { HTTPAuthError } from 'core/errors';\n\nconst ajax: AuthTransport = function(\n context: AbstractRuntime,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n const xhr = Runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n\n // add request headers\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n } catch (e) {\n callback(\n new HTTPAuthError(\n 200,\n `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${\n xhr.responseText\n }`\n ),\n null\n );\n }\n\n if (parsed) {\n // prevents double execution.\n callback(null, data);\n }\n } else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = UrlStore.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${UrlStore.buildLogSuffix(\n 'authorizationEndpoint'\n )}`;\n break;\n }\n callback(\n new HTTPAuthError(\n xhr.status,\n `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`\n ),\n null\n );\n }\n }\n };\n\n xhr.send(query);\n return xhr;\n};\n\nexport default ajax;\n","export default function encode(s: any): string {\n return btoa(utob(s));\n}\n\nvar fromCharCode = String.fromCharCode;\n\nvar b64chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\n\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\n\nvar cb_utob = function(c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\n\nvar utob = function(u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\n\nvar cb_encode = function(ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord =\n (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63)\n ];\n return chars.join('');\n};\n\nvar btoa =\n global.btoa ||\n function(b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n","import TimedCallback from './timed_callback';\nimport { Delay, Scheduler, Canceller } from './scheduling';\n\nabstract class Timer {\n protected clear: Canceller;\n protected timer: number | void;\n\n constructor(\n set: Scheduler,\n clear: Canceller,\n delay: Delay,\n callback: TimedCallback\n ) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n\n /** Returns whether the timer is still running.\n *\n * @return {Boolean}\n */\n isRunning(): boolean {\n return this.timer !== null;\n }\n\n /** Aborts a timer when it's running. */\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n\nexport default Timer;\n","import Timer from './abstract_timer';\nimport TimedCallback from './timed_callback';\nimport { Delay } from './scheduling';\n\n// We need to bind clear functions this way to avoid exceptions on IE8\nfunction clearTimeout(timer) {\n global.clearTimeout(timer);\n}\nfunction clearInterval(timer) {\n global.clearInterval(timer);\n}\n\n/** Cross-browser compatible one-off timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class OneOffTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setTimeout, clearTimeout, delay, function(timer) {\n callback();\n return null;\n });\n }\n}\n\n/** Cross-browser compatible periodic timer abstraction.\n *\n * @param {Number} delay\n * @param {Function} callback\n */\nexport class PeriodicTimer extends Timer {\n constructor(delay: Delay, callback: TimedCallback) {\n super(setInterval, clearInterval, delay, function(timer) {\n callback();\n return timer;\n });\n }\n}\n","import * as Collections from './utils/collections';\nimport TimedCallback from './utils/timers/timed_callback';\nimport { OneOffTimer, PeriodicTimer } from './utils/timers';\n\nvar Util = {\n now(): number {\n if (Date.now) {\n return Date.now();\n } else {\n return new Date().valueOf();\n }\n },\n\n defer(callback: TimedCallback): OneOffTimer {\n return new OneOffTimer(0, callback);\n },\n\n /** Builds a function that will proxy a method call to its first argument.\n *\n * Allows partial application of arguments, so additional arguments are\n * prepended to the argument list.\n *\n * @param {String} name method name\n * @return {Function} proxy function\n */\n method(name: string, ...args: any[]): Function {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function(object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n }\n};\n\nexport default Util;\n","import base64encode from '../base64';\nimport Util from '../util';\n\n/** Merges multiple objects into the target argument.\n *\n * For properties that are plain Objects, performs a deep-merge. For the\n * rest it just copies the value of the property.\n *\n * To extend prototypes use it as following:\n * Pusher.Util.extend(Target.prototype, Base.prototype)\n *\n * You can also use it to merge objects without altering them:\n * Pusher.Util.extend({}, object1, object2)\n *\n * @param {Object} target\n * @return {Object} the target argument\n */\nexport function extend(target: any, ...sources: any[]): T {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (\n extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object\n ) {\n target[property] = extend(target[property] || {}, extensions[property]);\n } else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\n\nexport function stringify(): string {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n } else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\n\nexport function arrayIndexOf(array: any[], item: any): number {\n // MSIE doesn't have array.indexOf\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\n\n/** Applies a function f to all properties of an object.\n *\n * Function f gets 3 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function objectApply(object: any, f: Function) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\n\n/** Return a list of objects own proerty keys\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function keys(object: any): string[] {\n var keys = [];\n objectApply(object, function(_, key) {\n keys.push(key);\n });\n return keys;\n}\n\n/** Return a list of object's own property values\n *\n * @param {Object} object\n * @returns {Array}\n */\nexport function values(object: any): any[] {\n var values = [];\n objectApply(object, function(value) {\n values.push(value);\n });\n return values;\n}\n\n/** Applies a function f to all elements of an array.\n *\n * Function f gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function apply(array: any[], f: Function, context?: any) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || global, array[i], i, array);\n }\n}\n\n/** Maps all elements of the array and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function map(array: any[], f: Function): any[] {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\n\n/** Maps all elements of the object and returns the result.\n *\n * Function f gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function mapObject(object: any, f: Function): any {\n var result = {};\n objectApply(object, function(value, key) {\n result[key] = f(value);\n });\n return result;\n}\n\n/** Filters elements of the array using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n * - reference to the destination array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function filter(array: any[], test: Function): any[] {\n test =\n test ||\n function(value) {\n return !!value;\n };\n\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\n\n/** Filters properties of the object using a test function.\n *\n * Function test gets 4 arguments passed:\n * - element from the object\n * - key of the element\n * - reference to the source object\n * - reference to the destination object\n *\n * @param {Object} object\n * @param {Function} f\n */\nexport function filterObject(object: Object, test: Function) {\n var result = {};\n objectApply(object, function(value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\n\n/** Flattens an object into a two-dimensional array.\n *\n * @param {Object} object\n * @return {Array} resulting array of [key, value] pairs\n */\nexport function flatten(object: Object): any[] {\n var result = [];\n objectApply(object, function(value, key) {\n result.push([key, value]);\n });\n return result;\n}\n\n/** Checks whether any element of the array passes the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function any(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\n\n/** Checks whether all elements of the array pass the test.\n *\n * Function test gets 3 arguments passed:\n * - element from the array\n * - index of the element\n * - reference to the source array\n *\n * @param {Array} array\n * @param {Function} f\n */\nexport function all(array: any[], test: Function): boolean {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport function encodeParamsObject(data): string {\n return mapObject(data, function(value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(base64encode(value.toString()));\n });\n}\n\nexport function buildQueryString(data: any): string {\n var params = filterObject(data, function(value) {\n return value !== undefined;\n });\n\n var query = map(\n flatten(encodeParamsObject(params)),\n Util.method('join', '=')\n ).join('&');\n\n return query;\n}\n\n/**\n * See https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n *\n * Remove circular references from an object. Required for JSON.stringify in\n * React Native, which tends to blow up a lot.\n *\n * @param {any} object\n * @return {any} Decycled object\n */\nexport function decycleObject(object: any): any {\n var objects = [],\n paths = [];\n\n return (function derez(value, path) {\n var i, name, nu;\n\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n\n objects.push(value);\n paths.push(path);\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n } else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(\n value[name],\n path + '[' + JSON.stringify(name) + ']'\n );\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\n\n/**\n * Provides a cross-browser and cross-platform way to safely stringify objects\n * into JSON. This is particularly necessary for ReactNative, where circular JSON\n * structures throw an exception.\n *\n * @param {any} source The object to stringify\n * @return {string} The serialized output.\n */\nexport function safeJSONStringify(source: any): string {\n try {\n return JSON.stringify(source);\n } catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n","import { stringify } from './utils/collections';\nimport Pusher from './pusher';\n\nclass Logger {\n debug(...args: any[]) {\n this.log(this.globalLog, args);\n }\n\n warn(...args: any[]) {\n this.log(this.globalLogWarn, args);\n }\n\n error(...args: any[]) {\n this.log(this.globalLogError, args);\n }\n\n private globalLog = (message: string) => {\n if (global.console && global.console.log) {\n global.console.log(message);\n }\n };\n\n private globalLogWarn(message: string) {\n if (global.console && global.console.warn) {\n global.console.warn(message);\n } else {\n this.globalLog(message);\n }\n }\n\n private globalLogError(message: string) {\n if (global.console && global.console.error) {\n global.console.error(message);\n } else {\n this.globalLogWarn(message);\n }\n }\n\n private log(\n defaultLoggingFunction: (message: string) => void,\n ...args: any[]\n ) {\n var message = stringify.apply(this, arguments);\n if (Pusher.log) {\n Pusher.log(message);\n } else if (Pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n\nexport default new Logger();\n","import Browser from '../browser';\nimport Logger from 'core/logger';\nimport JSONPRequest from '../dom/jsonp_request';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport {\n AuthRequestType,\n AuthTransportCallback,\n InternalAuthOptions\n} from 'core/auth/options';\n\nvar jsonp: AuthTransport = function(\n context: Browser,\n query: string,\n authOptions: InternalAuthOptions,\n authRequestType: AuthRequestType,\n callback: AuthTransportCallback\n) {\n if (\n authOptions.headers !== undefined ||\n authOptions.headersProvider != null\n ) {\n Logger.warn(\n `To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`\n );\n }\n\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n\n var document = context.getDocument();\n var script = document.createElement('script');\n // Hacked wrapper.\n context.auth_callbacks[callbackName] = function(data) {\n callback(null, data);\n };\n\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n\n var head =\n document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n\nexport default jsonp;\n","import ScriptReceiver from './script_receiver';\n\n/** Sends a generic HTTP GET request using a script tag.\n *\n * By constructing URL in a specific way, it can be used for loading\n * JavaScript resources or JSONP requests. It can notify about errors, but\n * only in certain environments. Please take care of monitoring the state of\n * the request yourself.\n *\n * @param {String} src\n */\nexport default class ScriptRequest {\n src: string;\n script: any;\n errorScript: any;\n\n constructor(src: string) {\n this.src = src;\n }\n\n send(receiver: ScriptReceiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n\n if (self.script.addEventListener) {\n self.script.onerror = function() {\n receiver.callback(errorString);\n };\n self.script.onload = function() {\n receiver.callback(null);\n };\n } else {\n self.script.onreadystatechange = function() {\n if (\n self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete'\n ) {\n receiver.callback(null);\n }\n };\n }\n\n // Opera<11.6 hack for missing onerror callback\n if (\n self.script.async === undefined &&\n (document).attachEvent &&\n /opera/i.test(navigator.userAgent)\n ) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n } else {\n self.script.async = true;\n }\n\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n\n /** Cleans up the DOM remains of the script request. */\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n","import ScriptReceiver from './script_receiver';\nimport ScriptRequest from './script_request';\nimport * as Collections from 'core/utils/collections';\nimport Util from 'core/util';\nimport Runtime from '../runtime';\n\n/** Sends data via JSONP.\n *\n * Data is a key-value map. Its values are JSON-encoded and then passed\n * through base64. Finally, keys and encoded values are appended to the query\n * string.\n *\n * The class itself does not guarantee raising errors on failures, as it's not\n * possible to support such feature on all browsers. Instead, JSONP endpoint\n * should call back in a way that's easy to distinguish from browser calls,\n * for example by passing a second argument to the receiver.\n *\n * @param {String} url\n * @param {Object} data key-value map of data to be submitted\n */\nexport default class JSONPRequest {\n url: string;\n data: any;\n request: ScriptRequest;\n\n constructor(url: string, data: any) {\n this.url = url;\n this.data = data;\n }\n\n /** Sends the actual JSONP request.\n *\n * @param {ScriptReceiver} receiver\n */\n send(receiver: ScriptReceiver) {\n if (this.request) {\n return;\n }\n\n var query = Collections.buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = Runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n\n /** Cleans up the DOM remains of the JSONP request. */\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n","import TimelineSender from 'core/timeline/timeline_sender';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport Browser from 'runtime';\nimport { AuthTransport } from 'core/auth/auth_transports';\nimport { ScriptReceivers } from '../dom/script_receiver_factory';\n\nvar getAgent = function(sender: TimelineSender, useTLS: boolean) {\n return function(data: any, callback: Function) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url =\n scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = Browser.createJSONPRequest(url, data);\n\n var receiver = Browser.ScriptReceivers.create(function(error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\n\nvar jsonp = {\n name: 'jsonp',\n getAgent\n};\n\nexport default jsonp;\n","import Defaults from '../defaults';\nimport { default as URLScheme, URLSchemeParams } from './url_scheme';\n\nfunction getGenericURL(\n baseScheme: string,\n params: URLSchemeParams,\n path: string\n): string {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\n\nfunction getGenericPath(key: string, queryString?: string): string {\n var path = '/app/' + key;\n var query =\n '?protocol=' +\n Defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n Defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\n\nexport var ws: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n }\n};\n\nexport var http: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n }\n};\n\nexport var sockjs: URLScheme = {\n getInitial: function(key: string, params: URLSchemeParams): string {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function(key: string, params: URLSchemeParams): string {\n return getGenericPath(key);\n }\n};\n","import Callback from './callback';\nimport * as Collections from '../utils/collections';\nimport CallbackTable from './callback_table';\n\nexport default class CallbackRegistry {\n _callbacks: CallbackTable;\n\n constructor() {\n this._callbacks = {};\n }\n\n get(name: string): Callback[] {\n return this._callbacks[prefix(name)];\n }\n\n add(name: string, callback: Function, context: any) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context\n });\n }\n\n remove(name?: string, callback?: Function, context?: any) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n\n var names = name ? [prefix(name)] : Collections.keys(this._callbacks);\n\n if (callback || context) {\n this.removeCallback(names, callback, context);\n } else {\n this.removeAllCallbacks(names);\n }\n }\n\n private removeCallback(names: string[], callback: Function, context: any) {\n Collections.apply(\n names,\n function(name) {\n this._callbacks[name] = Collections.filter(\n this._callbacks[name] || [],\n function(binding) {\n return (\n (callback && callback !== binding.fn) ||\n (context && context !== binding.context)\n );\n }\n );\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n },\n this\n );\n }\n\n private removeAllCallbacks(names: string[]) {\n Collections.apply(\n names,\n function(name) {\n delete this._callbacks[name];\n },\n this\n );\n }\n}\n\nfunction prefix(name: string): string {\n return '_' + name;\n}\n","import * as Collections from '../utils/collections';\nimport Callback from './callback';\nimport Metadata from '../channels/metadata';\nimport CallbackRegistry from './callback_registry';\n\n/** Manages callback bindings and event emitting.\n *\n * @param Function failThrough called when no listeners are bound to an event\n */\nexport default class Dispatcher {\n callbacks: CallbackRegistry;\n global_callbacks: Function[];\n failThrough: Function;\n\n constructor(failThrough?: Function) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n\n bind(eventName: string, callback: Function, context?: any) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n\n bind_global(callback: Function) {\n this.global_callbacks.push(callback);\n return this;\n }\n\n unbind(eventName?: string, callback?: Function, context?: any) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n\n unbind_global(callback?: Function) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n\n this.global_callbacks = Collections.filter(\n this.global_callbacks || [],\n c => c !== callback\n );\n\n return this;\n }\n\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n\n emit(eventName: string, data?: any, metadata?: Metadata): Dispatcher {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n\n if (metadata) {\n // if there's a metadata argument, we need to call the callback with both\n // data and metadata regardless of whether data is undefined\n args.push(data, metadata);\n } else if (data) {\n // metadata is undefined, so we only need to call the callback with data\n // if data exists\n args.push(data);\n }\n\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || global, args);\n }\n } else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n\n return this;\n }\n}\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Logger from '../logger';\nimport TransportHooks from './transport_hooks';\nimport Socket from '../socket';\nimport Runtime from 'runtime';\nimport Timeline from '../timeline/timeline';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides universal API for transport connections.\n *\n * Transport connection is a low-level object that wraps a connection method\n * and exposes a simple evented interface for the connection state and\n * messaging. It does not implement Pusher-specific WebSocket protocol.\n *\n * Additionally, it fetches resources needed for transport to work and exposes\n * an interface for querying transport features.\n *\n * States:\n * - new - initial state after constructing the object\n * - initializing - during initialization phase, usually fetching resources\n * - intialized - ready to establish a connection\n * - connection - when connection is being established\n * - open - when connection ready to be used\n * - closed - after connection was closed be either side\n *\n * Emits:\n * - error - after the connection raised an error\n *\n * Options:\n * - useTLS - whether connection should be over TLS\n * - hostTLS - host to connect to when connection is over TLS\n * - hostNonTLS - host to connect to when connection is over TLS\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class TransportConnection extends EventsDispatcher {\n hooks: TransportHooks;\n name: string;\n priority: number;\n key: string;\n options: TransportConnectionOptions;\n state: string;\n timeline: Timeline;\n activityTimeout: number;\n id: number;\n socket: Socket;\n beforeOpen: Function;\n initialize: Function;\n\n constructor(\n hooks: TransportHooks,\n name: string,\n priority: number,\n key: string,\n options: TransportConnectionOptions\n ) {\n super();\n this.initialize = Runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n\n /** Checks whether the transport handles activity checks by itself.\n *\n * @return {Boolean}\n */\n handlesActivityChecks(): boolean {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n\n /** Checks whether the transport supports the ping/pong API.\n *\n * @return {Boolean}\n */\n supportsPing(): boolean {\n return Boolean(this.hooks.supportsPing);\n }\n\n /** Tries to establish a connection.\n *\n * @returns {Boolean} false if transport is in invalid state\n */\n connect(): boolean {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n } catch (e) {\n Util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n\n this.bindListeners();\n\n Logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n\n /** Closes the connection.\n *\n * @return {Boolean} true if there was a connection to close\n */\n close(): boolean {\n if (this.socket) {\n this.socket.close();\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends data over the open connection.\n *\n * @param {String} data\n * @return {Boolean} true only when in the \"open\" state\n */\n send(data: any): boolean {\n if (this.state === 'open') {\n // Workaround for MobileSafari bug (see https://gist.github.com/2052006)\n Util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n } else {\n return false;\n }\n }\n\n /** Sends a ping if the connection is open and transport supports it. */\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n\n private onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(\n this.socket,\n this.hooks.urls.getPath(this.key, this.options)\n );\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n\n private onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n\n private onClose(closeEvent?: any) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean\n });\n } else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n\n private onMessage(message) {\n this.emit('message', message);\n }\n\n private onActivity() {\n this.emit('activity');\n }\n\n private bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = error => {\n this.onError(error);\n };\n this.socket.onclose = closeEvent => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = message => {\n this.onMessage(message);\n };\n\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n\n private unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n\n private changeState(state: string, params?: any) {\n this.state = state;\n this.timeline.info(\n this.buildTimelineMessage({\n state: state,\n params: params\n })\n );\n this.emit(state, params);\n }\n\n buildTimelineMessage(message): any {\n return Collections.extend({ cid: this.id }, message);\n }\n}\n","import Factory from '../utils/factory';\nimport TransportHooks from './transport_hooks';\nimport TransportConnection from './transport_connection';\nimport TransportConnectionOptions from './transport_connection_options';\n\n/** Provides interface for transport connection instantiation.\n *\n * Takes transport-specific hooks as the only argument, which allow checking\n * for transport support and creating its connections.\n *\n * Supported hooks: * - file - the name of the file to be fetched during initialization\n * - urls - URL scheme to be used by transport\n * - handlesActivityCheck - true when the transport handles activity checks\n * - supportsPing - true when the transport has a ping/activity API\n * - isSupported - tells whether the transport is supported in the environment\n * - getSocket - creates a WebSocket-compatible transport socket\n *\n * See transports.js for specific implementations.\n *\n * @param {Object} hooks object containing all needed transport hooks\n */\nexport default class Transport {\n hooks: TransportHooks;\n\n constructor(hooks: TransportHooks) {\n this.hooks = hooks;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * @param {Object} envronment te environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: any): boolean {\n return this.hooks.isSupported(environment);\n }\n\n /** Creates a transport connection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: any\n ): TransportConnection {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n","import * as URLSchemes from 'core/transports/url_schemes';\nimport URLScheme from 'core/transports/url_scheme';\nimport Transport from 'core/transports/transport';\nimport Util from 'core/util';\nimport * as Collections from 'core/utils/collections';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport TransportsTable from 'core/transports/transports_table';\nimport Runtime from 'runtime';\n\n/** WebSocket transport.\n *\n * Uses native WebSocket implementation, including MozWebSocket supported by\n * earlier Firefox versions.\n */\nvar WSTransport = new Transport({\n urls: URLSchemes.ws,\n handlesActivityChecks: false,\n supportsPing: false,\n\n isInitialized: function() {\n return Boolean(Runtime.getWebSocketAPI());\n },\n isSupported: function(): boolean {\n return Boolean(Runtime.getWebSocketAPI());\n },\n getSocket: function(url) {\n return Runtime.createWebSocket(url);\n }\n});\n\nvar httpConfiguration = {\n urls: URLSchemes.http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function() {\n return true;\n }\n};\n\nexport var streamingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createStreamingSocket(url);\n }\n },\n httpConfiguration\n);\nexport var pollingConfiguration = Collections.extend(\n {\n getSocket: function(url) {\n return Runtime.HTTPFactory.createPollingSocket(url);\n }\n },\n httpConfiguration\n);\n\nvar xhrConfiguration = {\n isSupported: function(): boolean {\n return Runtime.isXHRSupported();\n }\n};\n\n/** HTTP streaming transport using CORS-enabled XMLHttpRequest. */\nvar XHRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xhrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using CORS-enabled XMLHttpRequest. */\nvar XHRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xhrConfiguration)\n);\n\nvar Transports: TransportsTable = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport\n};\n\nexport default Transports;\n","import {\n default as Transports,\n streamingConfiguration,\n pollingConfiguration\n} from 'isomorphic/transports/transports';\nimport Transport from 'core/transports/transport';\nimport TransportHooks from 'core/transports/transport_hooks';\nimport * as URLSchemes from 'core/transports/url_schemes';\nimport Runtime from 'runtime';\nimport { Dependencies } from '../dom/dependencies';\nimport * as Collections from 'core/utils/collections';\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: URLSchemes.sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n\n isSupported: function() {\n return true;\n },\n isInitialized: function() {\n return window.SockJS !== undefined;\n },\n getSocket: function(url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS\n }),\n ignore_null_origin: options.ignoreNullOrigin\n });\n },\n beforeOpen: function(socket, path) {\n socket.send(\n JSON.stringify({\n path: path\n })\n );\n }\n});\n\nvar xdrConfiguration = {\n isSupported: function(environment): boolean {\n var yes = Runtime.isXDRSupported(environment.useTLS);\n return yes;\n }\n};\n\n/** HTTP streaming transport using XDomainRequest (IE 8,9). */\nvar XDRStreamingTransport = new Transport(\n (\n Collections.extend({}, streamingConfiguration, xdrConfiguration)\n )\n);\n\n/** HTTP long-polling transport using XDomainRequest (IE 8,9). */\nvar XDRPollingTransport = new Transport(\n Collections.extend({}, pollingConfiguration, xdrConfiguration)\n);\n\nTransports.xdr_streaming = XDRStreamingTransport;\nTransports.xdr_polling = XDRPollingTransport;\nTransports.sockjs = SockJSTransport;\n\nexport default Transports;\n","import Reachability from 'core/reachability';\nimport { default as EventsDispatcher } from 'core/events/dispatcher';\n\n/** Really basic interface providing network availability info.\n *\n * Emits:\n * - online - when browser goes online\n * - offline - when browser goes offline\n */\nexport class NetInfo extends EventsDispatcher implements Reachability {\n constructor() {\n super();\n var self = this;\n // This is okay, as IE doesn't support this stuff anyway.\n if (window.addEventListener !== undefined) {\n window.addEventListener(\n 'online',\n function() {\n self.emit('online');\n },\n false\n );\n window.addEventListener(\n 'offline',\n function() {\n self.emit('offline');\n },\n false\n );\n }\n }\n\n /** Returns whether browser is online or not\n *\n * Offline means definitely offline (no connection to router).\n * Inverse does NOT mean definitely online (only currently supported in Safari\n * and even there only means the device has a connection to the router).\n *\n * @return {Boolean}\n */\n isOnline(): boolean {\n if (window.navigator.onLine === undefined) {\n return true;\n } else {\n return window.navigator.onLine;\n }\n }\n}\n\nexport var Network = new NetInfo();\n","import Util from '../util';\nimport * as Collections from '../utils/collections';\nimport TransportManager from './transport_manager';\nimport TransportConnection from './transport_connection';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\n\n/** Creates transport connections monitored by a transport manager.\n *\n * When a transport is closed, it might mean the environment does not support\n * it. It's possible that messages get stuck in an intermediate buffer or\n * proxies terminate inactive connections. To combat these problems,\n * assistants monitor the connection lifetime, report unclean exits and\n * adjust ping timeouts to keep the connection active. The decision to disable\n * a transport is the manager's responsibility.\n *\n * @param {TransportManager} manager\n * @param {TransportConnection} transport\n * @param {Object} options\n */\nexport default class AssistantToTheTransportManager {\n manager: TransportManager;\n transport: Transport;\n minPingDelay: number;\n maxPingDelay: number;\n pingDelay: number;\n\n constructor(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n\n /** Creates a transport connection.\n *\n * This function has the same API as Transport#createConnection.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {String} key the application key\n * @param {Object} options\n * @returns {TransportConnection}\n */\n createConnection(\n name: string,\n priority: number,\n key: string,\n options: Object\n ): TransportConnection {\n options = Collections.extend({}, options, {\n activityTimeout: this.pingDelay\n });\n var connection = this.transport.createConnection(\n name,\n priority,\n key,\n options\n );\n\n var openTimestamp = null;\n\n var onOpen = function() {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = Util.now();\n };\n var onClosed = closeEvent => {\n connection.unbind('closed', onClosed);\n\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n // we don't want to use transports not obeying the protocol\n this.manager.reportDeath();\n } else if (!closeEvent.wasClean && openTimestamp) {\n // report deaths only for short-living transport\n var lifespan = Util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n\n connection.bind('open', onOpen);\n return connection;\n }\n\n /** Returns whether the transport is supported in the environment.\n *\n * This function has the same API as Transport#isSupported. Might return false\n * when the manager decides to kill the transport.\n *\n * @param {Object} environment the environment details (encryption, settings)\n * @returns {Boolean} true when the transport is supported\n */\n isSupported(environment: string): boolean {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n","import Action from './action';\nimport { PusherEvent } from './message-types';\n/**\n * Provides functions for handling Pusher protocol-specific messages.\n */\n\nconst Protocol = {\n /**\n * Decodes a message in a Pusher format.\n *\n * The MessageEvent we receive from the transport should contain a pusher event\n * (https://pusher.com/docs/pusher_protocol#events) serialized as JSON in the\n * data field\n *\n * The pusher event may contain a data field too, and it may also be\n * serialised as JSON\n *\n * Throws errors when messages are not parse'able.\n *\n * @param {MessageEvent} messageEvent\n * @return {PusherEvent}\n */\n decodeMessage: function(messageEvent: MessageEvent): PusherEvent {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n } catch (e) {}\n }\n var pusherEvent: PusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n } catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n\n /**\n * Encodes a message to be sent.\n *\n * @param {PusherEvent} event\n * @return {String}\n */\n encodeMessage: function(event: PusherEvent): string {\n return JSON.stringify(event);\n },\n\n /**\n * Processes a handshake message and returns appropriate actions.\n *\n * Returns an object with an 'action' and other action-specific properties.\n *\n * There are three outcomes when calling this function. First is a successful\n * connection attempt, when pusher:connection_established is received, which\n * results in a 'connected' action with an 'id' property. When passed a\n * pusher:error event, it returns a result with action appropriate to the\n * close code and an error. Otherwise, it raises an exception.\n *\n * @param {String} message\n * @result Object\n */\n processHandshake: function(messageEvent: MessageEvent): Action {\n var message = Protocol.decodeMessage(messageEvent);\n\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000\n };\n } else if (message.event === 'pusher:error') {\n // From protocol 6 close codes are sent only once, so this only\n // happens when connection does not support close codes\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data)\n };\n } else {\n throw 'Invalid handshake';\n }\n },\n\n /**\n * Dispatches the close event and returns an appropriate action name.\n *\n * See:\n * 1. https://developer.mozilla.org/en-US/docs/WebSockets/WebSockets_reference/CloseEvent\n * 2. http://pusher.com/docs/pusher_protocol\n *\n * @param {CloseEvent} closeEvent\n * @return {String} close action name\n */\n getCloseAction: function(closeEvent): string {\n if (closeEvent.code < 4000) {\n // ignore 1000 CLOSE_NORMAL, 1001 CLOSE_GOING_AWAY,\n // 1005 CLOSE_NO_STATUS, 1006 CLOSE_ABNORMAL\n // ignore 1007...3999\n // handle 1002 CLOSE_PROTOCOL_ERROR, 1003 CLOSE_UNSUPPORTED,\n // 1004 CLOSE_TOO_LARGE\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n } else {\n return null;\n }\n } else if (closeEvent.code === 4000) {\n return 'tls_only';\n } else if (closeEvent.code < 4100) {\n return 'refused';\n } else if (closeEvent.code < 4200) {\n return 'backoff';\n } else if (closeEvent.code < 4300) {\n return 'retry';\n } else {\n // unknown error\n return 'refused';\n }\n },\n\n /**\n * Returns an error or null basing on the close event.\n *\n * Null is returned when connection was closed cleanly. Otherwise, an object\n * with error details is returned.\n *\n * @param {CloseEvent} closeEvent\n * @return {Object} error object\n */\n getCloseError: function(closeEvent): any {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message\n }\n };\n } else {\n return null;\n }\n }\n};\n\nexport default Protocol;\n","import * as Collections from '../utils/collections';\nimport { default as EventsDispatcher } from '../events/dispatcher';\nimport Protocol from './protocol/protocol';\nimport { PusherEvent } from './protocol/message-types';\nimport Logger from '../logger';\nimport TransportConnection from '../transports/transport_connection';\nimport Socket from '../socket';\n/**\n * Provides Pusher protocol interface for transports.\n *\n * Emits following events:\n * - message - on received messages\n * - ping - on ping requests\n * - pong - on pong responses\n * - error - when the transport emits an error\n * - closed - after closing the transport\n *\n * It also emits more events when connection closes with a code.\n * See Protocol.getCloseAction to get more details.\n *\n * @param {Number} id\n * @param {AbstractTransport} transport\n */\nexport default class Connection extends EventsDispatcher implements Socket {\n id: string;\n transport: TransportConnection;\n activityTimeout: number;\n\n constructor(id: string, transport: TransportConnection) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n\n /** Returns whether used transport handles activity checks by itself\n *\n * @returns {Boolean} true if activity checks are handled by the transport\n */\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data: any): boolean {\n return this.transport.send(data);\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string): boolean {\n var event: PusherEvent = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n Logger.debug('Event sent', event);\n return this.send(Protocol.encodeMessage(event));\n }\n\n /** Sends a ping message to the server.\n *\n * Basing on the underlying transport, it might send either transport's\n * protocol-specific ping or pusher:ping event.\n */\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n } else {\n this.send_event('pusher:ping', {});\n }\n }\n\n /** Closes the connection. */\n close() {\n this.transport.close();\n }\n\n private bindListeners() {\n var listeners = {\n message: (messageEvent: MessageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = Protocol.decodeMessage(messageEvent);\n } catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data\n });\n }\n\n if (pusherEvent !== undefined) {\n Logger.debug('Event recd', pusherEvent);\n\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: error => {\n this.emit('error', error);\n },\n closed: closeEvent => {\n unbindListeners();\n\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n\n this.transport = null;\n this.emit('closed');\n }\n };\n\n var unbindListeners = () => {\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n\n Collections.objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n\n private handleCloseEvent(closeEvent: any) {\n var action = Protocol.getCloseAction(closeEvent);\n var error = Protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n","import Util from '../../util';\nimport * as Collections from '../../utils/collections';\nimport Protocol from '../protocol/protocol';\nimport Connection from '../connection';\nimport TransportConnection from '../../transports/transport_connection';\nimport HandshakePayload from './handshake_payload';\n\n/**\n * Handles Pusher protocol handshakes for transports.\n *\n * Calls back with a result object after handshake is completed. Results\n * always have two fields:\n * - action - string describing action to be taken after the handshake\n * - transport - the transport object passed to the constructor\n *\n * Different actions can set different additional properties on the result.\n * In the case of 'connected' action, there will be a 'connection' property\n * containing a Connection object for the transport. Other actions should\n * carry an 'error' property.\n *\n * @param {AbstractTransport} transport\n * @param {Function} callback\n */\nexport default class Handshake {\n transport: TransportConnection;\n callback: (HandshakePayload) => void;\n onMessage: Function;\n onClosed: Function;\n\n constructor(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n\n private bindListeners() {\n this.onMessage = m => {\n this.unbindListeners();\n\n var result;\n try {\n result = Protocol.processHandshake(m);\n } catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout\n });\n } else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n\n this.onClosed = closeEvent => {\n this.unbindListeners();\n\n var action = Protocol.getCloseAction(closeEvent) || 'backoff';\n var error = Protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n\n private unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n\n private finish(action: string, params: any) {\n this.callback(\n Collections.extend({ transport: this.transport, action: action }, params)\n );\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport base64encode from '../base64';\nimport Timeline from './timeline';\nimport Runtime from 'runtime';\n\nexport interface TimelineSenderOptions {\n host?: string;\n port?: number;\n path?: string;\n}\n\nexport default class TimelineSender {\n timeline: Timeline;\n options: TimelineSenderOptions;\n host: string;\n\n constructor(timeline: Timeline, options: TimelineSenderOptions) {\n this.timeline = timeline;\n this.options = options || {};\n }\n\n send(useTLS: boolean, callback?: Function) {\n if (this.timeline.isEmpty()) {\n return;\n }\n\n this.timeline.send(\n Runtime.TimelineTransport.getAgent(this, useTLS),\n callback\n );\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport UrlStore from '../utils/url_store';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport { HTTPAuthError } from '../errors';\n\n/** Provides base public channel interface with an event emitter.\n *\n * Emits:\n * - pusher:subscription_succeeded - after subscribing successfully\n * - other non-internal events\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class Channel extends EventsDispatcher {\n name: string;\n pusher: Pusher;\n subscribed: boolean;\n subscriptionPending: boolean;\n subscriptionCancelled: boolean;\n subscriptionCount: null;\n\n constructor(name: string, pusher: Pusher) {\n super(function(event, data) {\n Logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n\n /** Skips authorization, since public channels don't require it.\n *\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return callback(null, { auth: '' });\n }\n\n /** Triggers an event */\n trigger(event: string, data: any) {\n if (event.indexOf('client-') !== 0) {\n throw new Errors.BadEventName(\n \"Event '\" + event + \"' does not start with 'client-'\"\n );\n }\n if (!this.subscribed) {\n var suffix = UrlStore.buildLogSuffix('triggeringClientEvents');\n Logger.warn(\n `Client event triggered before channel 'subscription_succeeded' event . ${suffix}`\n );\n }\n return this.pusher.send_event(event, data, this.name);\n }\n\n /** Signals disconnection to the channel. For internal use only. */\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n\n /** Handles a PusherEvent. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n } else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n } else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata: Metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n\n handleSubscriptionCountEvent(event: PusherEvent) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n\n this.emit('pusher:subscription_count', event.data);\n }\n\n /** Sends a subscription request. For internal use only. */\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(\n this.pusher.connection.socket_id,\n (error: Error | null, data: ChannelAuthorizationData) => {\n if (error) {\n this.subscriptionPending = false;\n // Why not bind to 'pusher:subscription_error' a level up, and log there?\n // Binding to this event would cause the warning about no callbacks being\n // bound (see constructor) to be suppressed, that's not what we want.\n Logger.error(error.toString());\n this.emit(\n 'pusher:subscription_error',\n Object.assign(\n {},\n {\n type: 'AuthError',\n error: error.message\n },\n error instanceof HTTPAuthError ? { status: error.status } : {}\n )\n );\n } else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name\n });\n }\n }\n );\n }\n\n /** Sends an unsubscription request. For internal use only. */\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name\n });\n }\n\n /** Cancels an in progress subscription. For internal use only. */\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n\n /** Reinstates an in progress subscripiton. For internal use only. */\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n","import Factory from '../utils/factory';\nimport Channel from './channel';\nimport { ChannelAuthorizationCallback } from '../auth/options';\n\n/** Extends public channels to provide private channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class PrivateChannel extends Channel {\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n return this.pusher.config.channelAuthorizer(\n {\n channelName: this.name,\n socketId: socketId\n },\n callback\n );\n }\n}\n","import * as Collections from '../utils/collections';\n\n/** Represents a collection of members of a presence channel. */\nexport default class Members {\n members: any;\n count: number;\n myID: any;\n me: any;\n\n constructor() {\n this.reset();\n }\n\n /** Returns member's info for given id.\n *\n * Resulting object containts two fields - id and info.\n *\n * @param {Number} id\n * @return {Object} member's info or null\n */\n get(id: string): any {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id]\n };\n } else {\n return null;\n }\n }\n\n /** Calls back for each member in unspecified order.\n *\n * @param {Function} callback\n */\n each(callback: Function) {\n Collections.objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n\n /** Updates the id for connected member. For internal use only. */\n setMyID(id: string) {\n this.myID = id;\n }\n\n /** Handles subscription data. For internal use only. */\n onSubscription(subscriptionData: any) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n\n /** Adds a new member to the collection. For internal use only. */\n addMember(memberData: any) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n\n /** Adds a member from the collection. For internal use only. */\n removeMember(memberData: any) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n\n /** Resets the collection to the initial state. For internal use only. */\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n","import PrivateChannel from './private_channel';\nimport Logger from '../logger';\nimport Members from './members';\nimport Pusher from '../pusher';\nimport UrlStore from 'core/utils/url_store';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport Metadata from './metadata';\nimport { ChannelAuthorizationData } from '../auth/options';\n\nexport default class PresenceChannel extends PrivateChannel {\n members: Members;\n\n /** Adds presence channel functionality to private channels.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\n constructor(name: string, pusher: Pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n\n /** Authorizes the connection as a member of the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: Function) {\n super.authorize(socketId, async (error, authData) => {\n if (!error) {\n authData = authData as ChannelAuthorizationData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n } else {\n await this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n // If the user is signed in, get the id of the authenticated user\n // and allow the presence authorization to continue.\n this.members.setMyID(this.pusher.user.user_data.id);\n } else {\n let suffix = UrlStore.buildLogSuffix('authorizationEndpoint');\n Logger.error(\n `Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`\n );\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n });\n }\n\n /** Handles presence and subscription events. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n } else {\n var data = event.data;\n var metadata: Metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n\n handleSubscriptionSucceededEvent(event: PusherEvent) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n } else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n\n /** Resets the channel state, including members map. For internal use only. */\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n","import PrivateChannel from './private_channel';\nimport * as Errors from '../errors';\nimport Logger from '../logger';\nimport Pusher from '../pusher';\nimport { decode as encodeUTF8 } from '@stablelib/utf8';\nimport { decode as decodeBase64 } from '@stablelib/base64';\nimport Dispatcher from '../events/dispatcher';\nimport { PusherEvent } from '../connection/protocol/message-types';\nimport {\n ChannelAuthorizationData,\n ChannelAuthorizationCallback\n} from '../auth/options';\nimport * as nacl from 'tweetnacl';\n\n/** Extends private channels to provide encrypted channel interface.\n *\n * @param {String} name\n * @param {Pusher} pusher\n */\nexport default class EncryptedChannel extends PrivateChannel {\n key: Uint8Array = null;\n nacl: nacl;\n\n constructor(name: string, pusher: Pusher, nacl: nacl) {\n super(name, pusher);\n this.nacl = nacl;\n }\n\n /** Authorizes the connection to use the channel.\n *\n * @param {String} socketId\n * @param {Function} callback\n */\n authorize(socketId: string, callback: ChannelAuthorizationCallback) {\n super.authorize(\n socketId,\n (error: Error | null, authData: ChannelAuthorizationData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(\n new Error(\n `No shared_secret key in auth payload for encrypted channel: ${this.name}`\n ),\n null\n );\n return;\n }\n this.key = decodeBase64(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n }\n );\n }\n\n trigger(event: string, data: any): boolean {\n throw new Errors.UnsupportedFeature(\n 'Client events are not currently supported for encrypted channels'\n );\n }\n\n /** Handles an event. For internal use only.\n *\n * @param {PusherEvent} event\n */\n handleEvent(event: PusherEvent) {\n var eventName = event.event;\n var data = event.data;\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n\n private handleEncryptedEvent(event: string, data: any): void {\n if (!this.key) {\n Logger.debug(\n 'Received encrypted event before key has been retrieved from the authEndpoint'\n );\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n Logger.error(\n 'Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data\n );\n return;\n }\n let cipherText = decodeBase64(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n Logger.error(\n `Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`\n );\n return;\n }\n let nonce = decodeBase64(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n Logger.error(\n `Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`\n );\n return;\n }\n\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.debug(\n 'Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...'\n );\n // Try a single time to retrieve a new auth key and decrypt the event with it\n // If this fails, a new key will be requested when a new message is received\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n Logger.error(\n `Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`\n );\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n Logger.error(\n `Failed to decrypt event with new key. Dropping encrypted event`\n );\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n\n // Try and parse the decrypted bytes as JSON. If we can't parse it, just\n // return the utf-8 string\n getDataToEmit(bytes: Uint8Array): string {\n let raw = encodeUTF8(bytes);\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n}\n","import { default as EventsDispatcher } from '../events/dispatcher';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport { Config } from '../config';\nimport Logger from '../logger';\nimport HandshakePayload from './handshake/handshake_payload';\nimport Connection from './connection';\nimport Strategy from '../strategies/strategy';\nimport StrategyRunner from '../strategies/strategy_runner';\nimport * as Collections from '../utils/collections';\nimport Timeline from '../timeline/timeline';\nimport ConnectionManagerOptions from './connection_manager_options';\nimport Runtime from 'runtime';\n\nimport {\n ErrorCallbacks,\n HandshakeCallbacks,\n ConnectionCallbacks\n} from './callbacks';\nimport Action from './protocol/action';\n\n/** Manages connection to Pusher.\n *\n * Uses a strategy (currently only default), timers and network availability\n * info to establish a connection and export its state. In case of failures,\n * manages reconnection attempts.\n *\n * Exports state changes as following events:\n * - \"state_change\", { previous: p, current: state }\n * - state\n *\n * States:\n * - initialized - initial state, never transitioned to\n * - connecting - connection is being established\n * - connected - connection has been fully established\n * - disconnected - on requested disconnection\n * - unavailable - after connection timeout or when there's no network\n * - failed - when the connection strategy is not supported\n *\n * Options:\n * - unavailableTimeout - time to transition to unavailable state\n * - activityTimeout - time after which ping message should be sent\n * - pongTimeout - time for Pusher to respond with pong before reconnecting\n *\n * @param {String} key application key\n * @param {Object} options\n */\nexport default class ConnectionManager extends EventsDispatcher {\n key: string;\n options: ConnectionManagerOptions;\n state: string;\n connection: Connection;\n usingTLS: boolean;\n timeline: Timeline;\n socket_id: string;\n unavailableTimer: Timer;\n activityTimer: Timer;\n retryTimer: Timer;\n activityTimeout: number;\n strategy: Strategy;\n runner: StrategyRunner;\n errorCallbacks: ErrorCallbacks;\n handshakeCallbacks: HandshakeCallbacks;\n connectionCallbacks: ConnectionCallbacks;\n\n constructor(key: string, options: ConnectionManagerOptions) {\n super();\n this.state = 'initialized';\n this.connection = null;\n\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(\n this.errorCallbacks\n );\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n\n var Network = Runtime.getNetwork();\n\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n\n this.updateStrategy();\n }\n\n switchCluster(key: string) {\n this.key = key;\n // This ensures that the new config coming from\n // pusher instance are taken into account\n // such as appKey and cluster\n this.updateStrategy();\n this.retryIn(0);\n }\n\n /** Establishes a connection to Pusher.\n *\n * Does nothing when connection is already established. See top-level doc\n * to find events emitted on connection attempts.\n */\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n\n /** Sends raw data.\n *\n * @param {String} data\n */\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n } else {\n return false;\n }\n }\n\n /** Sends an event.\n *\n * @param {String} name\n * @param {String} data\n * @param {String} [channel]\n * @returns {Boolean} whether message was sent or not\n */\n send_event(name: string, data: any, channel?: string) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n } else {\n return false;\n }\n }\n\n /** Closes the connection. */\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n\n isUsingTLS() {\n return this.usingTLS;\n }\n\n private startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n } else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error\n });\n this.timeline.error({ handshakeError: handshake.error });\n } else {\n this.abortConnecting(); // we don't support switching connections yet\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n\n private abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n\n private disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n\n private updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS\n });\n }\n\n private retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new Timer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n\n private clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n\n private setUnavailableTimer() {\n this.unavailableTimer = new Timer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n\n private clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n\n private sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n // wait for pong response\n this.activityTimer = new Timer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n\n private resetActivityCheck() {\n this.stopActivityCheck();\n // send ping after inactivity\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new Timer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n\n private stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n\n private buildConnectionCallbacks(\n errorCallbacks: ErrorCallbacks\n ): ConnectionCallbacks {\n return Collections.extend({}, errorCallbacks, {\n message: message => {\n // includes pong messages from server\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: error => {\n // just emit error to user - socket will already be closed by browser\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n }\n });\n }\n\n private buildHandshakeCallbacks(\n errorCallbacks: ErrorCallbacks\n ): HandshakeCallbacks {\n return Collections.extend({}, errorCallbacks, {\n connected: (handshake: HandshakePayload) => {\n this.activityTimeout = Math.min(\n this.options.activityTimeout,\n handshake.activityTimeout,\n handshake.connection.activityTimeout || Infinity\n );\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n }\n });\n }\n\n private buildErrorCallbacks(): ErrorCallbacks {\n let withErrorEmitted = callback => {\n return (result: Action | HandshakePayload) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n })\n };\n }\n\n private setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n\n private abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n\n private updateState(newState: string, data?: any) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n Logger.debug(\n 'State changed',\n previousState + ' -> ' + newStateDescription\n );\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n\n private shouldRetry(): boolean {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n","import Channel from './channel';\nimport * as Collections from '../utils/collections';\nimport ChannelTable from './channel_table';\nimport Factory from '../utils/factory';\nimport Pusher from '../pusher';\nimport Logger from '../logger';\nimport * as Errors from '../errors';\nimport urlStore from '../utils/url_store';\n\n/** Handles a channel map. */\nexport default class Channels {\n channels: ChannelTable;\n\n constructor() {\n this.channels = {};\n }\n\n /** Creates or retrieves an existing channel by its name.\n *\n * @param {String} name\n * @param {Pusher} pusher\n * @return {Channel}\n */\n add(name: string, pusher: Pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n\n /** Returns a list of all channels\n *\n * @return {Array}\n */\n all(): Channel[] {\n return Collections.values(this.channels);\n }\n\n /** Finds a channel by its name.\n *\n * @param {String} name\n * @return {Channel} channel or null if it doesn't exist\n */\n find(name: string) {\n return this.channels[name];\n }\n\n /** Removes a channel from the map.\n *\n * @param {String} name\n */\n remove(name: string) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n\n /** Proxies disconnection signal to all channels. */\n disconnect() {\n Collections.objectApply(this.channels, function(channel) {\n channel.disconnect();\n });\n }\n}\n\nfunction createChannel(name: string, pusher: Pusher): Channel {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return Factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg =\n 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = urlStore.buildLogSuffix('encryptedChannelSupport');\n throw new Errors.UnsupportedFeature(`${errMsg}. ${suffix}`);\n } else if (name.indexOf('private-') === 0) {\n return Factory.createPrivateChannel(name, pusher);\n } else if (name.indexOf('presence-') === 0) {\n return Factory.createPresenceChannel(name, pusher);\n } else if (name.indexOf('#') === 0) {\n throw new Errors.BadChannelName(\n 'Cannot create a channel with name \"' + name + '\".'\n );\n } else {\n return Factory.createChannel(name, pusher);\n }\n}\n","import AssistantToTheTransportManager from '../transports/assistant_to_the_transport_manager';\nimport PingDelayOptions from '../transports/ping_delay_options';\nimport Transport from '../transports/transport';\nimport TransportManager from '../transports/transport_manager';\nimport Handshake from '../connection/handshake';\nimport TransportConnection from '../transports/transport_connection';\nimport SocketHooks from '../http/socket_hooks';\nimport HTTPSocket from '../http/http_socket';\n\nimport Timeline from '../timeline/timeline';\nimport {\n default as TimelineSender,\n TimelineSenderOptions\n} from '../timeline/timeline_sender';\nimport PresenceChannel from '../channels/presence_channel';\nimport PrivateChannel from '../channels/private_channel';\nimport EncryptedChannel from '../channels/encrypted_channel';\nimport Channel from '../channels/channel';\nimport ConnectionManager from '../connection/connection_manager';\nimport ConnectionManagerOptions from '../connection/connection_manager_options';\nimport Ajax from '../http/ajax';\nimport Channels from '../channels/channels';\nimport Pusher from '../pusher';\nimport { Config } from '../config';\nimport * as nacl from 'tweetnacl';\n\nvar Factory = {\n createChannels(): Channels {\n return new Channels();\n },\n\n createConnectionManager(\n key: string,\n options: ConnectionManagerOptions\n ): ConnectionManager {\n return new ConnectionManager(key, options);\n },\n\n createChannel(name: string, pusher: Pusher): Channel {\n return new Channel(name, pusher);\n },\n\n createPrivateChannel(name: string, pusher: Pusher): PrivateChannel {\n return new PrivateChannel(name, pusher);\n },\n\n createPresenceChannel(name: string, pusher: Pusher): PresenceChannel {\n return new PresenceChannel(name, pusher);\n },\n\n createEncryptedChannel(\n name: string,\n pusher: Pusher,\n nacl: nacl\n ): EncryptedChannel {\n return new EncryptedChannel(name, pusher, nacl);\n },\n\n createTimelineSender(timeline: Timeline, options: TimelineSenderOptions) {\n return new TimelineSender(timeline, options);\n },\n\n createHandshake(\n transport: TransportConnection,\n callback: (HandshakePayload) => void\n ): Handshake {\n return new Handshake(transport, callback);\n },\n\n createAssistantToTheTransportManager(\n manager: TransportManager,\n transport: Transport,\n options: PingDelayOptions\n ): AssistantToTheTransportManager {\n return new AssistantToTheTransportManager(manager, transport, options);\n }\n};\n\nexport default Factory;\n","import AssistantToTheTransportManager from './assistant_to_the_transport_manager';\nimport Transport from './transport';\nimport PingDelayOptions from './ping_delay_options';\nimport Factory from '../utils/factory';\n\nexport interface TransportManagerOptions extends PingDelayOptions {\n lives?: number;\n}\n\n/** Keeps track of the number of lives left for a transport.\n *\n * In the beginning of a session, transports may be assigned a number of\n * lives. When an AssistantToTheTransportManager instance reports a transport\n * connection closed uncleanly, the transport loses a life. When the number\n * of lives drops to zero, the transport gets disabled by its manager.\n *\n * @param {Object} options\n */\nexport default class TransportManager {\n options: TransportManagerOptions;\n livesLeft: number;\n\n constructor(options: TransportManagerOptions) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n\n /** Creates a assistant for the transport.\n *\n * @param {Transport} transport\n * @returns {AssistantToTheTransportManager}\n */\n getAssistant(transport: Transport): AssistantToTheTransportManager {\n return Factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay\n });\n }\n\n /** Returns whether the transport has any lives left.\n *\n * @returns {Boolean}\n */\n isAlive(): boolean {\n return this.livesLeft > 0;\n }\n\n /** Takes one life from the transport. */\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Loops through strategies with optional timeouts.\n *\n * Options:\n * - loop - whether it should loop through the substrategy list\n * - timeout - initial timeout for a single substrategy\n * - timeoutLimit - maximum timeout\n *\n * @param {Strategy[]} strategies\n * @param {Object} options\n */\nexport default class SequentialStrategy implements Strategy {\n strategies: Strategy[];\n loop: boolean;\n failFast: boolean;\n timeout: number;\n timeoutLimit: number;\n\n constructor(strategies: Strategy[], options: StrategyOptions) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n } else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout, failFast: this.failFast },\n tryNextStrategy\n );\n } else {\n callback(true);\n }\n }\n };\n\n runner = this.tryStrategy(\n strategies[current],\n minPriority,\n { timeout: timeout, failFast: this.failFast },\n tryNextStrategy\n );\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n\n private tryStrategy(\n strategy: Strategy,\n minPriority: number,\n options: StrategyOptions,\n callback: Function\n ) {\n var timer = null;\n var runner = null;\n\n if (options.timeout > 0) {\n timer = new Timer(options.timeout, function() {\n runner.abort();\n callback(true);\n });\n }\n\n runner = strategy.connect(minPriority, function(error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n // advance to the next strategy after the timeout\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n\n return {\n abort: function() {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function(p) {\n runner.forceMinPriority(p);\n }\n };\n }\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport Strategy from './strategy';\n\n/** Launches all substrategies and emits prioritized connected transports.\n *\n * @param {Array} strategies\n */\nexport default class BestConnectedEverStrategy implements Strategy {\n strategies: Strategy[];\n\n constructor(strategies: Strategy[]) {\n this.strategies = strategies;\n }\n\n isSupported(): boolean {\n return Collections.any(this.strategies, Util.method('isSupported'));\n }\n\n connect(minPriority: number, callback: Function) {\n return connect(this.strategies, minPriority, function(i, runners) {\n return function(error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\n\n/** Connects to all strategies in parallel.\n *\n * Callback builder should be a function that takes two arguments: index\n * and a list of runners. It should return another function that will be\n * passed to the substrategy with given index. Runners can be aborted using\n * abortRunner(s) functions from this class.\n *\n * @param {Array} strategies\n * @param {Function} callbackBuilder\n * @return {Object} strategy runner\n */\nfunction connect(\n strategies: Strategy[],\n minPriority: number,\n callbackBuilder: Function\n) {\n var runners = Collections.map(strategies, function(strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function() {\n Collections.apply(runners, abortRunner);\n },\n forceMinPriority: function(p) {\n Collections.apply(runners, function(runner) {\n runner.forceMinPriority(p);\n });\n }\n };\n}\n\nfunction allRunnersFailed(runners): boolean {\n return Collections.all(runners, function(runner) {\n return Boolean(runner.error);\n });\n}\n\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n","import Util from '../util';\nimport Runtime from 'runtime';\nimport Strategy from './strategy';\nimport SequentialStrategy from './sequential_strategy';\nimport StrategyOptions from './strategy_options';\nimport TransportStrategy from './transport_strategy';\nimport Timeline from '../timeline/timeline';\nimport * as Collections from '../utils/collections';\n\nexport interface TransportStrategyDictionary {\n [key: string]: TransportStrategy;\n}\n\n/** Caches the last successful transport and, after the first few attempts,\n * uses the cached transport for subsequent attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class WebSocketPrioritizedCachedStrategy implements Strategy {\n strategy: Strategy;\n transports: TransportStrategyDictionary;\n ttl: number;\n usingTLS: boolean;\n timeline: Timeline;\n\n constructor(\n strategy: Strategy,\n transports: TransportStrategyDictionary,\n options: StrategyOptions\n ) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n var cacheSkipCount = info && info.cacheSkipCount ? info.cacheSkipCount : 0;\n\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= Util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n if (['ws', 'wss'].includes(info.transport) || cacheSkipCount > 3) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency\n });\n strategies.push(\n new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true\n })\n );\n } else {\n cacheSkipCount++;\n }\n }\n }\n\n var startTimestamp = Util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = Util.now();\n runner = strategies.pop().connect(minPriority, cb);\n } else {\n callback(error);\n }\n } else {\n storeTransportCache(\n usingTLS,\n handshake.transport.name,\n Util.now() - startTimestamp,\n cacheSkipCount\n );\n callback(null, handshake);\n }\n });\n\n return {\n abort: function() {\n runner.abort();\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n\nfunction getTransportCacheKey(usingTLS: boolean): string {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\n\nfunction fetchTransportCache(usingTLS: boolean): any {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n } catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\n\nfunction storeTransportCache(\n usingTLS: boolean,\n transport: TransportStrategy,\n latency: number,\n cacheSkipCount: number\n) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = Collections.safeJSONStringify({\n timestamp: Util.now(),\n transport: transport,\n latency: latency,\n cacheSkipCount: cacheSkipCount\n });\n } catch (e) {\n // catch over quota exceptions raised by localStorage\n }\n }\n}\n\nfunction flushTransportCache(usingTLS: boolean) {\n var storage = Runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n } catch (e) {\n // catch exceptions raised by localStorage\n }\n }\n}\n","import { OneOffTimer as Timer } from '../utils/timers';\nimport Strategy from './strategy';\nimport StrategyOptions from './strategy_options';\n\n/** Runs substrategy after specified delay.\n *\n * Options:\n * - delay - time in miliseconds to delay the substrategy attempt\n *\n * @param {Strategy} strategy\n * @param {Object} options\n */\nexport default class DelayedStrategy implements Strategy {\n strategy: Strategy;\n options: { delay: number };\n\n constructor(strategy: Strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function) {\n var strategy = this.strategy;\n var runner;\n var timer = new Timer(this.options.delay, function() {\n runner = strategy.connect(minPriority, callback);\n });\n\n return {\n abort: function() {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function(p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n }\n };\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Proxies method calls to one of substrategies basing on the test function.\n *\n * @param {Function} test\n * @param {Strategy} trueBranch strategy used when test returns true\n * @param {Strategy} falseBranch strategy used when test returns false\n */\nexport default class IfStrategy implements Strategy {\n test: () => boolean;\n trueBranch: Strategy;\n falseBranch: Strategy;\n\n constructor(\n test: () => boolean,\n trueBranch: Strategy,\n falseBranch: Strategy\n ) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n\n isSupported(): boolean {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n","import Strategy from './strategy';\nimport StrategyRunner from './strategy_runner';\n\n/** Launches the substrategy and terminates on the first open connection.\n *\n * @param {Strategy} strategy\n */\nexport default class FirstConnectedStrategy implements Strategy {\n strategy: Strategy;\n\n constructor(strategy: Strategy) {\n this.strategy = strategy;\n }\n\n isSupported(): boolean {\n return this.strategy.isSupported();\n }\n\n connect(minPriority: number, callback: Function): StrategyRunner {\n var runner = this.strategy.connect(minPriority, function(error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n","import * as Collections from 'core/utils/collections';\nimport TransportManager from 'core/transports/transport_manager';\nimport Strategy from 'core/strategies/strategy';\nimport StrategyOptions from 'core/strategies/strategy_options';\nimport SequentialStrategy from 'core/strategies/sequential_strategy';\nimport BestConnectedEverStrategy from 'core/strategies/best_connected_ever_strategy';\nimport WebSocketPrioritizedCachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/websocket_prioritized_cached_strategy';\nimport DelayedStrategy from 'core/strategies/delayed_strategy';\nimport IfStrategy from 'core/strategies/if_strategy';\nimport FirstConnectedStrategy from 'core/strategies/first_connected_strategy';\nimport { Config } from 'core/config';\n\nfunction testSupportsStrategy(strategy: Strategy) {\n return function() {\n return strategy.isSupported();\n };\n}\n\nvar getDefaultStrategy = function(\n config: Config,\n baseOptions: StrategyOptions,\n defineTransport: Function\n): Strategy {\n var definedTransports = {};\n\n function defineTransportStrategy(\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n ) {\n var transport = defineTransport(\n config,\n name,\n type,\n priority,\n options,\n manager\n );\n\n definedTransports[name] = transport;\n\n return transport;\n }\n\n var ws_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath\n });\n var wss_options: StrategyOptions = Object.assign({}, ws_options, {\n useTLS: true\n });\n var sockjs_options: StrategyOptions = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath\n });\n\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000\n };\n\n var ws_manager = new TransportManager({\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout\n });\n\n var ws_transport = defineTransportStrategy(\n 'ws',\n 'ws',\n 3,\n ws_options,\n ws_manager\n );\n var wss_transport = defineTransportStrategy(\n 'wss',\n 'ws',\n 3,\n wss_options,\n ws_manager\n );\n var sockjs_transport = defineTransportStrategy(\n 'sockjs',\n 'sockjs',\n 1,\n sockjs_options\n );\n var xhr_streaming_transport = defineTransportStrategy(\n 'xhr_streaming',\n 'xhr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xdr_streaming_transport = defineTransportStrategy(\n 'xdr_streaming',\n 'xdr_streaming',\n 1,\n sockjs_options,\n streaming_manager\n );\n var xhr_polling_transport = defineTransportStrategy(\n 'xhr_polling',\n 'xhr_polling',\n 1,\n sockjs_options\n );\n var xdr_polling_transport = defineTransportStrategy(\n 'xdr_polling',\n 'xdr_polling',\n 1,\n sockjs_options\n );\n\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_streaming_transport),\n xhr_streaming_transport,\n xdr_streaming_transport\n )\n ],\n timeouts\n );\n var polling_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(xhr_polling_transport),\n xhr_polling_transport,\n xdr_polling_transport\n )\n ],\n timeouts\n );\n\n var http_loop = new SequentialStrategy(\n [\n new IfStrategy(\n testSupportsStrategy(streaming_loop),\n new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 })\n ]),\n polling_loop\n )\n ],\n timeouts\n );\n\n var http_fallback_loop = new IfStrategy(\n testSupportsStrategy(http_loop),\n http_loop,\n sockjs_loop\n );\n\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 })\n ]);\n } else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 })\n ]);\n }\n\n return new WebSocketPrioritizedCachedStrategy(\n new FirstConnectedStrategy(\n new IfStrategy(\n testSupportsStrategy(ws_transport),\n wsStrategy,\n http_fallback_loop\n )\n ),\n definedTransports,\n {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS\n }\n );\n};\n\nexport default getDefaultStrategy;\n","import { Dependencies } from '../dom/dependencies';\n\n/** Initializes the transport.\n *\n * Fetches resources if needed and then transitions to initialized.\n */\nexport default function() {\n var self = this;\n\n self.timeline.info(\n self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : '')\n })\n );\n\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n } else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(\n self.hooks.file,\n { useTLS: self.options.useTLS },\n function(error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n } else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n }\n );\n } else {\n self.onClose();\n }\n}\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport * as Errors from 'core/errors';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var xdr = new (window).XDomainRequest();\n xdr.ontimeout = function() {\n socket.emit('error', new Errors.RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function(e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function() {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function(xdr: Ajax) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n }\n};\n\nexport default hooks;\n","import Runtime from 'runtime';\nimport RequestHooks from './request_hooks';\nimport Ajax from './ajax';\nimport { default as EventsDispatcher } from '../events/dispatcher';\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\n\nexport default class HTTPRequest extends EventsDispatcher {\n hooks: RequestHooks;\n method: string;\n url: string;\n position: number;\n xhr: Ajax;\n unloader: Function;\n\n constructor(hooks: RequestHooks, method: string, url: string) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n\n start(payload?: any) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n\n this.unloader = () => {\n this.close();\n };\n Runtime.addUnloadListener(this.unloader);\n\n this.xhr.open(this.method, this.url, true);\n\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json'); // ReactNative doesn't set this header by default.\n }\n this.xhr.send(payload);\n }\n\n close() {\n if (this.unloader) {\n Runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n\n onChunk(status: number, data: any) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n } else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n\n private advanceBuffer(buffer: any[]): any {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n } else {\n // chunk is not finished yet, don't move the buffer pointer\n return null;\n }\n }\n\n private isBufferTooLong(buffer: any): boolean {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n","enum State {\n CONNECTING = 0,\n OPEN = 1,\n CLOSED = 3\n}\n\nexport default State;\n","import URLLocation from './url_location';\nimport State from './state';\nimport Socket from '../socket';\nimport SocketHooks from './socket_hooks';\nimport Util from '../util';\nimport Ajax from './ajax';\nimport HTTPRequest from './http_request';\nimport Runtime from 'runtime';\n\nvar autoIncrement = 1;\n\nclass HTTPSocket implements Socket {\n hooks: SocketHooks;\n session: string;\n location: URLLocation;\n readyState: State;\n stream: HTTPRequest;\n\n onopen: () => void;\n onerror: (error: any) => void;\n onclose: (closeEvent: any) => void;\n onmessage: (message: any) => void;\n onactivity: () => void;\n\n constructor(hooks: SocketHooks, url: string) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = State.CONNECTING;\n this.openStream();\n }\n\n send(payload: any) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n\n close(code: any, reason: any) {\n this.onClose(code, reason, true);\n }\n\n /** For internal use only */\n sendRaw(payload: any): boolean {\n if (this.readyState === State.OPEN) {\n try {\n Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(getSendURL(this.location, this.session))\n ).start(payload);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /** For internal use only */\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n\n /** For internal use only */\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = State.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean\n });\n }\n }\n\n private onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === State.OPEN) {\n this.onActivity();\n }\n\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n\n private onOpen(options) {\n if (this.readyState === State.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = State.OPEN;\n\n if (this.onopen) {\n this.onopen();\n }\n } else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n\n private onEvent(event) {\n if (this.readyState === State.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n\n private onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n\n private onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n\n private openStream() {\n this.stream = Runtime.createSocketRequest(\n 'POST',\n getUniqueURL(this.hooks.getReceiveURL(this.location, this.session))\n );\n\n this.stream.bind('chunk', chunk => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', status => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n\n try {\n this.stream.start();\n } catch (error) {\n Util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n\n private closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\n\nfunction getLocation(url): URLLocation {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2]\n };\n}\n\nfunction getSendURL(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr_send';\n}\n\nfunction getUniqueURL(url: string): string {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\n\nfunction replaceHost(url: string, hostname: string): string {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\n\nfunction randomNumber(max: number): number {\n return Runtime.randomInt(max);\n}\n\nfunction randomString(length: number): string {\n var result = [];\n\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n\n return result.join('');\n}\n\nexport default HTTPSocket;\n","import SocketHooks from './socket_hooks';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n};\n\nexport default hooks;\n","import SocketHooks from './socket_hooks';\nimport URLLocation from './url_location';\nimport HTTPSocket from './http_socket';\n\nvar hooks: SocketHooks = {\n getReceiveURL: function(url: URLLocation, session: string): string {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function() {\n // next HTTP request will reset server's activity timer\n },\n sendHeartbeat: function(socket) {\n socket.sendRaw('[]');\n },\n onFinished: function(socket, status) {\n if (status === 200) {\n socket.reconnect();\n } else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport RequestHooks from 'core/http/request_hooks';\nimport Ajax from 'core/http/ajax';\nimport Runtime from 'runtime';\n\nvar hooks: RequestHooks = {\n getRequest: function(socket: HTTPRequest): Ajax {\n var Constructor = Runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function() {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n // this happens only on errors, never after calling close\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function(xhr: Ajax) {\n xhr.onreadystatechange = null;\n xhr.abort();\n }\n};\n\nexport default hooks;\n","import HTTPRequest from 'core/http/http_request';\nimport HTTPSocket from 'core/http/http_socket';\nimport SocketHooks from 'core/http/socket_hooks';\nimport RequestHooks from 'core/http/request_hooks';\nimport streamingHooks from 'core/http/http_streaming_socket';\nimport pollingHooks from 'core/http/http_polling_socket';\nimport xhrHooks from './http_xhr_request';\nimport HTTPFactory from 'core/http/http_factory';\n\nvar HTTP: HTTPFactory = {\n createStreamingSocket(url: string): HTTPSocket {\n return this.createSocket(streamingHooks, url);\n },\n\n createPollingSocket(url: string): HTTPSocket {\n return this.createSocket(pollingHooks, url);\n },\n\n createSocket(hooks: SocketHooks, url: string): HTTPSocket {\n return new HTTPSocket(hooks, url);\n },\n\n createXHR(method: string, url: string): HTTPRequest {\n return this.createRequest(xhrHooks, method, url);\n },\n\n createRequest(hooks: RequestHooks, method: string, url: string): HTTPRequest {\n return new HTTPRequest(hooks, method, url);\n }\n};\n\nexport default HTTP;\n","import xdrHooks from './http_xdomain_request';\nimport HTTP from 'isomorphic/http/http';\n\nHTTP.createXDR = function(method, url) {\n return this.createRequest(xdrHooks, method, url);\n};\n\nexport default HTTP;\n","import Browser from './browser';\nimport { Dependencies, DependenciesReceivers } from './dom/dependencies';\nimport { AuthTransport, AuthTransports } from 'core/auth/auth_transports';\nimport xhrAuth from 'isomorphic/auth/xhr_auth';\nimport jsonpAuth from './auth/jsonp_auth';\nimport TimelineTransport from 'core/timeline/timeline_transport';\nimport TimelineSender from 'core/timeline/timeline_sender';\nimport ScriptRequest from './dom/script_request';\nimport JSONPRequest from './dom/jsonp_request';\nimport * as Collections from 'core/utils/collections';\nimport { ScriptReceivers } from './dom/script_receiver_factory';\nimport jsonpTimeline from './timeline/jsonp_timeline';\nimport Transports from './transports/transports';\nimport Ajax from 'core/http/ajax';\nimport { Network } from './net_info';\nimport getDefaultStrategy from './default_strategy';\nimport transportConnectionInitializer from './transports/transport_connection_initializer';\nimport HTTPFactory from './http/http';\nimport HTTPRequest from 'core/http/http_request';\n\nvar Runtime: Browser = {\n // for jsonp auth\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers,\n DependenciesReceivers,\n getDefaultStrategy,\n Transports,\n transportConnectionInitializer,\n HTTPFactory,\n\n TimelineTransport: jsonpTimeline,\n\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n\n setup(PusherClass): void {\n (window).Pusher = PusherClass; // JSONp requires Pusher to be in the global scope.\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!(window).JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n } else {\n initializeOnDocumentBody();\n }\n },\n\n getDocument(): Document {\n return document;\n },\n\n getProtocol(): string {\n return this.getDocument().location.protocol;\n },\n\n getAuthorizers(): AuthTransports {\n return { ajax: xhrAuth, jsonp: jsonpAuth };\n },\n\n onDocumentBody(callback: Function) {\n if (document.body) {\n callback();\n } else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n\n createJSONPRequest(url: string, data: any): JSONPRequest {\n return new JSONPRequest(url, data);\n },\n\n createScriptRequest(src: string): ScriptRequest {\n return new ScriptRequest(src);\n },\n\n getLocalStorage() {\n try {\n return window.localStorage;\n } catch (e) {\n return undefined;\n }\n },\n\n createXHR(): Ajax {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n } else {\n return this.createMicrosoftXHR();\n }\n },\n\n createXMLHttpRequest(): Ajax {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n\n createMicrosoftXHR(): Ajax {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n\n getNetwork() {\n return Network;\n },\n\n createWebSocket(url: string): any {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n\n createSocketRequest(method: string, url: string): HTTPRequest {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n } else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n } else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n\n isXHRSupported(): boolean {\n var Constructor = this.getXHRAPI();\n return (\n Boolean(Constructor) && new Constructor().withCredentials !== undefined\n );\n },\n\n isXDRSupported(useTLS?: boolean): boolean {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (\n Boolean(window['XDomainRequest']) && documentProtocol === protocol\n );\n },\n\n addUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n } else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n\n removeUnloadListener(listener: any) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n } else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n\n randomInt(max: number): number {\n /**\n * Return values in the range of [0, 1[\n */\n const random = function() {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n\n return random / 2 ** 32;\n };\n\n return Math.floor(random() * max);\n }\n};\n\nexport default Runtime;\n","enum TimelineLevel {\n ERROR = 3,\n INFO = 6,\n DEBUG = 7\n}\n\nexport default TimelineLevel;\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport { default as Level } from './level';\n\nexport interface TimelineOptions {\n level?: Level;\n limit?: number;\n version?: string;\n cluster?: string;\n features?: string[];\n params?: any;\n}\n\nexport default class Timeline {\n key: string;\n session: number;\n events: any[];\n options: TimelineOptions;\n sent: number;\n uniqueID: number;\n\n constructor(key: string, session: number, options: TimelineOptions) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(\n Collections.extend({}, event, { timestamp: Util.now() })\n );\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n\n error(event) {\n this.log(Level.ERROR, event);\n }\n\n info(event) {\n this.log(Level.INFO, event);\n }\n\n debug(event) {\n this.log(Level.DEBUG, event);\n }\n\n isEmpty() {\n return this.events.length === 0;\n }\n\n send(sendfn, callback) {\n var data = Collections.extend(\n {\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events\n },\n this.options.params\n );\n\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n\n return true;\n }\n\n generateUniqueID(): number {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n","import Factory from '../utils/factory';\nimport Util from '../util';\nimport * as Errors from '../errors';\nimport * as Collections from '../utils/collections';\nimport Strategy from './strategy';\nimport Transport from '../transports/transport';\nimport StrategyOptions from './strategy_options';\nimport Handshake from '../connection/handshake';\n\n/** Provides a strategy interface for transports.\n *\n * @param {String} name\n * @param {Number} priority\n * @param {Class} transport\n * @param {Object} options\n */\nexport default class TransportStrategy implements Strategy {\n name: string;\n priority: number;\n transport: Transport;\n options: StrategyOptions;\n\n constructor(\n name: string,\n priority: number,\n transport: Transport,\n options: StrategyOptions\n ) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n\n /** Returns whether the transport is supported in the browser.\n *\n * @returns {Boolean}\n */\n isSupported(): boolean {\n return this.transport.isSupported({\n useTLS: this.options.useTLS\n });\n }\n\n /** Launches a connection attempt and returns a strategy runner.\n *\n * @param {Function} callback\n * @return {Object} strategy runner\n */\n connect(minPriority: number, callback: Function) {\n if (!this.isSupported()) {\n return failAttempt(new Errors.UnsupportedStrategy(), callback);\n } else if (this.priority < minPriority) {\n return failAttempt(new Errors.TransportPriorityTooLow(), callback);\n }\n\n var connected = false;\n var transport = this.transport.createConnection(\n this.name,\n this.priority,\n this.options.key,\n this.options\n );\n var handshake = null;\n\n var onInitialized = function() {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function() {\n handshake = Factory.createHandshake(transport, function(result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function(error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function() {\n unbindListeners();\n var serializedTransport;\n\n // The reason for this try/catch block is that on React Native\n // the WebSocket object is circular. Therefore transport.socket will\n // throw errors upon stringification. Collections.safeJSONStringify\n // discards circular references when serializing.\n serializedTransport = Collections.safeJSONStringify(transport);\n callback(new Errors.TransportClosed(serializedTransport));\n };\n\n var unbindListeners = function() {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n\n // connect will be called automatically after initialization\n transport.initialize();\n\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n },\n forceMinPriority: p => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n } else {\n transport.close();\n }\n }\n }\n };\n }\n}\n\nfunction failAttempt(error: Error, callback: Function) {\n Util.defer(function() {\n callback(error);\n });\n return {\n abort: function() {},\n forceMinPriority: function() {}\n };\n}\n","import * as Collections from '../utils/collections';\nimport Util from '../util';\nimport TransportManager from '../transports/transport_manager';\nimport * as Errors from '../errors';\nimport Strategy from './strategy';\nimport TransportStrategy from './transport_strategy';\nimport StrategyOptions from '../strategies/strategy_options';\nimport { Config } from '../config';\nimport Runtime from 'runtime';\n\nconst { Transports } = Runtime;\n\nexport var defineTransport = function(\n config: Config,\n name: string,\n type: string,\n priority: number,\n options: StrategyOptions,\n manager?: TransportManager\n): Strategy {\n var transportClass = Transports[type];\n if (!transportClass) {\n throw new Errors.UnsupportedTransport(type);\n }\n\n var enabled =\n (!config.enabledTransports ||\n Collections.arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n Collections.arrayIndexOf(config.disabledTransports, name) === -1);\n\n var transport;\n if (enabled) {\n options = Object.assign(\n { ignoreNullOrigin: config.ignoreNullOrigin },\n options\n );\n\n transport = new TransportStrategy(\n name,\n priority,\n manager ? manager.getAssistant(transportClass) : transportClass,\n options\n );\n } else {\n transport = UnsupportedStrategy;\n }\n\n return transport;\n};\n\nvar UnsupportedStrategy: Strategy = {\n isSupported: function() {\n return false;\n },\n connect: function(_, callback) {\n var deferred = Util.defer(function() {\n callback(new Errors.UnsupportedStrategy());\n });\n return {\n abort: function() {\n deferred.ensureAborted();\n },\n forceMinPriority: function() {}\n };\n }\n};\n","import ConnectionManager from './connection/connection_manager';\nimport {\n ChannelAuthorizationOptions,\n UserAuthenticationOptions\n} from './auth/options';\nimport {\n ChannelAuthorizerGenerator,\n DeprecatedAuthOptions\n} from './auth/deprecated_channel_authorizer';\nimport { AuthTransport, Transport } from './config';\nimport * as nacl from 'tweetnacl';\nimport Logger from './logger';\n\nexport interface Options {\n activityTimeout?: number;\n\n auth?: DeprecatedAuthOptions; // DEPRECATED use channelAuthorization instead\n authEndpoint?: string; // DEPRECATED use channelAuthorization instead\n authTransport?: AuthTransport; // DEPRECATED use channelAuthorization instead\n authorizer?: ChannelAuthorizerGenerator; // DEPRECATED use channelAuthorization instead\n\n channelAuthorization?: ChannelAuthorizationOptions;\n userAuthentication?: UserAuthenticationOptions;\n\n cluster: string;\n enableStats?: boolean;\n disableStats?: boolean;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n forceTLS?: boolean;\n httpHost?: string;\n httpPath?: string;\n httpPort?: number;\n httpsPort?: number;\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n pongTimeout?: number;\n statsHost?: string;\n timelineParams?: any;\n unavailableTimeout?: number;\n wsHost?: string;\n wsPath?: string;\n wsPort?: number;\n wssPort?: number;\n}\n\nexport interface ClusterOptions {\n appKey: string;\n cluster: string;\n}\n\nexport function validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n}\n","import {\n UserAuthenticationCallback,\n InternalAuthOptions,\n UserAuthenticationHandler,\n UserAuthenticationRequestParams,\n AuthRequestType\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: UserAuthenticationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst UserAuthenticator = (\n authOptions: InternalAuthOptions\n): UserAuthenticationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: UserAuthenticationRequestParams,\n callback: UserAuthenticationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.UserAuthentication,\n callback\n );\n };\n};\n\nexport default UserAuthenticator;\n","import {\n AuthRequestType,\n InternalAuthOptions,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n ChannelAuthorizationCallback\n} from './options';\n\nimport Runtime from 'runtime';\n\nconst composeChannelQuery = (\n params: ChannelAuthorizationRequestParams,\n authOptions: InternalAuthOptions\n) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n\n return query;\n};\n\nconst ChannelAuthorizer = (\n authOptions: InternalAuthOptions\n): ChannelAuthorizationHandler => {\n if (typeof Runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const query = composeChannelQuery(params, authOptions);\n\n Runtime.getAuthorizers()[authOptions.transport](\n Runtime,\n query,\n authOptions,\n AuthRequestType.ChannelAuthorization,\n callback\n );\n };\n};\n\nexport default ChannelAuthorizer;\n","import Channel from '../channels/channel';\nimport {\n ChannelAuthorizationCallback,\n ChannelAuthorizationHandler,\n ChannelAuthorizationRequestParams,\n InternalAuthOptions\n} from './options';\n\nexport interface DeprecatedChannelAuthorizer {\n authorize(socketId: string, callback: ChannelAuthorizationCallback): void;\n}\n\nexport interface ChannelAuthorizerGenerator {\n (\n channel: Channel,\n options: DeprecatedAuthorizerOptions\n ): DeprecatedChannelAuthorizer;\n}\n\nexport interface DeprecatedAuthOptions {\n params?: any;\n headers?: any;\n}\n\nexport interface DeprecatedAuthorizerOptions {\n authTransport: 'ajax' | 'jsonp';\n authEndpoint: string;\n auth?: DeprecatedAuthOptions;\n}\n\nexport const ChannelAuthorizerProxy = (\n pusher,\n authOptions: InternalAuthOptions,\n channelAuthorizerGenerator: ChannelAuthorizerGenerator\n): ChannelAuthorizationHandler => {\n const deprecatedAuthorizerOptions: DeprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers\n }\n };\n return (\n params: ChannelAuthorizationRequestParams,\n callback: ChannelAuthorizationCallback\n ) => {\n const channel = pusher.channel(params.channelName);\n // This line creates a new channel authorizer every time.\n // In the past, this was only done once per channel and reused.\n // We can do that again if we want to keep this behavior intact.\n const channelAuthorizer: DeprecatedChannelAuthorizer = channelAuthorizerGenerator(\n channel,\n deprecatedAuthorizerOptions\n );\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n","import { Options } from './options';\nimport Defaults from './defaults';\nimport {\n ChannelAuthorizationHandler,\n UserAuthenticationHandler,\n ChannelAuthorizationOptions\n} from './auth/options';\nimport UserAuthenticator from './auth/user_authenticator';\nimport ChannelAuthorizer from './auth/channel_authorizer';\nimport { ChannelAuthorizerProxy } from './auth/deprecated_channel_authorizer';\nimport Runtime from 'runtime';\nimport * as nacl from 'tweetnacl';\n\nexport type AuthTransport = 'ajax' | 'jsonp';\nexport type Transport =\n | 'ws'\n | 'wss'\n | 'xhr_streaming'\n | 'xhr_polling'\n | 'sockjs';\n\nexport interface Config {\n // these are all 'required' config parameters, it's not necessary for the user\n // to set them, but they have configured defaults.\n activityTimeout: number;\n enableStats: boolean;\n httpHost: string;\n httpPath: string;\n httpPort: number;\n httpsPort: number;\n pongTimeout: number;\n statsHost: string;\n unavailableTimeout: number;\n useTLS: boolean;\n wsHost: string;\n wsPath: string;\n wsPort: number;\n wssPort: number;\n userAuthenticator: UserAuthenticationHandler;\n channelAuthorizer: ChannelAuthorizationHandler;\n\n // these are all optional parameters or overrrides. The customer can set these\n // but it's not strictly necessary\n forceTLS?: boolean;\n cluster?: string;\n disabledTransports?: Transport[];\n enabledTransports?: Transport[];\n ignoreNullOrigin?: boolean;\n nacl?: nacl;\n timelineParams?: any;\n}\n\n// getConfig mainly sets the defaults for the options that are not provided\nexport function getConfig(opts: Options, pusher): Config {\n let config: Config = {\n activityTimeout: opts.activityTimeout || Defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || Defaults.httpPath,\n httpPort: opts.httpPort || Defaults.httpPort,\n httpsPort: opts.httpsPort || Defaults.httpsPort,\n pongTimeout: opts.pongTimeout || Defaults.pongTimeout,\n statsHost: opts.statsHost || Defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || Defaults.unavailableTimeout,\n wsPath: opts.wsPath || Defaults.wsPath,\n wsPort: opts.wsPort || Defaults.wsPort,\n wssPort: opts.wssPort || Defaults.wssPort,\n\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher)\n };\n\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts) config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n\n return config;\n}\n\nfunction getHttpHost(opts: Options): string {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return Defaults.httpHost;\n}\n\nfunction getWebsocketHost(opts: Options): string {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\n\nfunction getWebsocketHostFromCluster(cluster: string): string {\n return `ws-${cluster}.pusher.com`;\n}\n\nfunction shouldUseTLS(opts: Options): boolean {\n if (Runtime.getProtocol() === 'https:') {\n return true;\n } else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\n\n// if enableStats is set take the value\n// if disableStats is set take the inverse\n// otherwise default to false\nfunction getEnableStatsConfig(opts: Options): boolean {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\n\nfunction buildUserAuthenticator(opts: Options): UserAuthenticationHandler {\n const userAuthentication = {\n ...Defaults.userAuthentication,\n ...opts.userAuthentication\n };\n if (\n 'customHandler' in userAuthentication &&\n userAuthentication['customHandler'] != null\n ) {\n return userAuthentication['customHandler'];\n }\n\n return UserAuthenticator(userAuthentication);\n}\n\nfunction buildChannelAuth(opts: Options, pusher): ChannelAuthorizationOptions {\n let channelAuthorization: ChannelAuthorizationOptions;\n if ('channelAuthorization' in opts) {\n channelAuthorization = {\n ...Defaults.channelAuthorization,\n ...opts.channelAuthorization\n };\n } else {\n channelAuthorization = {\n transport: opts.authTransport || Defaults.authTransport,\n endpoint: opts.authEndpoint || Defaults.authEndpoint\n };\n if ('auth' in opts) {\n if ('params' in opts.auth) channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts)\n channelAuthorization.customHandler = ChannelAuthorizerProxy(\n pusher,\n channelAuthorization,\n opts.authorizer\n );\n }\n return channelAuthorization;\n}\n\nfunction buildChannelAuthorizer(\n opts: Options,\n pusher\n): ChannelAuthorizationHandler {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (\n 'customHandler' in channelAuthorization &&\n channelAuthorization['customHandler'] != null\n ) {\n return channelAuthorization['customHandler'];\n }\n\n return ChannelAuthorizer(channelAuthorization);\n}\n","import Logger from './logger';\nimport Pusher from './pusher';\nimport EventsDispatcher from './events/dispatcher';\n\nexport default class WatchlistFacade extends EventsDispatcher {\n private pusher: Pusher;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach(watchlistEvent => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n\n private bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', pusherEvent => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n","function flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nexport default flatPromise;\n","import Pusher from './pusher';\nimport Logger from './logger';\nimport {\n UserAuthenticationData,\n UserAuthenticationCallback\n} from './auth/options';\nimport Channel from './channels/channel';\nimport WatchlistFacade from './watchlist';\nimport EventsDispatcher from './events/dispatcher';\nimport flatPromise from './utils/flat_promise';\n\nexport default class UserFacade extends EventsDispatcher {\n pusher: Pusher;\n signin_requested: boolean = false;\n user_data: any = null;\n serverToUserChannel: Channel = null;\n signinDonePromise: Promise = null;\n watchlist: WatchlistFacade;\n private _signinDoneResolve: Function = null;\n\n public constructor(pusher: Pusher) {\n super(function(eventName, data) {\n Logger.debug('No callbacks on user for ' + eventName);\n });\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n\n this.watchlist = new WatchlistFacade(pusher);\n\n this.pusher.connection.bind('message', event => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (\n this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel\n ) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n\n public signin() {\n if (this.signin_requested) {\n return;\n }\n\n this.signin_requested = true;\n this._signin();\n }\n\n private _signin() {\n if (!this.signin_requested) {\n return;\n }\n\n this._newSigninPromiseIfNeeded();\n\n if (this.pusher.connection.state !== 'connected') {\n // Signin will be attempted when the connection is connected\n return;\n }\n\n this.pusher.config.userAuthenticator(\n {\n socketId: this.pusher.connection.socket_id\n },\n this._onAuthorize\n );\n }\n\n private _onAuthorize: UserAuthenticationCallback = (\n err,\n authData: UserAuthenticationData\n ) => {\n if (err) {\n Logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data\n });\n\n // Later when we get pusher:singin_success event, the user will be marked as signed in\n };\n\n private _onSigninSuccess(data: any) {\n try {\n this.user_data = JSON.parse(data.user_data);\n } catch (e) {\n Logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n Logger.error(\n `user_data doesn't contain an id. user_data: ${this.user_data}`\n );\n this._cleanup();\n return;\n }\n\n // Signin succeeded\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n\n private _subscribeChannels() {\n const ensure_subscribed = channel => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.pusher.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n };\n\n this.serverToUserChannel = new Channel(\n `#server-to-user-${this.user_data.id}`,\n this.pusher\n );\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (\n eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0\n ) {\n // ignore internal events\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n\n private _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n\n if (this.signin_requested) {\n // If signin is in progress and cleanup is called,\n // Mark the current signin process as done.\n this._signinDoneResolve();\n }\n }\n\n private _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n\n // If there is a promise and it is not resolved, return without creating a new one.\n if (this.signinDonePromise && !(this.signinDonePromise as any).done) {\n return;\n }\n\n // This promise is never rejected.\n // It gets resolved when the signin process is done whether it failed or succeeded\n const { promise, resolve, reject: _ } = flatPromise();\n (promise as any).done = false;\n const setDone = () => {\n (promise as any).done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n","import AbstractRuntime from '../runtimes/interface';\nimport Runtime from 'runtime';\nimport * as Collections from './utils/collections';\nimport Channels from './channels/channels';\nimport Channel from './channels/channel';\nimport { default as EventsDispatcher } from './events/dispatcher';\nimport Timeline from './timeline/timeline';\nimport TimelineSender from './timeline/timeline_sender';\nimport TimelineLevel from './timeline/level';\nimport { defineTransport } from './strategies/strategy_builder';\nimport ConnectionManager from './connection/connection_manager';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport { Options, ClusterOptions, validateOptions } from './options';\nimport { Config, getConfig } from './config';\nimport StrategyOptions from './strategies/strategy_options';\nimport UserFacade from './user';\n\nexport default class Pusher {\n /* STATIC PROPERTIES */\n static instances: Pusher[] = [];\n static isReady: boolean = false;\n static logToConsole: boolean = false;\n\n // for jsonp\n static Runtime: AbstractRuntime = Runtime;\n static ScriptReceivers: any = (Runtime).ScriptReceivers;\n static DependenciesReceivers: any = (Runtime).DependenciesReceivers;\n static auth_callbacks: any = (Runtime).auth_callbacks;\n\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n\n static log: (message: any) => void;\n\n private static getClientFeatures(): string[] {\n return Collections.keys(\n Collections.filterObject({ ws: Runtime.Transports.ws }, function(t) {\n return t.isSupported({});\n })\n );\n }\n\n /* INSTANCE PROPERTIES */\n key: string;\n options: Options;\n config: Config;\n channels: Channels;\n global_emitter: EventsDispatcher;\n sessionID: number;\n timeline: Timeline;\n timelineSender: TimelineSender;\n connection: ConnectionManager;\n timelineSenderTimer: PeriodicTimer;\n user: UserFacade;\n constructor(app_key: string, options: Options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.config = getConfig(options, this);\n\n this.channels = Factory.createChannels();\n this.global_emitter = new EventsDispatcher();\n this.sessionID = Runtime.randomInt(1000000000);\n\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: TimelineLevel.INFO,\n version: Defaults.VERSION\n });\n if (this.config.enableStats) {\n this.timelineSender = Factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + Runtime.TimelineTransport.name\n });\n }\n\n var getStrategy = (options: StrategyOptions) => {\n return Runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n\n this.connection = Factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS)\n });\n\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n\n this.connection.bind('message', event => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n // Emit globally [deprecated]\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', err => {\n Logger.warn(err);\n });\n\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n\n this.user = new UserFacade(this);\n\n if (Pusher.isReady) {\n this.connect();\n }\n }\n\n /**\n * Allows you to switch Pusher cluster without\n * losing all the channels/subscription binding\n * as this is internally managed by the SDK.\n */\n switchCluster(options: ClusterOptions) {\n const { appKey, cluster } = options;\n this.key = appKey;\n this.options = { ...this.options, cluster };\n this.config = getConfig(this.options, this);\n this.connection.switchCluster(this.key);\n }\n\n channel(name: string): Channel {\n return this.channels.find(name);\n }\n\n allChannels(): Channel[] {\n return this.channels.all();\n }\n\n connect() {\n this.connection.connect();\n\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function() {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n\n disconnect() {\n this.connection.disconnect();\n\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n\n bind(event_name: string, callback: Function, context?: any): Pusher {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n\n unbind(event_name?: string, callback?: Function, context?: any): Pusher {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n\n bind_global(callback: Function): Pusher {\n this.global_emitter.bind_global(callback);\n return this;\n }\n\n unbind_global(callback?: Function): Pusher {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n\n unbind_all(callback?: Function): Pusher {\n this.global_emitter.unbind_all();\n return this;\n }\n\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n\n subscribe(channel_name: string) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n } else if (\n !channel.subscriptionPending &&\n this.connection.state === 'connected'\n ) {\n channel.subscribe();\n }\n return channel;\n }\n\n unsubscribe(channel_name: string) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n } else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n\n send_event(event_name: string, data: any, channel?: string) {\n return this.connection.send_event(event_name, data, channel);\n }\n\n shouldUseTLS(): boolean {\n return this.config.useTLS;\n }\n\n signin() {\n this.user.signin();\n }\n}\n\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\n\nRuntime.setup(Pusher);\n"],"sourceRoot":""}