From f85291793fd1e21d0fa87e0be4b7fa14ac9e8f83 Mon Sep 17 00:00:00 2001 From: Tina Hammar Date: Tue, 2 May 2023 18:14:01 +0200 Subject: [PATCH] fixed color-picker + compiling paths --- bin/build.mjs | 60 +- packages/app/dist/echo.js.map | 7 + packages/app/dist/index.js | 7095 +++- packages/app/dist/index.js.map | 7 + packages/app/dist/theme.css | 32 +- packages/app/dist/theme.css.map | 1 + .../forms/dist/components/color-picker.js | 534 +- .../forms/dist/components/color-picker.js.map | 7 + .../forms/dist/components/date-time-picker.js | 2148 +- .../dist/components/date-time-picker.js.map | 7 + packages/forms/dist/components/file-upload.js | 11920 ++++++- .../forms/dist/components/file-upload.js.map | 7 + packages/forms/dist/components/key-value.js | 66 +- .../forms/dist/components/key-value.js.map | 7 + .../forms/dist/components/markdown-editor.js | 27362 +++++++++++++++- .../dist/components/markdown-editor.js.map | 7 + packages/forms/dist/components/rich-editor.js | 5483 +++- .../forms/dist/components/rich-editor.js.map | 7 + packages/forms/dist/components/select.js | 5871 +++- packages/forms/dist/components/select.js.map | 7 + packages/forms/dist/components/tags-input.js | 26 +- .../forms/dist/components/tags-input.js.map | 7 + packages/forms/dist/components/text-input.js | 3023 +- .../forms/dist/components/text-input.js.map | 7 + packages/forms/dist/components/textarea.js | 20 +- .../forms/dist/components/textarea.js.map | 7 + packages/forms/dist/index.css | 2792 +- packages/forms/dist/index.css.map | 7 + packages/forms/dist/index.js | 3 +- packages/forms/dist/index.js.map | 7 + .../resources/js/components/color-picker.js | 9 +- packages/notifications/dist/index.js | 638 +- packages/notifications/dist/index.js.map | 7 + packages/support/dist/async-alpine.js | 1 - packages/support/dist/async-alpine.js.map | 7 + packages/support/dist/index.js | 4935 ++- packages/support/dist/index.js.map | 7 + packages/tables/dist/index.js | 101 +- packages/tables/dist/index.js.map | 7 + packages/widgets/dist/components/chart.js | 13251 +++++++- packages/widgets/dist/components/chart.js.map | 7 + .../stats-overview/card/chart.js.map | 7 + 42 files changed, 85174 insertions(+), 337 deletions(-) create mode 100644 packages/app/dist/echo.js.map create mode 100644 packages/app/dist/index.js.map create mode 100644 packages/app/dist/theme.css.map create mode 100644 packages/forms/dist/components/color-picker.js.map create mode 100644 packages/forms/dist/components/date-time-picker.js.map create mode 100644 packages/forms/dist/components/file-upload.js.map create mode 100644 packages/forms/dist/components/key-value.js.map create mode 100644 packages/forms/dist/components/markdown-editor.js.map create mode 100644 packages/forms/dist/components/rich-editor.js.map create mode 100644 packages/forms/dist/components/select.js.map create mode 100644 packages/forms/dist/components/tags-input.js.map create mode 100644 packages/forms/dist/components/text-input.js.map create mode 100644 packages/forms/dist/components/textarea.js.map create mode 100644 packages/forms/dist/index.css.map create mode 100644 packages/forms/dist/index.js.map create mode 100644 packages/notifications/dist/index.js.map create mode 100644 packages/support/dist/async-alpine.js.map create mode 100644 packages/support/dist/index.js.map create mode 100644 packages/tables/dist/index.js.map create mode 100644 packages/widgets/dist/components/chart.js.map create mode 100644 packages/widgets/dist/components/stats-overview/card/chart.js.map diff --git a/bin/build.mjs b/bin/build.mjs index bdbd98a56e..23fb752611 100644 --- a/bin/build.mjs +++ b/bin/build.mjs @@ -1,7 +1,10 @@ import * as esbuild from 'esbuild' -import postcss from 'esbuild-postcss' +import fs from "fs"; +import Path from "path"; +//import postcss from 'esbuild-postcss' const shouldWatch = process.argv.includes('--watch') +let tempPath = null async function compile(options) { const ctx = await esbuild.context(options) @@ -34,7 +37,7 @@ const esm = { '.woff2': 'file', }, plugins: [ - postcss(), //remove if you don't import css files in your js, else: create a postcss.config.js file + //postcss(), //enable if you importing css in .js, and: create a postcss.config.js file { name: 'watchPlugin', setup(build) { @@ -73,25 +76,32 @@ const formComponents = [ 'text-input', 'textarea', ] -formComponents.forEach((component) => { - esm.entryPoints = `packages/forms/resources/js/components/${component}.js` - esm.outfile = `packages/forms/dist/components/${component}.js` - compile(esm) + +formComponents.forEach((cmp) => { + compile({ + ...esm, + entryPoints: [`./packages/forms/resources/js/components/${cmp}.js`], + outfile: `./packages/forms/dist/components/${cmp}.js`, + }) }) -esm.entryPoints = [`packages/support/resources/js/async-alpine.js`] -esm.outfile = `packages/support/dist/async-alpine.js` -compile(esm) +compile({ + ...esm, + entryPoints: [`./packages/support/resources/js/async-alpine.js`], + outfile: `./packages/support/dist/async-alpine.js`, +}) +compile({ + ...esm, + entryPoints: [`./packages/widgets/resources/js/components/chart.js`], + outfile: `./packages/widgets/dist/components/chart.js`, +}) -esm.entryPoints = [`packages/widgets/resources/js/components/chart.js`] -esm.outfile = `packages/widgets/dist/components/chart.js` -compile(esm) - -esm.entryPoints = [`packages/widgets/resources/js/components/stats-overview/card/chart.js`] -esm.outfile = `packages/widgets/dist/components/stats-overview/card/chart.js` -compile(esm) - +compile({ + ...esm, + entryPoints: [`./packages/widgets/resources/js/components/stats-overview/card/chart.js`], + outfile: `./packages/widgets/dist/components/stats-overview/card/chart.js`, +}) //-------------------------------------------------------------------------------------------------- //window scripts ----------------------------------------------------------------------------------- @@ -99,13 +109,17 @@ compile(esm) const pkgs = ['app', 'forms', 'notifications', 'support', 'tables'] //renamed package to pkg, because package is a reserved word in JS pkgs.forEach((pkg) => { - invoked.entryPoints = [`packages/${pkg}/resources/js/index.js`] - invoked.outfile = `packages/${pkg}/dist/index.js` - compile(invoked) + compile({ + ...invoked, + entryPoints: [`./packages/${pkg}/resources/js/index.js`], + outfile: `./packages/${pkg}/dist/index.js`, + }) }) -invoked.entryPoints = [`packages/app/resources/js/echo.js`] -invoked.outfile = `packages/app/dist/echo.js` -compile(invoked) +compile({ + ...invoked, + entryPoints: [`./packages/app/resources/js/echo.js`], + outfile: `./packages/app/dist/echo.js`, +}) //-------------------------------------------------------------------------------------------------- diff --git a/packages/app/dist/echo.js.map b/packages/app/dist/echo.js.map new file mode 100644 index 0000000000..c813a27197 --- /dev/null +++ b/packages/app/dist/echo.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../node_modules/pusher-js/dist/web/webpack:/Pusher/webpack/universalModuleDefinition", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/webpack/bootstrap", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/node_modules/@stablelib/base64/base64.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/node_modules/@stablelib/utf8/utf8.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/pusher.js", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/dom/script_receiver_factory.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/defaults.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/dom/dependency_loader.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/dom/dependencies.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/url_store.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/auth/options.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/errors.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/isomorphic/auth/xhr_auth.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/base64.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/timers/abstract_timer.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/timers/index.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/util.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/collections.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/logger.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/auth/jsonp_auth.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/dom/script_request.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/dom/jsonp_request.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/timeline/jsonp_timeline.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/transports/url_schemes.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/events/callback_registry.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/events/dispatcher.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/transports/transport_connection.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/transports/transport.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/isomorphic/transports/transports.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/transports/transports.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/net_info.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/transports/assistant_to_the_transport_manager.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/connection/protocol/protocol.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/connection/connection.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/connection/handshake/index.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/timeline/timeline_sender.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/channel.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/private_channel.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/members.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/presence_channel.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/encrypted_channel.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/connection/connection_manager.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/channels/channels.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/factory.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/transports/transport_manager.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/sequential_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/best_connected_ever_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/cached_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/delayed_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/if_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/first_connected_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/default_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/transports/transport_connection_initializer.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/http/http_xdomain_request.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/http/http_request.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/http/state.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/http/http_socket.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/http/http_streaming_socket.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/http/http_polling_socket.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/isomorphic/http/http_xhr_request.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/isomorphic/http/http.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/http/http.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/runtimes/web/runtime.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/timeline/level.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/timeline/timeline.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/transport_strategy.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/strategies/strategy_builder.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/auth/user_authenticator.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/auth/channel_authorizer.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/auth/deprecated_channel_authorizer.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/config.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/watchlist.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/utils/flat_promise.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/user.ts", "../../../node_modules/pusher-js/dist/web/webpack:/Pusher/src/core/pusher.ts", "../../../node_modules/laravel-echo/dist/echo.js", "../resources/js/echo.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 cluster: string;\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 cluster: 'mt1',\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 /** 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 last successful transport and uses it for following attempts.\n *\n * @param {Strategy} strategy\n * @param {Object} transports\n * @param {Object} options\n */\nexport default class CachedStrategy 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\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 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 }\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 );\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) {\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 });\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 CachedStrategy, {\n TransportStrategyDictionary\n} from 'core/strategies/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 lives: 2,\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 CachedStrategy(\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 {\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';\nimport Logger from './logger';\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 || Defaults.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 if (opts.cluster) {\n return getWebsocketHostFromCluster(opts.cluster);\n }\n return getWebsocketHostFromCluster(Defaults.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 Util from './util';\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 ConnectionManagerOptions from './connection/connection_manager_options';\nimport { PeriodicTimer } from './utils/timers';\nimport Defaults from './defaults';\nimport * as DefaultConfig from './config';\nimport Logger from './logger';\nimport Factory from './utils/factory';\nimport UrlStore from 'core/utils/url_store';\nimport { Options } 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 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 options = options || {};\n if (!options.cluster && !(options.wsHost || options.httpHost)) {\n let suffix = UrlStore.buildLogSuffix('javascriptQuickStart');\n Logger.warn(\n `You should always specify a cluster when connecting. ${suffix}`\n );\n }\n if ('disableStats' in options) {\n Logger.warn(\n 'The disableStats option is deprecated in favor of enableStats'\n );\n }\n\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 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", "function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\n/**\r\n * This class represents a basic channel.\r\n */\nvar Channel = /*#__PURE__*/function () {\n function Channel() {\n _classCallCheck(this, Channel);\n }\n\n _createClass(Channel, [{\n key: \"listenForWhisper\",\n value:\n /**\r\n * Listen for a whisper event on the channel instance.\r\n */\n function listenForWhisper(event, callback) {\n return this.listen('.client-' + event, callback);\n }\n /**\r\n * Listen for an event on the channel instance.\r\n */\n\n }, {\n key: \"notification\",\n value: function notification(callback) {\n return this.listen('.Illuminate\\\\Notifications\\\\Events\\\\BroadcastNotificationCreated', callback);\n }\n /**\r\n * Stop listening for a whisper event on the channel instance.\r\n */\n\n }, {\n key: \"stopListeningForWhisper\",\n value: function stopListeningForWhisper(event, callback) {\n return this.stopListening('.client-' + event, callback);\n }\n }]);\n\n return Channel;\n}();\n\n/**\r\n * Event name formatter\r\n */\nvar EventFormatter = /*#__PURE__*/function () {\n /**\r\n * Create a new class instance.\r\n */\n function EventFormatter(namespace) {\n _classCallCheck(this, EventFormatter);\n\n this.setNamespace(namespace);\n }\n /**\r\n * Format the given event name.\r\n */\n\n\n _createClass(EventFormatter, [{\n key: \"format\",\n value: function format(event) {\n if (event.charAt(0) === '.' || event.charAt(0) === '\\\\') {\n return event.substr(1);\n } else if (this.namespace) {\n event = this.namespace + '.' + event;\n }\n\n return event.replace(/\\./g, '\\\\');\n }\n /**\r\n * Set the event namespace.\r\n */\n\n }, {\n key: \"setNamespace\",\n value: function setNamespace(value) {\n this.namespace = value;\n }\n }]);\n\n return EventFormatter;\n}();\n\n/**\r\n * This class represents a Pusher channel.\r\n */\n\nvar PusherChannel = /*#__PURE__*/function (_Channel) {\n _inherits(PusherChannel, _Channel);\n\n var _super = _createSuper(PusherChannel);\n\n /**\r\n * Create a new class instance.\r\n */\n function PusherChannel(pusher, name, options) {\n var _this;\n\n _classCallCheck(this, PusherChannel);\n\n _this = _super.call(this);\n _this.name = name;\n _this.pusher = pusher;\n _this.options = options;\n _this.eventFormatter = new EventFormatter(_this.options.namespace);\n\n _this.subscribe();\n\n return _this;\n }\n /**\r\n * Subscribe to a Pusher channel.\r\n */\n\n\n _createClass(PusherChannel, [{\n key: \"subscribe\",\n value: function subscribe() {\n this.subscription = this.pusher.subscribe(this.name);\n }\n /**\r\n * Unsubscribe from a Pusher channel.\r\n */\n\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe() {\n this.pusher.unsubscribe(this.name);\n }\n /**\r\n * Listen for an event on the channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(event, callback) {\n this.on(this.eventFormatter.format(event), callback);\n return this;\n }\n /**\r\n * Listen for all events on the channel instance.\r\n */\n\n }, {\n key: \"listenToAll\",\n value: function listenToAll(callback) {\n var _this2 = this;\n\n this.subscription.bind_global(function (event, data) {\n if (event.startsWith('pusher:')) {\n return;\n }\n\n var namespace = _this2.options.namespace.replace(/\\./g, '\\\\');\n\n var formattedEvent = event.startsWith(namespace) ? event.substring(namespace.length + 1) : '.' + event;\n callback(formattedEvent, data);\n });\n return this;\n }\n /**\r\n * Stop listening for an event on the channel instance.\r\n */\n\n }, {\n key: \"stopListening\",\n value: function stopListening(event, callback) {\n if (callback) {\n this.subscription.unbind(this.eventFormatter.format(event), callback);\n } else {\n this.subscription.unbind(this.eventFormatter.format(event));\n }\n\n return this;\n }\n /**\r\n * Stop listening for all events on the channel instance.\r\n */\n\n }, {\n key: \"stopListeningToAll\",\n value: function stopListeningToAll(callback) {\n if (callback) {\n this.subscription.unbind_global(callback);\n } else {\n this.subscription.unbind_global();\n }\n\n return this;\n }\n /**\r\n * Register a callback to be called anytime a subscription succeeds.\r\n */\n\n }, {\n key: \"subscribed\",\n value: function subscribed(callback) {\n this.on('pusher:subscription_succeeded', function () {\n callback();\n });\n return this;\n }\n /**\r\n * Register a callback to be called anytime a subscription error occurs.\r\n */\n\n }, {\n key: \"error\",\n value: function error(callback) {\n this.on('pusher:subscription_error', function (status) {\n callback(status);\n });\n return this;\n }\n /**\r\n * Bind a channel to an event.\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, callback) {\n this.subscription.bind(event, callback);\n return this;\n }\n }]);\n\n return PusherChannel;\n}(Channel);\n\n/**\r\n * This class represents a Pusher private channel.\r\n */\n\nvar PusherPrivateChannel = /*#__PURE__*/function (_PusherChannel) {\n _inherits(PusherPrivateChannel, _PusherChannel);\n\n var _super = _createSuper(PusherPrivateChannel);\n\n function PusherPrivateChannel() {\n _classCallCheck(this, PusherPrivateChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(PusherPrivateChannel, [{\n key: \"whisper\",\n value:\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n function whisper(eventName, data) {\n this.pusher.channels.channels[this.name].trigger(\"client-\".concat(eventName), data);\n return this;\n }\n }]);\n\n return PusherPrivateChannel;\n}(PusherChannel);\n\n/**\r\n * This class represents a Pusher private channel.\r\n */\n\nvar PusherEncryptedPrivateChannel = /*#__PURE__*/function (_PusherChannel) {\n _inherits(PusherEncryptedPrivateChannel, _PusherChannel);\n\n var _super = _createSuper(PusherEncryptedPrivateChannel);\n\n function PusherEncryptedPrivateChannel() {\n _classCallCheck(this, PusherEncryptedPrivateChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(PusherEncryptedPrivateChannel, [{\n key: \"whisper\",\n value:\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n function whisper(eventName, data) {\n this.pusher.channels.channels[this.name].trigger(\"client-\".concat(eventName), data);\n return this;\n }\n }]);\n\n return PusherEncryptedPrivateChannel;\n}(PusherChannel);\n\n/**\r\n * This class represents a Pusher presence channel.\r\n */\n\nvar PusherPresenceChannel = /*#__PURE__*/function (_PusherChannel) {\n _inherits(PusherPresenceChannel, _PusherChannel);\n\n var _super = _createSuper(PusherPresenceChannel);\n\n function PusherPresenceChannel() {\n _classCallCheck(this, PusherPresenceChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(PusherPresenceChannel, [{\n key: \"here\",\n value:\n /**\r\n * Register a callback to be called anytime the member list changes.\r\n */\n function here(callback) {\n this.on('pusher:subscription_succeeded', function (data) {\n callback(Object.keys(data.members).map(function (k) {\n return data.members[k];\n }));\n });\n return this;\n }\n /**\r\n * Listen for someone joining the channel.\r\n */\n\n }, {\n key: \"joining\",\n value: function joining(callback) {\n this.on('pusher:member_added', function (member) {\n callback(member.info);\n });\n return this;\n }\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n\n }, {\n key: \"whisper\",\n value: function whisper(eventName, data) {\n this.pusher.channels.channels[this.name].trigger(\"client-\".concat(eventName), data);\n return this;\n }\n /**\r\n * Listen for someone leaving the channel.\r\n */\n\n }, {\n key: \"leaving\",\n value: function leaving(callback) {\n this.on('pusher:member_removed', function (member) {\n callback(member.info);\n });\n return this;\n }\n }]);\n\n return PusherPresenceChannel;\n}(PusherChannel);\n\n/**\r\n * This class represents a Socket.io channel.\r\n */\n\nvar SocketIoChannel = /*#__PURE__*/function (_Channel) {\n _inherits(SocketIoChannel, _Channel);\n\n var _super = _createSuper(SocketIoChannel);\n\n /**\r\n * Create a new class instance.\r\n */\n function SocketIoChannel(socket, name, options) {\n var _this;\n\n _classCallCheck(this, SocketIoChannel);\n\n _this = _super.call(this);\n /**\r\n * The event callbacks applied to the socket.\r\n */\n\n _this.events = {};\n /**\r\n * User supplied callbacks for events on this channel.\r\n */\n\n _this.listeners = {};\n _this.name = name;\n _this.socket = socket;\n _this.options = options;\n _this.eventFormatter = new EventFormatter(_this.options.namespace);\n\n _this.subscribe();\n\n return _this;\n }\n /**\r\n * Subscribe to a Socket.io channel.\r\n */\n\n\n _createClass(SocketIoChannel, [{\n key: \"subscribe\",\n value: function subscribe() {\n this.socket.emit('subscribe', {\n channel: this.name,\n auth: this.options.auth || {}\n });\n }\n /**\r\n * Unsubscribe from channel and ubind event callbacks.\r\n */\n\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe() {\n this.unbind();\n this.socket.emit('unsubscribe', {\n channel: this.name,\n auth: this.options.auth || {}\n });\n }\n /**\r\n * Listen for an event on the channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(event, callback) {\n this.on(this.eventFormatter.format(event), callback);\n return this;\n }\n /**\r\n * Stop listening for an event on the channel instance.\r\n */\n\n }, {\n key: \"stopListening\",\n value: function stopListening(event, callback) {\n this.unbindEvent(this.eventFormatter.format(event), callback);\n return this;\n }\n /**\r\n * Register a callback to be called anytime a subscription succeeds.\r\n */\n\n }, {\n key: \"subscribed\",\n value: function subscribed(callback) {\n this.on('connect', function (socket) {\n callback(socket);\n });\n return this;\n }\n /**\r\n * Register a callback to be called anytime an error occurs.\r\n */\n\n }, {\n key: \"error\",\n value: function error(callback) {\n return this;\n }\n /**\r\n * Bind the channel's socket to an event and store the callback.\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, callback) {\n var _this2 = this;\n\n this.listeners[event] = this.listeners[event] || [];\n\n if (!this.events[event]) {\n this.events[event] = function (channel, data) {\n if (_this2.name === channel && _this2.listeners[event]) {\n _this2.listeners[event].forEach(function (cb) {\n return cb(data);\n });\n }\n };\n\n this.socket.on(event, this.events[event]);\n }\n\n this.listeners[event].push(callback);\n return this;\n }\n /**\r\n * Unbind the channel's socket from all stored event callbacks.\r\n */\n\n }, {\n key: \"unbind\",\n value: function unbind() {\n var _this3 = this;\n\n Object.keys(this.events).forEach(function (event) {\n _this3.unbindEvent(event);\n });\n }\n /**\r\n * Unbind the listeners for the given event.\r\n */\n\n }, {\n key: \"unbindEvent\",\n value: function unbindEvent(event, callback) {\n this.listeners[event] = this.listeners[event] || [];\n\n if (callback) {\n this.listeners[event] = this.listeners[event].filter(function (cb) {\n return cb !== callback;\n });\n }\n\n if (!callback || this.listeners[event].length === 0) {\n if (this.events[event]) {\n this.socket.removeListener(event, this.events[event]);\n delete this.events[event];\n }\n\n delete this.listeners[event];\n }\n }\n }]);\n\n return SocketIoChannel;\n}(Channel);\n\n/**\r\n * This class represents a Socket.io private channel.\r\n */\n\nvar SocketIoPrivateChannel = /*#__PURE__*/function (_SocketIoChannel) {\n _inherits(SocketIoPrivateChannel, _SocketIoChannel);\n\n var _super = _createSuper(SocketIoPrivateChannel);\n\n function SocketIoPrivateChannel() {\n _classCallCheck(this, SocketIoPrivateChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(SocketIoPrivateChannel, [{\n key: \"whisper\",\n value:\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n function whisper(eventName, data) {\n this.socket.emit('client event', {\n channel: this.name,\n event: \"client-\".concat(eventName),\n data: data\n });\n return this;\n }\n }]);\n\n return SocketIoPrivateChannel;\n}(SocketIoChannel);\n\n/**\r\n * This class represents a Socket.io presence channel.\r\n */\n\nvar SocketIoPresenceChannel = /*#__PURE__*/function (_SocketIoPrivateChann) {\n _inherits(SocketIoPresenceChannel, _SocketIoPrivateChann);\n\n var _super = _createSuper(SocketIoPresenceChannel);\n\n function SocketIoPresenceChannel() {\n _classCallCheck(this, SocketIoPresenceChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(SocketIoPresenceChannel, [{\n key: \"here\",\n value:\n /**\r\n * Register a callback to be called anytime the member list changes.\r\n */\n function here(callback) {\n this.on('presence:subscribed', function (members) {\n callback(members.map(function (m) {\n return m.user_info;\n }));\n });\n return this;\n }\n /**\r\n * Listen for someone joining the channel.\r\n */\n\n }, {\n key: \"joining\",\n value: function joining(callback) {\n this.on('presence:joining', function (member) {\n return callback(member.user_info);\n });\n return this;\n }\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n\n }, {\n key: \"whisper\",\n value: function whisper(eventName, data) {\n this.socket.emit('client event', {\n channel: this.name,\n event: \"client-\".concat(eventName),\n data: data\n });\n return this;\n }\n /**\r\n * Listen for someone leaving the channel.\r\n */\n\n }, {\n key: \"leaving\",\n value: function leaving(callback) {\n this.on('presence:leaving', function (member) {\n return callback(member.user_info);\n });\n return this;\n }\n }]);\n\n return SocketIoPresenceChannel;\n}(SocketIoPrivateChannel);\n\n/**\r\n * This class represents a null channel.\r\n */\n\nvar NullChannel = /*#__PURE__*/function (_Channel) {\n _inherits(NullChannel, _Channel);\n\n var _super = _createSuper(NullChannel);\n\n function NullChannel() {\n _classCallCheck(this, NullChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(NullChannel, [{\n key: \"subscribe\",\n value:\n /**\r\n * Subscribe to a channel.\r\n */\n function subscribe() {//\n }\n /**\r\n * Unsubscribe from a channel.\r\n */\n\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe() {//\n }\n /**\r\n * Listen for an event on the channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(event, callback) {\n return this;\n }\n /**\r\n * Listen for all events on the channel instance.\r\n */\n\n }, {\n key: \"listenToAll\",\n value: function listenToAll(callback) {\n return this;\n }\n /**\r\n * Stop listening for an event on the channel instance.\r\n */\n\n }, {\n key: \"stopListening\",\n value: function stopListening(event, callback) {\n return this;\n }\n /**\r\n * Register a callback to be called anytime a subscription succeeds.\r\n */\n\n }, {\n key: \"subscribed\",\n value: function subscribed(callback) {\n return this;\n }\n /**\r\n * Register a callback to be called anytime an error occurs.\r\n */\n\n }, {\n key: \"error\",\n value: function error(callback) {\n return this;\n }\n /**\r\n * Bind a channel to an event.\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, callback) {\n return this;\n }\n }]);\n\n return NullChannel;\n}(Channel);\n\n/**\r\n * This class represents a null private channel.\r\n */\n\nvar NullPrivateChannel = /*#__PURE__*/function (_NullChannel) {\n _inherits(NullPrivateChannel, _NullChannel);\n\n var _super = _createSuper(NullPrivateChannel);\n\n function NullPrivateChannel() {\n _classCallCheck(this, NullPrivateChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(NullPrivateChannel, [{\n key: \"whisper\",\n value:\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n function whisper(eventName, data) {\n return this;\n }\n }]);\n\n return NullPrivateChannel;\n}(NullChannel);\n\n/**\r\n * This class represents a null presence channel.\r\n */\n\nvar NullPresenceChannel = /*#__PURE__*/function (_NullChannel) {\n _inherits(NullPresenceChannel, _NullChannel);\n\n var _super = _createSuper(NullPresenceChannel);\n\n function NullPresenceChannel() {\n _classCallCheck(this, NullPresenceChannel);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(NullPresenceChannel, [{\n key: \"here\",\n value:\n /**\r\n * Register a callback to be called anytime the member list changes.\r\n */\n function here(callback) {\n return this;\n }\n /**\r\n * Listen for someone joining the channel.\r\n */\n\n }, {\n key: \"joining\",\n value: function joining(callback) {\n return this;\n }\n /**\r\n * Send a whisper event to other clients in the channel.\r\n */\n\n }, {\n key: \"whisper\",\n value: function whisper(eventName, data) {\n return this;\n }\n /**\r\n * Listen for someone leaving the channel.\r\n */\n\n }, {\n key: \"leaving\",\n value: function leaving(callback) {\n return this;\n }\n }]);\n\n return NullPresenceChannel;\n}(NullChannel);\n\nvar Connector = /*#__PURE__*/function () {\n /**\r\n * Create a new class instance.\r\n */\n function Connector(options) {\n _classCallCheck(this, Connector);\n\n /**\r\n * Default connector options.\r\n */\n this._defaultOptions = {\n auth: {\n headers: {}\n },\n authEndpoint: '/broadcasting/auth',\n userAuthentication: {\n endpoint: '/broadcasting/user-auth',\n headers: {}\n },\n broadcaster: 'pusher',\n csrfToken: null,\n bearerToken: null,\n host: null,\n key: null,\n namespace: 'App.Events'\n };\n this.setOptions(options);\n this.connect();\n }\n /**\r\n * Merge the custom options with the defaults.\r\n */\n\n\n _createClass(Connector, [{\n key: \"setOptions\",\n value: function setOptions(options) {\n this.options = _extends(this._defaultOptions, options);\n var token = this.csrfToken();\n\n if (token) {\n this.options.auth.headers['X-CSRF-TOKEN'] = token;\n this.options.userAuthentication.headers['X-CSRF-TOKEN'] = token;\n }\n\n token = this.options.bearerToken;\n\n if (token) {\n this.options.auth.headers['Authorization'] = 'Bearer ' + token;\n this.options.userAuthentication.headers['Authorization'] = 'Bearer ' + token;\n }\n\n return options;\n }\n /**\r\n * Extract the CSRF token from the page.\r\n */\n\n }, {\n key: \"csrfToken\",\n value: function csrfToken() {\n var selector;\n\n if (typeof window !== 'undefined' && window['Laravel'] && window['Laravel'].csrfToken) {\n return window['Laravel'].csrfToken;\n } else if (this.options.csrfToken) {\n return this.options.csrfToken;\n } else if (typeof document !== 'undefined' && typeof document.querySelector === 'function' && (selector = document.querySelector('meta[name=\"csrf-token\"]'))) {\n return selector.getAttribute('content');\n }\n\n return null;\n }\n }]);\n\n return Connector;\n}();\n\n/**\r\n * This class creates a connector to Pusher.\r\n */\n\nvar PusherConnector = /*#__PURE__*/function (_Connector) {\n _inherits(PusherConnector, _Connector);\n\n var _super = _createSuper(PusherConnector);\n\n function PusherConnector() {\n var _this;\n\n _classCallCheck(this, PusherConnector);\n\n _this = _super.apply(this, arguments);\n /**\r\n * All of the subscribed channel names.\r\n */\n\n _this.channels = {};\n return _this;\n }\n /**\r\n * Create a fresh Pusher connection.\r\n */\n\n\n _createClass(PusherConnector, [{\n key: \"connect\",\n value: function connect() {\n if (typeof this.options.client !== 'undefined') {\n this.pusher = this.options.client;\n } else if (this.options.Pusher) {\n this.pusher = new this.options.Pusher(this.options.key, this.options);\n } else {\n this.pusher = new Pusher(this.options.key, this.options);\n }\n }\n /**\r\n * Sign in the user via Pusher user authentication (https://pusher.com/docs/channels/using_channels/user-authentication/).\r\n */\n\n }, {\n key: \"signin\",\n value: function signin() {\n this.pusher.signin();\n }\n /**\r\n * Listen for an event on a channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(name, event, callback) {\n return this.channel(name).listen(event, callback);\n }\n /**\r\n * Get a channel instance by name.\r\n */\n\n }, {\n key: \"channel\",\n value: function channel(name) {\n if (!this.channels[name]) {\n this.channels[name] = new PusherChannel(this.pusher, name, this.options);\n }\n\n return this.channels[name];\n }\n /**\r\n * Get a private channel instance by name.\r\n */\n\n }, {\n key: \"privateChannel\",\n value: function privateChannel(name) {\n if (!this.channels['private-' + name]) {\n this.channels['private-' + name] = new PusherPrivateChannel(this.pusher, 'private-' + name, this.options);\n }\n\n return this.channels['private-' + name];\n }\n /**\r\n * Get a private encrypted channel instance by name.\r\n */\n\n }, {\n key: \"encryptedPrivateChannel\",\n value: function encryptedPrivateChannel(name) {\n if (!this.channels['private-encrypted-' + name]) {\n this.channels['private-encrypted-' + name] = new PusherEncryptedPrivateChannel(this.pusher, 'private-encrypted-' + name, this.options);\n }\n\n return this.channels['private-encrypted-' + name];\n }\n /**\r\n * Get a presence channel instance by name.\r\n */\n\n }, {\n key: \"presenceChannel\",\n value: function presenceChannel(name) {\n if (!this.channels['presence-' + name]) {\n this.channels['presence-' + name] = new PusherPresenceChannel(this.pusher, 'presence-' + name, this.options);\n }\n\n return this.channels['presence-' + name];\n }\n /**\r\n * Leave the given channel, as well as its private and presence variants.\r\n */\n\n }, {\n key: \"leave\",\n value: function leave(name) {\n var _this2 = this;\n\n var channels = [name, 'private-' + name, 'private-encrypted-' + name, 'presence-' + name];\n channels.forEach(function (name, index) {\n _this2.leaveChannel(name);\n });\n }\n /**\r\n * Leave the given channel.\r\n */\n\n }, {\n key: \"leaveChannel\",\n value: function leaveChannel(name) {\n if (this.channels[name]) {\n this.channels[name].unsubscribe();\n delete this.channels[name];\n }\n }\n /**\r\n * Get the socket ID for the connection.\r\n */\n\n }, {\n key: \"socketId\",\n value: function socketId() {\n return this.pusher.connection.socket_id;\n }\n /**\r\n * Disconnect Pusher connection.\r\n */\n\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n this.pusher.disconnect();\n }\n }]);\n\n return PusherConnector;\n}(Connector);\n\n/**\r\n * This class creates a connnector to a Socket.io server.\r\n */\n\nvar SocketIoConnector = /*#__PURE__*/function (_Connector) {\n _inherits(SocketIoConnector, _Connector);\n\n var _super = _createSuper(SocketIoConnector);\n\n function SocketIoConnector() {\n var _this;\n\n _classCallCheck(this, SocketIoConnector);\n\n _this = _super.apply(this, arguments);\n /**\r\n * All of the subscribed channel names.\r\n */\n\n _this.channels = {};\n return _this;\n }\n /**\r\n * Create a fresh Socket.io connection.\r\n */\n\n\n _createClass(SocketIoConnector, [{\n key: \"connect\",\n value: function connect() {\n var _this2 = this;\n\n var io = this.getSocketIO();\n this.socket = io(this.options.host, this.options);\n this.socket.on('reconnect', function () {\n Object.values(_this2.channels).forEach(function (channel) {\n channel.subscribe();\n });\n });\n return this.socket;\n }\n /**\r\n * Get socket.io module from global scope or options.\r\n */\n\n }, {\n key: \"getSocketIO\",\n value: function getSocketIO() {\n if (typeof this.options.client !== 'undefined') {\n return this.options.client;\n }\n\n if (typeof io !== 'undefined') {\n return io;\n }\n\n throw new Error('Socket.io client not found. Should be globally available or passed via options.client');\n }\n /**\r\n * Listen for an event on a channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(name, event, callback) {\n return this.channel(name).listen(event, callback);\n }\n /**\r\n * Get a channel instance by name.\r\n */\n\n }, {\n key: \"channel\",\n value: function channel(name) {\n if (!this.channels[name]) {\n this.channels[name] = new SocketIoChannel(this.socket, name, this.options);\n }\n\n return this.channels[name];\n }\n /**\r\n * Get a private channel instance by name.\r\n */\n\n }, {\n key: \"privateChannel\",\n value: function privateChannel(name) {\n if (!this.channels['private-' + name]) {\n this.channels['private-' + name] = new SocketIoPrivateChannel(this.socket, 'private-' + name, this.options);\n }\n\n return this.channels['private-' + name];\n }\n /**\r\n * Get a presence channel instance by name.\r\n */\n\n }, {\n key: \"presenceChannel\",\n value: function presenceChannel(name) {\n if (!this.channels['presence-' + name]) {\n this.channels['presence-' + name] = new SocketIoPresenceChannel(this.socket, 'presence-' + name, this.options);\n }\n\n return this.channels['presence-' + name];\n }\n /**\r\n * Leave the given channel, as well as its private and presence variants.\r\n */\n\n }, {\n key: \"leave\",\n value: function leave(name) {\n var _this3 = this;\n\n var channels = [name, 'private-' + name, 'presence-' + name];\n channels.forEach(function (name) {\n _this3.leaveChannel(name);\n });\n }\n /**\r\n * Leave the given channel.\r\n */\n\n }, {\n key: \"leaveChannel\",\n value: function leaveChannel(name) {\n if (this.channels[name]) {\n this.channels[name].unsubscribe();\n delete this.channels[name];\n }\n }\n /**\r\n * Get the socket ID for the connection.\r\n */\n\n }, {\n key: \"socketId\",\n value: function socketId() {\n return this.socket.id;\n }\n /**\r\n * Disconnect Socketio connection.\r\n */\n\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n this.socket.disconnect();\n }\n }]);\n\n return SocketIoConnector;\n}(Connector);\n\n/**\r\n * This class creates a null connector.\r\n */\n\nvar NullConnector = /*#__PURE__*/function (_Connector) {\n _inherits(NullConnector, _Connector);\n\n var _super = _createSuper(NullConnector);\n\n function NullConnector() {\n var _this;\n\n _classCallCheck(this, NullConnector);\n\n _this = _super.apply(this, arguments);\n /**\r\n * All of the subscribed channel names.\r\n */\n\n _this.channels = {};\n return _this;\n }\n /**\r\n * Create a fresh connection.\r\n */\n\n\n _createClass(NullConnector, [{\n key: \"connect\",\n value: function connect() {//\n }\n /**\r\n * Listen for an event on a channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(name, event, callback) {\n return new NullChannel();\n }\n /**\r\n * Get a channel instance by name.\r\n */\n\n }, {\n key: \"channel\",\n value: function channel(name) {\n return new NullChannel();\n }\n /**\r\n * Get a private channel instance by name.\r\n */\n\n }, {\n key: \"privateChannel\",\n value: function privateChannel(name) {\n return new NullPrivateChannel();\n }\n /**\r\n * Get a private encrypted channel instance by name.\r\n */\n\n }, {\n key: \"encryptedPrivateChannel\",\n value: function encryptedPrivateChannel(name) {\n return new NullPrivateChannel();\n }\n /**\r\n * Get a presence channel instance by name.\r\n */\n\n }, {\n key: \"presenceChannel\",\n value: function presenceChannel(name) {\n return new NullPresenceChannel();\n }\n /**\r\n * Leave the given channel, as well as its private and presence variants.\r\n */\n\n }, {\n key: \"leave\",\n value: function leave(name) {//\n }\n /**\r\n * Leave the given channel.\r\n */\n\n }, {\n key: \"leaveChannel\",\n value: function leaveChannel(name) {//\n }\n /**\r\n * Get the socket ID for the connection.\r\n */\n\n }, {\n key: \"socketId\",\n value: function socketId() {\n return 'fake-socket-id';\n }\n /**\r\n * Disconnect the connection.\r\n */\n\n }, {\n key: \"disconnect\",\n value: function disconnect() {//\n }\n }]);\n\n return NullConnector;\n}(Connector);\n\n/**\r\n * This class is the primary API for interacting with broadcasting.\r\n */\n\nvar Echo = /*#__PURE__*/function () {\n /**\r\n * Create a new class instance.\r\n */\n function Echo(options) {\n _classCallCheck(this, Echo);\n\n this.options = options;\n this.connect();\n\n if (!this.options.withoutInterceptors) {\n this.registerInterceptors();\n }\n }\n /**\r\n * Get a channel instance by name.\r\n */\n\n\n _createClass(Echo, [{\n key: \"channel\",\n value: function channel(_channel) {\n return this.connector.channel(_channel);\n }\n /**\r\n * Create a new connection.\r\n */\n\n }, {\n key: \"connect\",\n value: function connect() {\n if (this.options.broadcaster == 'pusher') {\n this.connector = new PusherConnector(this.options);\n } else if (this.options.broadcaster == 'socket.io') {\n this.connector = new SocketIoConnector(this.options);\n } else if (this.options.broadcaster == 'null') {\n this.connector = new NullConnector(this.options);\n } else if (typeof this.options.broadcaster == 'function') {\n this.connector = new this.options.broadcaster(this.options);\n }\n }\n /**\r\n * Disconnect from the Echo server.\r\n */\n\n }, {\n key: \"disconnect\",\n value: function disconnect() {\n this.connector.disconnect();\n }\n /**\r\n * Get a presence channel instance by name.\r\n */\n\n }, {\n key: \"join\",\n value: function join(channel) {\n return this.connector.presenceChannel(channel);\n }\n /**\r\n * Leave the given channel, as well as its private and presence variants.\r\n */\n\n }, {\n key: \"leave\",\n value: function leave(channel) {\n this.connector.leave(channel);\n }\n /**\r\n * Leave the given channel.\r\n */\n\n }, {\n key: \"leaveChannel\",\n value: function leaveChannel(channel) {\n this.connector.leaveChannel(channel);\n }\n /**\r\n * Leave all channels.\r\n */\n\n }, {\n key: \"leaveAllChannels\",\n value: function leaveAllChannels() {\n for (var channel in this.connector.channels) {\n this.leaveChannel(channel);\n }\n }\n /**\r\n * Listen for an event on a channel instance.\r\n */\n\n }, {\n key: \"listen\",\n value: function listen(channel, event, callback) {\n return this.connector.listen(channel, event, callback);\n }\n /**\r\n * Get a private channel instance by name.\r\n */\n\n }, {\n key: \"private\",\n value: function _private(channel) {\n return this.connector.privateChannel(channel);\n }\n /**\r\n * Get a private encrypted channel instance by name.\r\n */\n\n }, {\n key: \"encryptedPrivate\",\n value: function encryptedPrivate(channel) {\n return this.connector.encryptedPrivateChannel(channel);\n }\n /**\r\n * Get the Socket ID for the connection.\r\n */\n\n }, {\n key: \"socketId\",\n value: function socketId() {\n return this.connector.socketId();\n }\n /**\r\n * Register 3rd party request interceptiors. These are used to automatically\r\n * send a connections socket id to a Laravel app with a X-Socket-Id header.\r\n */\n\n }, {\n key: \"registerInterceptors\",\n value: function registerInterceptors() {\n if (typeof Vue === 'function' && Vue.http) {\n this.registerVueRequestInterceptor();\n }\n\n if (typeof axios === 'function') {\n this.registerAxiosRequestInterceptor();\n }\n\n if (typeof jQuery === 'function') {\n this.registerjQueryAjaxSetup();\n }\n\n if ((typeof Turbo === \"undefined\" ? \"undefined\" : _typeof(Turbo)) === 'object') {\n this.registerTurboRequestInterceptor();\n }\n }\n /**\r\n * Register a Vue HTTP interceptor to add the X-Socket-ID header.\r\n */\n\n }, {\n key: \"registerVueRequestInterceptor\",\n value: function registerVueRequestInterceptor() {\n var _this = this;\n\n Vue.http.interceptors.push(function (request, next) {\n if (_this.socketId()) {\n request.headers.set('X-Socket-ID', _this.socketId());\n }\n\n next();\n });\n }\n /**\r\n * Register an Axios HTTP interceptor to add the X-Socket-ID header.\r\n */\n\n }, {\n key: \"registerAxiosRequestInterceptor\",\n value: function registerAxiosRequestInterceptor() {\n var _this2 = this;\n\n axios.interceptors.request.use(function (config) {\n if (_this2.socketId()) {\n config.headers['X-Socket-Id'] = _this2.socketId();\n }\n\n return config;\n });\n }\n /**\r\n * Register jQuery AjaxPrefilter to add the X-Socket-ID header.\r\n */\n\n }, {\n key: \"registerjQueryAjaxSetup\",\n value: function registerjQueryAjaxSetup() {\n var _this3 = this;\n\n if (typeof jQuery.ajax != 'undefined') {\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (_this3.socketId()) {\n xhr.setRequestHeader('X-Socket-Id', _this3.socketId());\n }\n });\n }\n }\n /**\r\n * Register the Turbo Request interceptor to add the X-Socket-ID header.\r\n */\n\n }, {\n key: \"registerTurboRequestInterceptor\",\n value: function registerTurboRequestInterceptor() {\n var _this4 = this;\n\n document.addEventListener('turbo:before-fetch-request', function (event) {\n event.detail.fetchOptions.headers['X-Socket-Id'] = _this4.socketId();\n });\n }\n }]);\n\n return Echo;\n}();\n\nexport { Channel, Echo as default };\n", "import Echo from 'laravel-echo'\nimport Pusher from 'pusher-js/dist/web/pusher'\n\nwindow.EchoFactory = Echo\nwindow.Pusher = Pusher\n"], + "mappings": "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", + "names": ["root", "factory", "exports", "module", "modules", "installedModules", "__webpack_require__", "moduleId", "name", "getter", "value", "mode", "ns", "key", "object", "property", "INVALID_BYTE", "Coder", "_paddingCharacter", "length", "data", "out", "i", "c", "left", "s", "paddingLength", "op", "haveBad", "v0", "v1", "v2", "v3", "b", "result", "stdCoder", "encode", "decode", "URLSafeCoder", "_super", "__extends", "urlSafeCoder", "encodeURLSafe", "decodeURLSafe", "INVALID_UTF16", "INVALID_UTF8", "arr", "encodedLength", "pos", "chars", "min", "n1", "n2", "n3", "ScriptReceiverFactory", "prefix", "callback", "number", "id", "called", "callbackWrapper", "receiver", "ScriptReceivers", "Defaults", "defaults", "dependency_loader_DependencyLoader", "DependencyLoader", "options", "self", "request", "runtime", "error", "callbacks", "successCallback", "wasSuccessful", "cdn", "protocol", "DependenciesReceivers", "Dependencies", "dependency_loader", "urlStore", "buildLogSuffix", "urlPrefix", "urlObj", "url", "url_store", "AuthRequestType", "BadEventName", "msg", "_this", "_newTarget", "BadChannelName", "RequestTimedOut", "TransportPriorityTooLow", "TransportClosed", "UnsupportedFeature", "UnsupportedTransport", "UnsupportedStrategy", "HTTPAuthError", "status", "ajax", "context", "query", "authOptions", "authRequestType", "xhr", "headerName", "dynamicHeaders", "parsed", "suffix", "xhr_auth", "btoa", "utob", "fromCharCode", "b64chars", "b64tab", "base64_i", "l", "cb_utob", "cc", "u", "cb_encode", "ccc", "padlen", "ord", "Timer", "set", "clear", "delay", "abstract_timer", "timers_clearTimeout", "timer", "timers_clearInterval", "OneOffTimer", "timers_extends", "PeriodicTimer", "Util", "args", "_i", "boundArguments", "util", "extend", "target", "sources", "extensions", "stringify", "m", "safeJSONStringify", "arrayIndexOf", "array", "item", "nativeIndexOf", "objectApply", "f", "keys", "_", "values", "apply", "map", "mapObject", "filter", "test", "filterObject", "flatten", "any", "collections_all", "encodeParamsObject", "buildQueryString", "params", "decycleObject", "objects", "paths", "derez", "path", "nu", "source", "logger_Logger", "Logger", "message", "defaultLoggingFunction", "core_pusher", "log", "logger", "jsonp", "callbackName", "document", "script", "callback_name", "head", "jsonp_auth", "ScriptRequest", "src", "errorString", "jsonp_request_JSONPRequest", "JSONPRequest", "getAgent", "sender", "useTLS", "scheme", "jsonp_timeline_jsonp", "jsonp_timeline", "getGenericURL", "baseScheme", "host", "getGenericPath", "queryString", "ws", "http", "sockjs", "callback_registry_CallbackRegistry", "CallbackRegistry", "prefixedEventName", "names", "binding", "dispatcher_Dispatcher", "Dispatcher", "failThrough", "callback_registry", "eventName", "metadata", "transport_connection_TransportConnection", "transport_connection_extends", "TransportConnection", "hooks", "priority", "e", "closeEvent", "state", "dispatcher", "transport_Transport", "Transport", "environment", "transport_connection", "WSTransport", "transports_transport", "httpConfiguration", "streamingConfiguration", "pollingConfiguration", "xhrConfiguration", "XHRStreamingTransport", "XHRPollingTransport", "Transports", "transports", "SockJSTransport", "socket", "xdrConfiguration", "yes", "XDRStreamingTransport", "XDRPollingTransport", "transports_transports", "NetInfo", "net_info_extends", "net_info_Network", "assistant_to_the_transport_manager_AssistantToTheTransportManager", "AssistantToTheTransportManager", "manager", "transport", "connection", "openTimestamp", "onOpen", "onClosed", "lifespan", "Protocol", "messageEvent", "messageData", "pusherEventData", "pusherEvent", "event", "protocol_protocol", "connection_Connection", "connection_extends", "Connection", "channel", "listeners", "unbindListeners", "listener", "action", "handshake_Handshake", "Handshake", "connection_connection", "timeline_sender_TimelineSender", "TimelineSender", "timeline", "channel_Channel", "channel_extends", "Channel", "pusher", "socketId", "PrivateChannel", "private_channel_extends", "channels_channel", "members_Members", "Members", "member", "subscriptionData", "memberData", "presence_channel_PresenceChannel", "presence_channel_extends", "PresenceChannel", "members", "authData", "__awaiter", "channelData", "_a", "addedMember", "removedMember", "private_channel", "encrypted_channel_EncryptedChannel", "encrypted_channel_extends", "EncryptedChannel", "nacl", "sharedSecret", "base64", "cipherText", "nonce", "bytes", "raw", "utf8", "connection_manager_ConnectionManager", "connection_manager_extends", "ConnectionManager", "Network", "handshake", "errorCallbacks", "withErrorEmitted", "newState", "previousState", "newStateDescription", "channels_Channels", "Channels", "createChannel", "errMsg", "Factory", "channels", "connection_manager", "presence_channel", "encrypted_channel", "timeline_sender", "connection_handshake", "assistant_to_the_transport_manager", "transport_manager_TransportManager", "TransportManager", "sequential_strategy_SequentialStrategy", "SequentialStrategy", "strategies", "minPriority", "current", "timeout", "runner", "tryNextStrategy", "p", "strategy", "best_connected_ever_strategy_BestConnectedEverStrategy", "BestConnectedEverStrategy", "connect", "runners", "allRunnersFailed", "callbackBuilder", "rs", "abortRunner", "cached_strategy_CachedStrategy", "CachedStrategy", "usingTLS", "info", "fetchTransportCache", "sequential_strategy", "startTimestamp", "cb", "flushTransportCache", "storeTransportCache", "getTransportCacheKey", "storage", "serializedCache", "latency", "delayed_strategy_DelayedStrategy", "DelayedStrategy", "IfStrategy", "trueBranch", "falseBranch", "branch", "FirstConnectedStrategy", "testSupportsStrategy", "getDefaultStrategy", "config", "baseOptions", "defineTransport", "definedTransports", "defineTransportStrategy", "type", "ws_options", "wss_options", "sockjs_options", "timeouts", "ws_manager", "transport_manager", "streaming_manager", "ws_transport", "wss_transport", "sockjs_transport", "xhr_streaming_transport", "xdr_streaming_transport", "xhr_polling_transport", "xdr_polling_transport", "ws_loop", "wss_loop", "sockjs_loop", "streaming_loop", "if_strategy", "polling_loop", "http_loop", "best_connected_ever_strategy", "delayed_strategy", "http_fallback_loop", "wsStrategy", "cached_strategy", "first_connected_strategy", "default_strategy", "transport_connection_initializer", "http_xdomain_request_hooks", "xdr", "http_xdomain_request", "MAX_BUFFER_LENGTH", "http_request_HTTPRequest", "http_request_extends", "HTTPRequest", "method", "payload", "chunk", "buffer", "unreadData", "endOfLinePosition", "State", "autoIncrement", "http_socket_HTTPSocket", "HTTPSocket", "randomNumber", "randomString", "getLocation", "code", "reason", "getUniqueURL", "getSendURL", "wasClean", "replaceHost", "parts", "session", "separator", "hostname", "urlParts", "max", "http_socket", "http_streaming_socket_hooks", "http_streaming_socket", "http_polling_socket_hooks", "http_polling_socket", "http_xhr_request_hooks", "Constructor", "http_xhr_request", "HTTP", "http_request", "http_http", "web_http_http", "Runtime", "PusherClass", "initializeOnDocumentBody", "jsonp_request", "script_request", "documentProtocol", "random", "crypto", "TimelineLevel", "timeline_level", "timeline_Timeline", "Timeline", "level", "sendfn", "transport_strategy_TransportStrategy", "TransportStrategy", "failAttempt", "connected", "onInitialized", "onError", "serializedTransport", "strategy_builder_Transports", "strategy_builder_defineTransport", "transportClass", "enabled", "transport_strategy", "strategy_builder_UnsupportedStrategy", "deferred", "composeChannelQuery", "dynamicParams", "UserAuthenticator", "user_authenticator", "channel_authorizer_composeChannelQuery", "ChannelAuthorizer", "channel_authorizer", "ChannelAuthorizerProxy", "channelAuthorizerGenerator", "deprecatedAuthorizerOptions", "channelAuthorizer", "getConfig", "opts", "getEnableStatsConfig", "getHttpHost", "shouldUseTLS", "getWebsocketHost", "buildUserAuthenticator", "buildChannelAuthorizer", "getWebsocketHostFromCluster", "cluster", "userAuthentication", "__assign", "buildChannelAuth", "channelAuthorization", "watchlist_WatchlistFacade", "watchlist_extends", "WatchlistFacade", "watchlistEvent", "flatPromise", "resolve", "reject", "promise", "res", "rej", "flat_promise", "user_UserFacade", "user_extends", "UserFacade", "err", "previous", "watchlist", "ensure_subscribed", "setDone", "pusher_Pusher", "Pusher", "app_key", "checkAppKey", "timeline_timeline", "getStrategy", "internal", "user", "timelineSender", "event_name", "channelName", "channel_name", "__webpack_exports__", "_typeof", "obj", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_createClass", "protoProps", "staticProps", "_extends", "source", "key", "_inherits", "subClass", "superClass", "_setPrototypeOf", "_getPrototypeOf", "o", "p", "_isNativeReflectConstruct", "_assertThisInitialized", "self", "_possibleConstructorReturn", "call", "_createSuper", "Derived", "hasNativeReflectConstruct", "Super", "result", "NewTarget", "Channel", "event", "callback", "EventFormatter", "namespace", "value", "PusherChannel", "_Channel", "_super", "pusher", "name", "options", "_this", "_this2", "data", "formattedEvent", "status", "PusherPrivateChannel", "_PusherChannel", "eventName", "PusherEncryptedPrivateChannel", "PusherPresenceChannel", "k", "member", "SocketIoChannel", "socket", "channel", "cb", "_this3", "SocketIoPrivateChannel", "_SocketIoChannel", "SocketIoPresenceChannel", "_SocketIoPrivateChann", "members", "m", "NullChannel", "NullPrivateChannel", "_NullChannel", "NullPresenceChannel", "Connector", "token", "selector", "PusherConnector", "_Connector", "channels", "index", "SocketIoConnector", "io", "NullConnector", "Echo", "_channel", "request", "next", "config", "originalOptions", "xhr", "_this4", "import_pusher", "Echo", "Pusher"] +} diff --git a/packages/app/dist/index.js b/packages/app/dist/index.js index 8289be422b..a2b29e8eea 100644 --- a/packages/app/dist/index.js +++ b/packages/app/dist/index.js @@ -1,29 +1,7076 @@ -(()=>{var flushPending=!1,flushing=!1,queue=[],lastFlushedIndex=-1;function scheduler(callback){queueJob(callback)}function queueJob(job){queue.includes(job)||queue.push(job),queueFlush()}function dequeueJob(job){let index=queue.indexOf(job);index!==-1&&index>lastFlushedIndex&&queue.splice(index,1)}function queueFlush(){!flushing&&!flushPending&&(flushPending=!0,queueMicrotask(flushJobs))}function flushJobs(){flushPending=!1,flushing=!0;for(let i=0;iengine.effect(callback,{scheduler:task=>{shouldSchedule?scheduler(task):task()}}),raw=engine.raw}function overrideEffect(override){effect=override}function elementBoundEffect(el){let cleanup2=()=>{};return[callback=>{let effectReference=effect(callback);return el._x_effects||(el._x_effects=new Set,el._x_runEffects=()=>{el._x_effects.forEach(i=>i())}),el._x_effects.add(effectReference),cleanup2=()=>{effectReference!==void 0&&(el._x_effects.delete(effectReference),release(effectReference))},effectReference},()=>{cleanup2()}]}var onAttributeAddeds=[],onElRemoveds=[],onElAddeds=[];function onElAdded(callback){onElAddeds.push(callback)}function onElRemoved(el,callback){typeof callback=="function"?(el._x_cleanups||(el._x_cleanups=[]),el._x_cleanups.push(callback)):(callback=el,onElRemoveds.push(callback))}function onAttributesAdded(callback){onAttributeAddeds.push(callback)}function onAttributeRemoved(el,name,callback){el._x_attributeCleanups||(el._x_attributeCleanups={}),el._x_attributeCleanups[name]||(el._x_attributeCleanups[name]=[]),el._x_attributeCleanups[name].push(callback)}function cleanupAttributes(el,names){!el._x_attributeCleanups||Object.entries(el._x_attributeCleanups).forEach(([name,value])=>{(names===void 0||names.includes(name))&&(value.forEach(i=>i()),delete el._x_attributeCleanups[name])})}var observer=new MutationObserver(onMutate),currentlyObserving=!1;function startObservingMutations(){observer.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),currentlyObserving=!0}function stopObservingMutations(){flushObserver(),observer.disconnect(),currentlyObserving=!1}var recordQueue=[],willProcessRecordQueue=!1;function flushObserver(){recordQueue=recordQueue.concat(observer.takeRecords()),recordQueue.length&&!willProcessRecordQueue&&(willProcessRecordQueue=!0,queueMicrotask(()=>{processRecordQueue(),willProcessRecordQueue=!1}))}function processRecordQueue(){onMutate(recordQueue),recordQueue.length=0}function mutateDom(callback){if(!currentlyObserving)return callback();stopObservingMutations();let result=callback();return startObservingMutations(),result}var isCollecting=!1,deferredMutations=[];function deferMutations(){isCollecting=!0}function flushAndStopDeferringMutations(){isCollecting=!1,onMutate(deferredMutations),deferredMutations=[]}function onMutate(mutations){if(isCollecting){deferredMutations=deferredMutations.concat(mutations);return}let addedNodes=[],removedNodes=[],addedAttributes=new Map,removedAttributes=new Map;for(let i=0;inode.nodeType===1&&addedNodes.push(node)),mutations[i].removedNodes.forEach(node=>node.nodeType===1&&removedNodes.push(node))),mutations[i].type==="attributes")){let el=mutations[i].target,name=mutations[i].attributeName,oldValue=mutations[i].oldValue,add2=()=>{addedAttributes.has(el)||addedAttributes.set(el,[]),addedAttributes.get(el).push({name,value:el.getAttribute(name)})},remove=()=>{removedAttributes.has(el)||removedAttributes.set(el,[]),removedAttributes.get(el).push(name)};el.hasAttribute(name)&&oldValue===null?add2():el.hasAttribute(name)?(remove(),add2()):remove()}removedAttributes.forEach((attrs,el)=>{cleanupAttributes(el,attrs)}),addedAttributes.forEach((attrs,el)=>{onAttributeAddeds.forEach(i=>i(el,attrs))});for(let node of removedNodes)if(!addedNodes.includes(node)&&(onElRemoveds.forEach(i=>i(node)),node._x_cleanups))for(;node._x_cleanups.length;)node._x_cleanups.pop()();addedNodes.forEach(node=>{node._x_ignoreSelf=!0,node._x_ignore=!0});for(let node of addedNodes)removedNodes.includes(node)||!node.isConnected||(delete node._x_ignoreSelf,delete node._x_ignore,onElAddeds.forEach(i=>i(node)),node._x_ignore=!0,node._x_ignoreSelf=!0);addedNodes.forEach(node=>{delete node._x_ignoreSelf,delete node._x_ignore}),addedNodes=null,removedNodes=null,addedAttributes=null,removedAttributes=null}function scope(node){return mergeProxies(closestDataStack(node))}function addScopeToNode(node,data2,referenceNode){return node._x_dataStack=[data2,...closestDataStack(referenceNode||node)],()=>{node._x_dataStack=node._x_dataStack.filter(i=>i!==data2)}}function refreshScope(element,scope2){let existingScope=element._x_dataStack[0];Object.entries(scope2).forEach(([key,value])=>{existingScope[key]=value})}function closestDataStack(node){return node._x_dataStack?node._x_dataStack:typeof ShadowRoot=="function"&&node instanceof ShadowRoot?closestDataStack(node.host):node.parentNode?closestDataStack(node.parentNode):[]}function mergeProxies(objects){let thisProxy=new Proxy({},{ownKeys:()=>Array.from(new Set(objects.flatMap(i=>Object.keys(i)))),has:(target,name)=>objects.some(obj=>obj.hasOwnProperty(name)),get:(target,name)=>(objects.find(obj=>{if(obj.hasOwnProperty(name)){let descriptor=Object.getOwnPropertyDescriptor(obj,name);if(descriptor.get&&descriptor.get._x_alreadyBound||descriptor.set&&descriptor.set._x_alreadyBound)return!0;if((descriptor.get||descriptor.set)&&descriptor.enumerable){let getter=descriptor.get,setter=descriptor.set,property=descriptor;getter=getter&&getter.bind(thisProxy),setter=setter&&setter.bind(thisProxy),getter&&(getter._x_alreadyBound=!0),setter&&(setter._x_alreadyBound=!0),Object.defineProperty(obj,name,{...property,get:getter,set:setter})}return!0}return!1})||{})[name],set:(target,name,value)=>{let closestObjectWithKey=objects.find(obj=>obj.hasOwnProperty(name));return closestObjectWithKey?closestObjectWithKey[name]=value:objects[objects.length-1][name]=value,!0}});return thisProxy}function initInterceptors(data2){let isObject2=val=>typeof val=="object"&&!Array.isArray(val)&&val!==null,recurse=(obj,basePath="")=>{Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key,{value,enumerable}])=>{if(enumerable===!1||value===void 0)return;let path=basePath===""?key:`${basePath}.${key}`;typeof value=="object"&&value!==null&&value._x_interceptor?obj[key]=value.initialize(data2,path,key):isObject2(value)&&value!==obj&&!(value instanceof Element)&&recurse(value,path)})};return recurse(data2)}function interceptor(callback,mutateObj=()=>{}){let obj={initialValue:void 0,_x_interceptor:!0,initialize(data2,path,key){return callback(this.initialValue,()=>get(data2,path),value=>set(data2,path,value),path,key)}};return mutateObj(obj),initialValue=>{if(typeof initialValue=="object"&&initialValue!==null&&initialValue._x_interceptor){let initialize=obj.initialize.bind(obj);obj.initialize=(data2,path,key)=>{let innerValue=initialValue.initialize(data2,path,key);return obj.initialValue=innerValue,initialize(data2,path,key)}}else obj.initialValue=initialValue;return obj}}function get(obj,path){return path.split(".").reduce((carry,segment)=>carry[segment],obj)}function set(obj,path,value){if(typeof path=="string"&&(path=path.split(".")),path.length===1)obj[path[0]]=value;else{if(path.length===0)throw error;return obj[path[0]]||(obj[path[0]]={}),set(obj[path[0]],path.slice(1),value)}}var magics={};function magic(name,callback){magics[name]=callback}function injectMagics(obj,el){return Object.entries(magics).forEach(([name,callback])=>{Object.defineProperty(obj,`$${name}`,{get(){let[utilities,cleanup2]=getElementBoundUtilities(el);return utilities={interceptor,...utilities},onElRemoved(el,cleanup2),callback(el,utilities)},enumerable:!1})}),obj}function tryCatch(el,expression,callback,...args){try{return callback(...args)}catch(e){handleError(e,el,expression)}}function handleError(error2,el,expression=void 0){Object.assign(error2,{el,expression}),console.warn(`Alpine Expression Error: ${error2.message} +(() => { + // node_modules/alpinejs/dist/module.esm.js + var flushPending = false; + var flushing = false; + var queue = []; + var lastFlushedIndex = -1; + function scheduler(callback) { + queueJob(callback); + } + function queueJob(job) { + if (!queue.includes(job)) + queue.push(job); + queueFlush(); + } + function dequeueJob(job) { + let index = queue.indexOf(job); + if (index !== -1 && index > lastFlushedIndex) + queue.splice(index, 1); + } + function queueFlush() { + if (!flushing && !flushPending) { + flushPending = true; + queueMicrotask(flushJobs); + } + } + function flushJobs() { + flushPending = false; + flushing = true; + for (let i = 0; i < queue.length; i++) { + queue[i](); + lastFlushedIndex = i; + } + queue.length = 0; + lastFlushedIndex = -1; + flushing = false; + } + var reactive; + var effect; + var release; + var raw; + var shouldSchedule = true; + function disableEffectScheduling(callback) { + shouldSchedule = false; + callback(); + shouldSchedule = true; + } + function setReactivityEngine(engine) { + reactive = engine.reactive; + release = engine.release; + effect = (callback) => engine.effect(callback, { scheduler: (task) => { + if (shouldSchedule) { + scheduler(task); + } else { + task(); + } + } }); + raw = engine.raw; + } + function overrideEffect(override) { + effect = override; + } + function elementBoundEffect(el) { + let cleanup2 = () => { + }; + let wrappedEffect = (callback) => { + let effectReference = effect(callback); + if (!el._x_effects) { + el._x_effects = /* @__PURE__ */ new Set(); + el._x_runEffects = () => { + el._x_effects.forEach((i) => i()); + }; + } + el._x_effects.add(effectReference); + cleanup2 = () => { + if (effectReference === void 0) + return; + el._x_effects.delete(effectReference); + release(effectReference); + }; + return effectReference; + }; + return [wrappedEffect, () => { + cleanup2(); + }]; + } + var onAttributeAddeds = []; + var onElRemoveds = []; + var onElAddeds = []; + function onElAdded(callback) { + onElAddeds.push(callback); + } + function onElRemoved(el, callback) { + if (typeof callback === "function") { + if (!el._x_cleanups) + el._x_cleanups = []; + el._x_cleanups.push(callback); + } else { + callback = el; + onElRemoveds.push(callback); + } + } + function onAttributesAdded(callback) { + onAttributeAddeds.push(callback); + } + function onAttributeRemoved(el, name, callback) { + if (!el._x_attributeCleanups) + el._x_attributeCleanups = {}; + if (!el._x_attributeCleanups[name]) + el._x_attributeCleanups[name] = []; + el._x_attributeCleanups[name].push(callback); + } + function cleanupAttributes(el, names) { + if (!el._x_attributeCleanups) + return; + Object.entries(el._x_attributeCleanups).forEach(([name, value]) => { + if (names === void 0 || names.includes(name)) { + value.forEach((i) => i()); + delete el._x_attributeCleanups[name]; + } + }); + } + var observer = new MutationObserver(onMutate); + var currentlyObserving = false; + function startObservingMutations() { + observer.observe(document, { subtree: true, childList: true, attributes: true, attributeOldValue: true }); + currentlyObserving = true; + } + function stopObservingMutations() { + flushObserver(); + observer.disconnect(); + currentlyObserving = false; + } + var recordQueue = []; + var willProcessRecordQueue = false; + function flushObserver() { + recordQueue = recordQueue.concat(observer.takeRecords()); + if (recordQueue.length && !willProcessRecordQueue) { + willProcessRecordQueue = true; + queueMicrotask(() => { + processRecordQueue(); + willProcessRecordQueue = false; + }); + } + } + function processRecordQueue() { + onMutate(recordQueue); + recordQueue.length = 0; + } + function mutateDom(callback) { + if (!currentlyObserving) + return callback(); + stopObservingMutations(); + let result = callback(); + startObservingMutations(); + return result; + } + var isCollecting = false; + var deferredMutations = []; + function deferMutations() { + isCollecting = true; + } + function flushAndStopDeferringMutations() { + isCollecting = false; + onMutate(deferredMutations); + deferredMutations = []; + } + function onMutate(mutations) { + if (isCollecting) { + deferredMutations = deferredMutations.concat(mutations); + return; + } + let addedNodes = []; + let removedNodes = []; + let addedAttributes = /* @__PURE__ */ new Map(); + let removedAttributes = /* @__PURE__ */ new Map(); + for (let i = 0; i < mutations.length; i++) { + if (mutations[i].target._x_ignoreMutationObserver) + continue; + if (mutations[i].type === "childList") { + mutations[i].addedNodes.forEach((node) => node.nodeType === 1 && addedNodes.push(node)); + mutations[i].removedNodes.forEach((node) => node.nodeType === 1 && removedNodes.push(node)); + } + if (mutations[i].type === "attributes") { + let el = mutations[i].target; + let name = mutations[i].attributeName; + let oldValue = mutations[i].oldValue; + let add2 = () => { + if (!addedAttributes.has(el)) + addedAttributes.set(el, []); + addedAttributes.get(el).push({ name, value: el.getAttribute(name) }); + }; + let remove = () => { + if (!removedAttributes.has(el)) + removedAttributes.set(el, []); + removedAttributes.get(el).push(name); + }; + if (el.hasAttribute(name) && oldValue === null) { + add2(); + } else if (el.hasAttribute(name)) { + remove(); + add2(); + } else { + remove(); + } + } + } + removedAttributes.forEach((attrs, el) => { + cleanupAttributes(el, attrs); + }); + addedAttributes.forEach((attrs, el) => { + onAttributeAddeds.forEach((i) => i(el, attrs)); + }); + for (let node of removedNodes) { + if (addedNodes.includes(node)) + continue; + onElRemoveds.forEach((i) => i(node)); + if (node._x_cleanups) { + while (node._x_cleanups.length) + node._x_cleanups.pop()(); + } + } + addedNodes.forEach((node) => { + node._x_ignoreSelf = true; + node._x_ignore = true; + }); + for (let node of addedNodes) { + if (removedNodes.includes(node)) + continue; + if (!node.isConnected) + continue; + delete node._x_ignoreSelf; + delete node._x_ignore; + onElAddeds.forEach((i) => i(node)); + node._x_ignore = true; + node._x_ignoreSelf = true; + } + addedNodes.forEach((node) => { + delete node._x_ignoreSelf; + delete node._x_ignore; + }); + addedNodes = null; + removedNodes = null; + addedAttributes = null; + removedAttributes = null; + } + function scope(node) { + return mergeProxies(closestDataStack(node)); + } + function addScopeToNode(node, data2, referenceNode) { + node._x_dataStack = [data2, ...closestDataStack(referenceNode || node)]; + return () => { + node._x_dataStack = node._x_dataStack.filter((i) => i !== data2); + }; + } + function refreshScope(element, scope2) { + let existingScope = element._x_dataStack[0]; + Object.entries(scope2).forEach(([key, value]) => { + existingScope[key] = value; + }); + } + function closestDataStack(node) { + if (node._x_dataStack) + return node._x_dataStack; + if (typeof ShadowRoot === "function" && node instanceof ShadowRoot) { + return closestDataStack(node.host); + } + if (!node.parentNode) { + return []; + } + return closestDataStack(node.parentNode); + } + function mergeProxies(objects) { + let thisProxy = new Proxy({}, { + ownKeys: () => { + return Array.from(new Set(objects.flatMap((i) => Object.keys(i)))); + }, + has: (target, name) => { + return objects.some((obj) => obj.hasOwnProperty(name)); + }, + get: (target, name) => { + return (objects.find((obj) => { + if (obj.hasOwnProperty(name)) { + let descriptor = Object.getOwnPropertyDescriptor(obj, name); + if (descriptor.get && descriptor.get._x_alreadyBound || descriptor.set && descriptor.set._x_alreadyBound) { + return true; + } + if ((descriptor.get || descriptor.set) && descriptor.enumerable) { + let getter = descriptor.get; + let setter = descriptor.set; + let property = descriptor; + getter = getter && getter.bind(thisProxy); + setter = setter && setter.bind(thisProxy); + if (getter) + getter._x_alreadyBound = true; + if (setter) + setter._x_alreadyBound = true; + Object.defineProperty(obj, name, { + ...property, + get: getter, + set: setter + }); + } + return true; + } + return false; + }) || {})[name]; + }, + set: (target, name, value) => { + let closestObjectWithKey = objects.find((obj) => obj.hasOwnProperty(name)); + if (closestObjectWithKey) { + closestObjectWithKey[name] = value; + } else { + objects[objects.length - 1][name] = value; + } + return true; + } + }); + return thisProxy; + } + function initInterceptors(data2) { + let isObject2 = (val) => typeof val === "object" && !Array.isArray(val) && val !== null; + let recurse = (obj, basePath = "") => { + Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => { + if (enumerable === false || value === void 0) + return; + let path = basePath === "" ? key : `${basePath}.${key}`; + if (typeof value === "object" && value !== null && value._x_interceptor) { + obj[key] = value.initialize(data2, path, key); + } else { + if (isObject2(value) && value !== obj && !(value instanceof Element)) { + recurse(value, path); + } + } + }); + }; + return recurse(data2); + } + function interceptor(callback, mutateObj = () => { + }) { + let obj = { + initialValue: void 0, + _x_interceptor: true, + initialize(data2, path, key) { + return callback(this.initialValue, () => get(data2, path), (value) => set(data2, path, value), path, key); + } + }; + mutateObj(obj); + return (initialValue) => { + if (typeof initialValue === "object" && initialValue !== null && initialValue._x_interceptor) { + let initialize = obj.initialize.bind(obj); + obj.initialize = (data2, path, key) => { + let innerValue = initialValue.initialize(data2, path, key); + obj.initialValue = innerValue; + return initialize(data2, path, key); + }; + } else { + obj.initialValue = initialValue; + } + return obj; + }; + } + function get(obj, path) { + return path.split(".").reduce((carry, segment) => carry[segment], obj); + } + function set(obj, path, value) { + if (typeof path === "string") + path = path.split("."); + if (path.length === 1) + obj[path[0]] = value; + else if (path.length === 0) + throw error; + else { + if (obj[path[0]]) + return set(obj[path[0]], path.slice(1), value); + else { + obj[path[0]] = {}; + return set(obj[path[0]], path.slice(1), value); + } + } + } + var magics = {}; + function magic(name, callback) { + magics[name] = callback; + } + function injectMagics(obj, el) { + Object.entries(magics).forEach(([name, callback]) => { + Object.defineProperty(obj, `$${name}`, { + get() { + let [utilities, cleanup2] = getElementBoundUtilities(el); + utilities = { interceptor, ...utilities }; + onElRemoved(el, cleanup2); + return callback(el, utilities); + }, + enumerable: false + }); + }); + return obj; + } + function tryCatch(el, expression, callback, ...args) { + try { + return callback(...args); + } catch (e) { + handleError(e, el, expression); + } + } + function handleError(error2, el, expression = void 0) { + Object.assign(error2, { el, expression }); + console.warn(`Alpine Expression Error: ${error2.message} -${expression?'Expression: "'+expression+`" +${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el); + setTimeout(() => { + throw error2; + }, 0); + } + var shouldAutoEvaluateFunctions = true; + function dontAutoEvaluateFunctions(callback) { + let cache = shouldAutoEvaluateFunctions; + shouldAutoEvaluateFunctions = false; + callback(); + shouldAutoEvaluateFunctions = cache; + } + function evaluate(el, expression, extras = {}) { + let result; + evaluateLater(el, expression)((value) => result = value, extras); + return result; + } + function evaluateLater(...args) { + return theEvaluatorFunction(...args); + } + var theEvaluatorFunction = normalEvaluator; + function setEvaluator(newEvaluator) { + theEvaluatorFunction = newEvaluator; + } + function normalEvaluator(el, expression) { + let overriddenMagics = {}; + injectMagics(overriddenMagics, el); + let dataStack = [overriddenMagics, ...closestDataStack(el)]; + let evaluator = typeof expression === "function" ? generateEvaluatorFromFunction(dataStack, expression) : generateEvaluatorFromString(dataStack, expression, el); + return tryCatch.bind(null, el, expression, evaluator); + } + function generateEvaluatorFromFunction(dataStack, func) { + return (receiver = () => { + }, { scope: scope2 = {}, params = [] } = {}) => { + let result = func.apply(mergeProxies([scope2, ...dataStack]), params); + runIfTypeOfFunction(receiver, result); + }; + } + var evaluatorMemo = {}; + function generateFunctionFromString(expression, el) { + if (evaluatorMemo[expression]) { + return evaluatorMemo[expression]; + } + let AsyncFunction = Object.getPrototypeOf(async function() { + }).constructor; + let rightSideSafeExpression = /^[\n\s]*if.*\(.*\)/.test(expression) || /^(let|const)\s/.test(expression) ? `(async()=>{ ${expression} })()` : expression; + const safeAsyncFunction = () => { + try { + return new AsyncFunction(["__self", "scope"], `with (scope) { __self.result = ${rightSideSafeExpression} }; __self.finished = true; return __self.result;`); + } catch (error2) { + handleError(error2, el, expression); + return Promise.resolve(); + } + }; + let func = safeAsyncFunction(); + evaluatorMemo[expression] = func; + return func; + } + function generateEvaluatorFromString(dataStack, expression, el) { + let func = generateFunctionFromString(expression, el); + return (receiver = () => { + }, { scope: scope2 = {}, params = [] } = {}) => { + func.result = void 0; + func.finished = false; + let completeScope = mergeProxies([scope2, ...dataStack]); + if (typeof func === "function") { + let promise = func(func, completeScope).catch((error2) => handleError(error2, el, expression)); + if (func.finished) { + runIfTypeOfFunction(receiver, func.result, completeScope, params, el); + func.result = void 0; + } else { + promise.then((result) => { + runIfTypeOfFunction(receiver, result, completeScope, params, el); + }).catch((error2) => handleError(error2, el, expression)).finally(() => func.result = void 0); + } + } + }; + } + function runIfTypeOfFunction(receiver, value, scope2, params, el) { + if (shouldAutoEvaluateFunctions && typeof value === "function") { + let result = value.apply(scope2, params); + if (result instanceof Promise) { + result.then((i) => runIfTypeOfFunction(receiver, i, scope2, params)).catch((error2) => handleError(error2, el, value)); + } else { + receiver(result); + } + } else if (typeof value === "object" && value instanceof Promise) { + value.then((i) => receiver(i)); + } else { + receiver(value); + } + } + var prefixAsString = "x-"; + function prefix(subject = "") { + return prefixAsString + subject; + } + function setPrefix(newPrefix) { + prefixAsString = newPrefix; + } + var directiveHandlers = {}; + function directive(name, callback) { + directiveHandlers[name] = callback; + return { + before(directive2) { + if (!directiveHandlers[directive2]) { + console.warn( + "Cannot find directive `${directive}`. `${name}` will use the default order of execution" + ); + return; + } + const pos = directiveOrder.indexOf(directive2); + directiveOrder.splice(pos >= 0 ? pos : directiveOrder.indexOf("DEFAULT"), 0, name); + } + }; + } + function directives(el, attributes, originalAttributeOverride) { + attributes = Array.from(attributes); + if (el._x_virtualDirectives) { + let vAttributes = Object.entries(el._x_virtualDirectives).map(([name, value]) => ({ name, value })); + let staticAttributes = attributesOnly(vAttributes); + vAttributes = vAttributes.map((attribute) => { + if (staticAttributes.find((attr) => attr.name === attribute.name)) { + return { + name: `x-bind:${attribute.name}`, + value: `"${attribute.value}"` + }; + } + return attribute; + }); + attributes = attributes.concat(vAttributes); + } + let transformedAttributeMap = {}; + let directives2 = attributes.map(toTransformedAttributes((newName, oldName) => transformedAttributeMap[newName] = oldName)).filter(outNonAlpineAttributes).map(toParsedDirectives(transformedAttributeMap, originalAttributeOverride)).sort(byPriority); + return directives2.map((directive2) => { + return getDirectiveHandler(el, directive2); + }); + } + function attributesOnly(attributes) { + return Array.from(attributes).map(toTransformedAttributes()).filter((attr) => !outNonAlpineAttributes(attr)); + } + var isDeferringHandlers = false; + var directiveHandlerStacks = /* @__PURE__ */ new Map(); + var currentHandlerStackKey = Symbol(); + function deferHandlingDirectives(callback) { + isDeferringHandlers = true; + let key = Symbol(); + currentHandlerStackKey = key; + directiveHandlerStacks.set(key, []); + let flushHandlers = () => { + while (directiveHandlerStacks.get(key).length) + directiveHandlerStacks.get(key).shift()(); + directiveHandlerStacks.delete(key); + }; + let stopDeferring = () => { + isDeferringHandlers = false; + flushHandlers(); + }; + callback(flushHandlers); + stopDeferring(); + } + function getElementBoundUtilities(el) { + let cleanups = []; + let cleanup2 = (callback) => cleanups.push(callback); + let [effect3, cleanupEffect] = elementBoundEffect(el); + cleanups.push(cleanupEffect); + let utilities = { + Alpine: alpine_default, + effect: effect3, + cleanup: cleanup2, + evaluateLater: evaluateLater.bind(evaluateLater, el), + evaluate: evaluate.bind(evaluate, el) + }; + let doCleanup = () => cleanups.forEach((i) => i()); + return [utilities, doCleanup]; + } + function getDirectiveHandler(el, directive2) { + let noop = () => { + }; + let handler3 = directiveHandlers[directive2.type] || noop; + let [utilities, cleanup2] = getElementBoundUtilities(el); + onAttributeRemoved(el, directive2.original, cleanup2); + let fullHandler = () => { + if (el._x_ignore || el._x_ignoreSelf) + return; + handler3.inline && handler3.inline(el, directive2, utilities); + handler3 = handler3.bind(handler3, el, directive2, utilities); + isDeferringHandlers ? directiveHandlerStacks.get(currentHandlerStackKey).push(handler3) : handler3(); + }; + fullHandler.runCleanups = cleanup2; + return fullHandler; + } + var startingWith = (subject, replacement) => ({ name, value }) => { + if (name.startsWith(subject)) + name = name.replace(subject, replacement); + return { name, value }; + }; + var into = (i) => i; + function toTransformedAttributes(callback = () => { + }) { + return ({ name, value }) => { + let { name: newName, value: newValue } = attributeTransformers.reduce((carry, transform) => { + return transform(carry); + }, { name, value }); + if (newName !== name) + callback(newName, name); + return { name: newName, value: newValue }; + }; + } + var attributeTransformers = []; + function mapAttributes(callback) { + attributeTransformers.push(callback); + } + function outNonAlpineAttributes({ name }) { + return alpineAttributeRegex().test(name); + } + var alpineAttributeRegex = () => new RegExp(`^${prefixAsString}([^:^.]+)\\b`); + function toParsedDirectives(transformedAttributeMap, originalAttributeOverride) { + return ({ name, value }) => { + let typeMatch = name.match(alpineAttributeRegex()); + let valueMatch = name.match(/:([a-zA-Z0-9\-:]+)/); + let modifiers = name.match(/\.[^.\]]+(?=[^\]]*$)/g) || []; + let original = originalAttributeOverride || transformedAttributeMap[name] || name; + return { + type: typeMatch ? typeMatch[1] : null, + value: valueMatch ? valueMatch[1] : null, + modifiers: modifiers.map((i) => i.replace(".", "")), + expression: value, + original + }; + }; + } + var DEFAULT = "DEFAULT"; + var directiveOrder = [ + "ignore", + "ref", + "data", + "id", + "bind", + "init", + "for", + "model", + "modelable", + "transition", + "show", + "if", + DEFAULT, + "teleport" + ]; + function byPriority(a, b) { + let typeA = directiveOrder.indexOf(a.type) === -1 ? DEFAULT : a.type; + let typeB = directiveOrder.indexOf(b.type) === -1 ? DEFAULT : b.type; + return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB); + } + function dispatch(el, name, detail = {}) { + el.dispatchEvent( + new CustomEvent(name, { + detail, + bubbles: true, + // Allows events to pass the shadow DOM barrier. + composed: true, + cancelable: true + }) + ); + } + function walk(el, callback) { + if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) { + Array.from(el.children).forEach((el2) => walk(el2, callback)); + return; + } + let skip = false; + callback(el, () => skip = true); + if (skip) + return; + let node = el.firstElementChild; + while (node) { + walk(node, callback, false); + node = node.nextElementSibling; + } + } + function warn(message, ...args) { + console.warn(`Alpine Warning: ${message}`, ...args); + } + function start() { + if (!document.body) + warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `