{"version":3,"file":"consumer-C2QIhBSd.js","sources":["../../../node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js","../../../app/javascript/channels/consumer.ts"],"sourcesContent":["(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActionCable = {});\n})(this, function(exports) {\n \"use strict\";\n var adapters = {\n logger: self.console,\n WebSocket: self.WebSocket\n };\n var logger = {\n log: function log() {\n if (this.enabled) {\n var _adapters$logger;\n for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n messages.push(Date.now());\n (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [ \"[ActionCable]\" ].concat(messages));\n }\n }\n };\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function(obj) {\n return typeof obj;\n } : function(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function 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 return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var now = function now() {\n return new Date().getTime();\n };\n var secondsSince = function secondsSince(time) {\n return (now() - time) / 1e3;\n };\n var clamp = function clamp(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n var ConnectionMonitor = function() {\n function ConnectionMonitor(connection) {\n classCallCheck(this, ConnectionMonitor);\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n ConnectionMonitor.prototype.start = function start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor started. pollInterval = \" + this.getPollInterval() + \" ms\");\n }\n };\n ConnectionMonitor.prototype.stop = function stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n };\n ConnectionMonitor.prototype.isRunning = function isRunning() {\n return this.startedAt && !this.stoppedAt;\n };\n ConnectionMonitor.prototype.recordPing = function recordPing() {\n this.pingedAt = now();\n };\n ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n };\n ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n };\n ConnectionMonitor.prototype.startPolling = function startPolling() {\n this.stopPolling();\n this.poll();\n };\n ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n clearTimeout(this.pollTimeout);\n };\n ConnectionMonitor.prototype.poll = function poll() {\n var _this = this;\n this.pollTimeout = setTimeout(function() {\n _this.reconnectIfStale();\n _this.poll();\n }, this.getPollInterval());\n };\n ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n var _constructor$pollInte = this.constructor.pollInterval, min = _constructor$pollInte.min, max = _constructor$pollInte.max, multiplier = _constructor$pollInte.multiplier;\n var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1e3);\n };\n ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n };\n ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n var _this2 = this;\n if (document.visibilityState === \"visible\") {\n setTimeout(function() {\n if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n _this2.connection.reopen();\n }\n }, 200);\n }\n };\n return ConnectionMonitor;\n }();\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30,\n multiplier: 5\n };\n ConnectionMonitor.staleThreshold = 6;\n var INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\"\n },\n default_mount_path: \"/cable\",\n protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n };\n var message_types = INTERNAL.message_types, protocols = INTERNAL.protocols;\n var supportedProtocols = protocols.slice(0, protocols.length - 1);\n var indexOf = [].indexOf;\n var Connection = function() {\n function Connection(consumer) {\n classCallCheck(this, Connection);\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n Connection.prototype.send = function send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n Connection.prototype.open = function open() {\n if (this.isActive()) {\n logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n return false;\n } else {\n logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n Connection.prototype.close = function close() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowReconnect: true\n }, allowReconnect = _ref.allowReconnect;\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isActive()) {\n return this.webSocket.close();\n }\n };\n Connection.prototype.reopen = function reopen() {\n logger.log(\"Reopening WebSocket, current state is \" + this.getState());\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n Connection.prototype.getProtocol = function getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n };\n Connection.prototype.isOpen = function isOpen() {\n return this.isState(\"open\");\n };\n Connection.prototype.isActive = function isActive() {\n return this.isState(\"open\", \"connecting\");\n };\n Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n };\n Connection.prototype.isState = function isState() {\n for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n return indexOf.call(states, this.getState()) >= 0;\n };\n Connection.prototype.getState = function getState() {\n if (this.webSocket) {\n for (var state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n return null;\n };\n Connection.prototype.installEventHandlers = function installEventHandlers() {\n for (var eventName in this.events) {\n var handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n for (var eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function() {};\n }\n };\n return Connection;\n }();\n Connection.reopenDelay = 500;\n Connection.prototype.events = {\n message: function message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n var _JSON$parse = JSON.parse(event.data), identifier = _JSON$parse.identifier, message = _JSON$parse.message, reason = _JSON$parse.reason, reconnect = _JSON$parse.reconnect, type = _JSON$parse.type;\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(\"Disconnecting. Reason: \" + reason);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier);\n return this.subscriptions.notify(identifier, \"connected\");\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function open() {\n logger.log(\"WebSocket onopen event, using '\" + this.getProtocol() + \"' subprotocol\");\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function close(event) {\n logger.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function error() {\n logger.log(\"WebSocket onerror event\");\n }\n };\n var extend = function extend(object, properties) {\n if (properties != null) {\n for (var key in properties) {\n var value = properties[key];\n object[key] = value;\n }\n }\n return object;\n };\n var Subscription = function() {\n function Subscription(consumer) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var mixin = arguments[2];\n classCallCheck(this, Subscription);\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n Subscription.prototype.perform = function perform(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n data.action = action;\n return this.send(data);\n };\n Subscription.prototype.send = function send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n Subscription.prototype.unsubscribe = function unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n };\n return Subscription;\n }();\n var SubscriptionGuarantor = function() {\n function SubscriptionGuarantor(subscriptions) {\n classCallCheck(this, SubscriptionGuarantor);\n this.subscriptions = subscriptions;\n this.pendingSubscriptions = [];\n }\n SubscriptionGuarantor.prototype.guarantee = function guarantee(subscription) {\n if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n logger.log(\"SubscriptionGuarantor guaranteeing \" + subscription.identifier);\n this.pendingSubscriptions.push(subscription);\n } else {\n logger.log(\"SubscriptionGuarantor already guaranteeing \" + subscription.identifier);\n }\n this.startGuaranteeing();\n };\n SubscriptionGuarantor.prototype.forget = function forget(subscription) {\n logger.log(\"SubscriptionGuarantor forgetting \" + subscription.identifier);\n this.pendingSubscriptions = this.pendingSubscriptions.filter(function(s) {\n return s !== subscription;\n });\n };\n SubscriptionGuarantor.prototype.startGuaranteeing = function startGuaranteeing() {\n this.stopGuaranteeing();\n this.retrySubscribing();\n };\n SubscriptionGuarantor.prototype.stopGuaranteeing = function stopGuaranteeing() {\n clearTimeout(this.retryTimeout);\n };\n SubscriptionGuarantor.prototype.retrySubscribing = function retrySubscribing() {\n var _this = this;\n this.retryTimeout = setTimeout(function() {\n if (_this.subscriptions && typeof _this.subscriptions.subscribe === \"function\") {\n _this.pendingSubscriptions.map(function(subscription) {\n logger.log(\"SubscriptionGuarantor resubscribing \" + subscription.identifier);\n _this.subscriptions.subscribe(subscription);\n });\n }\n }, 500);\n };\n return SubscriptionGuarantor;\n }();\n var Subscriptions = function() {\n function Subscriptions(consumer) {\n classCallCheck(this, Subscriptions);\n this.consumer = consumer;\n this.guarantor = new SubscriptionGuarantor(this);\n this.subscriptions = [];\n }\n Subscriptions.prototype.create = function create(channelName, mixin) {\n var channel = channelName;\n var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n channel: channel\n };\n var subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n Subscriptions.prototype.add = function add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.subscribe(subscription);\n return subscription;\n };\n Subscriptions.prototype.remove = function remove(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n };\n Subscriptions.prototype.reject = function reject(identifier) {\n var _this = this;\n return this.findAll(identifier).map(function(subscription) {\n _this.forget(subscription);\n _this.notify(subscription, \"rejected\");\n return subscription;\n });\n };\n Subscriptions.prototype.forget = function forget(subscription) {\n this.guarantor.forget(subscription);\n this.subscriptions = this.subscriptions.filter(function(s) {\n return s !== subscription;\n });\n return subscription;\n };\n Subscriptions.prototype.findAll = function findAll(identifier) {\n return this.subscriptions.filter(function(s) {\n return s.identifier === identifier;\n });\n };\n Subscriptions.prototype.reload = function reload() {\n var _this2 = this;\n return this.subscriptions.map(function(subscription) {\n return _this2.subscribe(subscription);\n });\n };\n Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n var _this3 = this;\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return this.subscriptions.map(function(subscription) {\n return _this3.notify.apply(_this3, [ subscription, callbackName ].concat(args));\n });\n };\n Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n var subscriptions = void 0;\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [ subscription ];\n }\n return subscriptions.map(function(subscription) {\n return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n });\n };\n Subscriptions.prototype.subscribe = function subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription);\n }\n };\n Subscriptions.prototype.confirmSubscription = function confirmSubscription(identifier) {\n var _this4 = this;\n logger.log(\"Subscription confirmed \" + identifier);\n this.findAll(identifier).map(function(subscription) {\n return _this4.guarantor.forget(subscription);\n });\n };\n Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n var identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n return Subscriptions;\n }();\n var Consumer = function() {\n function Consumer(url) {\n classCallCheck(this, Consumer);\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n }\n Consumer.prototype.send = function send(data) {\n return this.connection.send(data);\n };\n Consumer.prototype.connect = function connect() {\n return this.connection.open();\n };\n Consumer.prototype.disconnect = function disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n createClass(Consumer, [ {\n key: \"url\",\n get: function get$$1() {\n return createWebSocketURL(this._url);\n }\n } ]);\n return Consumer;\n }();\n function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n if (url && !/^wss?:/i.test(url)) {\n var a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n }\n function createConsumer() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n return new Consumer(url);\n }\n function getConfig(name) {\n var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n exports.Connection = Connection;\n exports.ConnectionMonitor = ConnectionMonitor;\n exports.Consumer = Consumer;\n exports.INTERNAL = INTERNAL;\n exports.Subscription = Subscription;\n exports.Subscriptions = Subscriptions;\n exports.SubscriptionGuarantor = SubscriptionGuarantor;\n exports.adapters = adapters;\n exports.createWebSocketURL = createWebSocketURL;\n exports.logger = logger;\n exports.createConsumer = createConsumer;\n exports.getConfig = getConfig;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n// @ts-nocheck\nimport { createConsumer } from \"@rails/actioncable\";\n\nexport default createConsumer();\n"],"names":["global","factory","exports","this","adapters","logger","_adapters$logger","_len","messages","_key","_typeof","obj","classCallCheck","instance","Constructor","createClass","defineProperties","target","props","i","descriptor","protoProps","staticProps","now","secondsSince","time","clamp","number","min","max","ConnectionMonitor","connection","_this","_constructor$pollInte","multiplier","interval","_this2","INTERNAL","message_types","protocols","supportedProtocols","indexOf","Connection","consumer","data","_ref","allowReconnect","error","states","state","eventName","handler","event","_JSON$parse","identifier","message","reason","reconnect","type","extend","object","properties","key","value","Subscription","params","mixin","action","SubscriptionGuarantor","subscriptions","subscription","s","Subscriptions","channelName","channel","callbackName","_this3","args","_len2","_key2","_this4","command","Consumer","url","createWebSocketURL","a","createConsumer","getConfig","name","element"],"mappings":"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","x_google_ignoreList":[0]}