{"version":3,"file":"assets/js/store-62858266cc9ec84149c7.js","mappings":"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","sources":["webpack://@aptero/aptero-meet/./node_modules/event-target-shim/dist/event-target-shim.js","webpack://@aptero/aptero-meet/./node_modules/js-cookie/src/js.cookie.js","webpack://@aptero/aptero-meet/./node_modules/jsonschema/lib/attribute.js","webpack://@aptero/aptero-meet/./node_modules/jsonschema/lib/helpers.js","webpack://@aptero/aptero-meet/./node_modules/jsonschema/lib/index.js","webpack://@aptero/aptero-meet/./node_modules/jsonschema/lib/scan.js","webpack://@aptero/aptero-meet/./node_modules/jsonschema/lib/validator.js","webpack://@aptero/aptero-meet/./node_modules/jwt-decode/lib/atob.js","webpack://@aptero/aptero-meet/./node_modules/jwt-decode/lib/base64_url_decode.js","webpack://@aptero/aptero-meet/./node_modules/jwt-decode/lib/index.js","webpack://@aptero/aptero-meet/./node_modules/phoenix/js/phoenix.js"],"sourcesContent":["/**\n * @author Toru Nagashima \n * @copyright 2015 Toru Nagashima. All rights reserved.\n * See LICENSE file in root directory for full license.\n */\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\n * @typedef {object} PrivateData\n * @property {EventTarget} eventTarget The event target.\n * @property {{type:string}} event The original event object.\n * @property {number} eventPhase The current event phase.\n * @property {EventTarget|null} currentTarget The current event target.\n * @property {boolean} canceled The flag to prevent default.\n * @property {boolean} stopped The flag to stop propagation immediately.\n * @property {Function|null} passiveListener The listener if the current listener is passive. Otherwise this is null.\n * @property {number} timeStamp The unix time.\n * @private\n */\n\n/**\n * Private data for event wrappers.\n * @type {WeakMap}\n * @private\n */\nconst privateData = new WeakMap();\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap}\n * @private\n */\nconst wrappers = new WeakMap();\n\n/**\n * Get private data.\n * @param {Event} event The event object to get private data.\n * @returns {PrivateData} The private data of the event.\n * @private\n */\nfunction pd(event) {\n const retv = privateData.get(event);\n console.assert(retv != null, \"'this' is expected an Event object, but got\", event);\n return retv\n}\n\n/**\n * @see https://dom.spec.whatwg.org/#interface-event\n * @private\n */\n/**\n * The event wrapper.\n * @constructor\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Event|{type:string}} event The original event to wrap.\n */\nfunction Event(eventTarget, event) {\n privateData.set(this, {\n eventTarget,\n event,\n eventPhase: 2,\n currentTarget: eventTarget,\n canceled: false,\n stopped: false,\n passiveListener: null,\n timeStamp: event.timeStamp || Date.now(),\n });\n\n // https://heycam.github.io/webidl/#Unforgeable\n Object.defineProperty(this, \"isTrusted\", { value: false, enumerable: true });\n\n // Define accessors\n const keys = Object.keys(event);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in this)) {\n Object.defineProperty(this, key, defineRedirectDescriptor(key));\n }\n }\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEvent.prototype = {\n /**\n * The type of this event.\n * @type {string}\n */\n get type() {\n return pd(this).event.type\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get target() {\n return pd(this).eventTarget\n },\n\n /**\n * The target of this event.\n * @type {EventTarget}\n */\n get currentTarget() {\n return pd(this).currentTarget\n },\n\n /**\n * @returns {EventTarget[]} The composed path of this event.\n */\n composedPath() {\n const currentTarget = pd(this).currentTarget;\n if (currentTarget == null) {\n return []\n }\n return [currentTarget]\n },\n\n /**\n * Constant of NONE.\n * @type {number}\n */\n get NONE() {\n return 0\n },\n\n /**\n * Constant of CAPTURING_PHASE.\n * @type {number}\n */\n get CAPTURING_PHASE() {\n return 1\n },\n\n /**\n * Constant of AT_TARGET.\n * @type {number}\n */\n get AT_TARGET() {\n return 2\n },\n\n /**\n * Constant of BUBBLING_PHASE.\n * @type {number}\n */\n get BUBBLING_PHASE() {\n return 3\n },\n\n /**\n * The target of this event.\n * @type {number}\n */\n get eventPhase() {\n return pd(this).eventPhase\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopPropagation() {\n const data = pd(this);\n if (typeof data.event.stopPropagation === \"function\") {\n data.event.stopPropagation();\n }\n },\n\n /**\n * Stop event bubbling.\n * @returns {void}\n */\n stopImmediatePropagation() {\n const data = pd(this);\n\n data.stopped = true;\n if (typeof data.event.stopImmediatePropagation === \"function\") {\n data.event.stopImmediatePropagation();\n }\n },\n\n /**\n * The flag to be bubbling.\n * @type {boolean}\n */\n get bubbles() {\n return Boolean(pd(this).event.bubbles)\n },\n\n /**\n * The flag to be cancelable.\n * @type {boolean}\n */\n get cancelable() {\n return Boolean(pd(this).event.cancelable)\n },\n\n /**\n * Cancel this event.\n * @returns {void}\n */\n preventDefault() {\n const data = pd(this);\n if (data.passiveListener != null) {\n console.warn(\"Event#preventDefault() was called from a passive listener:\", data.passiveListener);\n return\n }\n if (!data.event.cancelable) {\n return\n }\n\n data.canceled = true;\n if (typeof data.event.preventDefault === \"function\") {\n data.event.preventDefault();\n }\n },\n\n /**\n * The flag to indicate cancellation state.\n * @type {boolean}\n */\n get defaultPrevented() {\n return pd(this).canceled\n },\n\n /**\n * The flag to be composed.\n * @type {boolean}\n */\n get composed() {\n return Boolean(pd(this).event.composed)\n },\n\n /**\n * The unix time of this event.\n * @type {number}\n */\n get timeStamp() {\n return pd(this).timeStamp\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(Event.prototype, \"constructor\", { value: Event, configurable: true, writable: true });\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof window !== \"undefined\" && typeof window.Event !== \"undefined\") {\n Object.setPrototypeOf(Event.prototype, window.Event.prototype);\n\n // Make association for wrappers.\n wrappers.set(window.Event.prototype, Event);\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to redirect the property.\n * @private\n */\nfunction defineRedirectDescriptor(key) {\n return {\n get() {\n return pd(this).event[key]\n },\n set(value) {\n pd(this).event[key] = value;\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Get the property descriptor to call a given method property.\n * @param {string} key Property name to define property descriptor.\n * @returns {PropertyDescriptor} The property descriptor to call the method property.\n * @private\n */\nfunction defineCallDescriptor(key) {\n return {\n value() {\n const event = pd(this).event;\n return event[key].apply(event, arguments)\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define new wrapper class.\n * @param {Function} BaseEvent The base wrapper class.\n * @param {Object} proto The prototype of the original event.\n * @returns {Function} The defined wrapper class.\n * @private\n */\nfunction defineWrapper(BaseEvent, proto) {\n const keys = Object.keys(proto);\n if (keys.length === 0) {\n return BaseEvent\n }\n\n /** CustomEvent */\n function CustomEvent(eventTarget, event) {\n BaseEvent.call(this, eventTarget, event);\n }\n\n CustomEvent.prototype = Object.create(BaseEvent.prototype, {\n constructor: { value: CustomEvent, configurable: true, writable: true },\n });\n\n // Define accessors.\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (!(key in BaseEvent.prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(proto, key);\n const isFunc = (typeof descriptor.value === \"function\");\n Object.defineProperty(\n CustomEvent.prototype,\n key,\n isFunc ? defineCallDescriptor(key) : defineRedirectDescriptor(key)\n );\n }\n }\n\n return CustomEvent\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param {Object} proto The prototype of the original event to get its wrapper.\n * @returns {Function} The wrapper class.\n * @private\n */\nfunction getWrapper(proto) {\n if (proto == null || proto === Object.prototype) {\n return Event\n }\n\n let wrapper = wrappers.get(proto);\n if (wrapper == null) {\n wrapper = defineWrapper(getWrapper(Object.getPrototypeOf(proto)), proto);\n wrappers.set(proto, wrapper);\n }\n return wrapper\n}\n\n/**\n * Wrap a given event to management a dispatching.\n * @param {EventTarget} eventTarget The event target of this dispatching.\n * @param {Object} event The event to wrap.\n * @returns {Event} The wrapper instance.\n * @private\n */\nfunction wrapEvent(eventTarget, event) {\n const Wrapper = getWrapper(Object.getPrototypeOf(event));\n return new Wrapper(eventTarget, event)\n}\n\n/**\n * Get the stopped flag of a given event.\n * @param {Event} event The event to get.\n * @returns {boolean} The flag to stop propagation immediately.\n * @private\n */\nfunction isStopped(event) {\n return pd(event).stopped\n}\n\n/**\n * Set the current event phase of a given event.\n * @param {Event} event The event to set current target.\n * @param {number} eventPhase New event phase.\n * @returns {void}\n * @private\n */\nfunction setEventPhase(event, eventPhase) {\n pd(event).eventPhase = eventPhase;\n}\n\n/**\n * Set the current target of a given event.\n * @param {Event} event The event to set current target.\n * @param {EventTarget|null} currentTarget New current target.\n * @returns {void}\n * @private\n */\nfunction setCurrentTarget(event, currentTarget) {\n pd(event).currentTarget = currentTarget;\n}\n\n/**\n * Set a passive listener of a given event.\n * @param {Event} event The event to set current target.\n * @param {Function|null} passiveListener New passive listener.\n * @returns {void}\n * @private\n */\nfunction setPassiveListener(event, passiveListener) {\n pd(event).passiveListener = passiveListener;\n}\n\n/**\n * @typedef {object} ListenerNode\n * @property {Function} listener\n * @property {1|2|3} listenerType\n * @property {boolean} passive\n * @property {boolean} once\n * @property {ListenerNode|null} next\n * @private\n */\n\n/**\n * @type {WeakMap>}\n * @private\n */\nconst listenersMap = new WeakMap();\n\n// Listener types\nconst CAPTURE = 1;\nconst BUBBLE = 2;\nconst ATTRIBUTE = 3;\n\n/**\n * Check whether a given value is an object or not.\n * @param {any} x The value to check.\n * @returns {boolean} `true` if the value is an object.\n */\nfunction isObject(x) {\n return x !== null && typeof x === \"object\" //eslint-disable-line no-restricted-syntax\n}\n\n/**\n * Get listeners.\n * @param {EventTarget} eventTarget The event target to get.\n * @returns {Map} The listeners.\n * @private\n */\nfunction getListeners(eventTarget) {\n const listeners = listenersMap.get(eventTarget);\n if (listeners == null) {\n throw new TypeError(\"'this' is expected an EventTarget object, but got another value.\")\n }\n return listeners\n}\n\n/**\n * Get the property descriptor for the event attribute of a given event.\n * @param {string} eventName The event name to get property descriptor.\n * @returns {PropertyDescriptor} The property descriptor.\n * @private\n */\nfunction defineEventAttributeDescriptor(eventName) {\n return {\n get() {\n const listeners = getListeners(this);\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n return node.listener\n }\n node = node.next;\n }\n return null\n },\n\n set(listener) {\n if (typeof listener !== \"function\" && !isObject(listener)) {\n listener = null; // eslint-disable-line no-param-reassign\n }\n const listeners = getListeners(this);\n\n // Traverse to the tail while removing old value.\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listenerType === ATTRIBUTE) {\n // Remove old value.\n if (prev !== null) {\n prev.next = node.next;\n }\n else if (node.next !== null) {\n listeners.set(eventName, node.next);\n }\n else {\n listeners.delete(eventName);\n }\n }\n else {\n prev = node;\n }\n\n node = node.next;\n }\n\n // Add new value.\n if (listener !== null) {\n const newNode = {\n listener,\n listenerType: ATTRIBUTE,\n passive: false,\n once: false,\n next: null,\n };\n if (prev === null) {\n listeners.set(eventName, newNode);\n }\n else {\n prev.next = newNode;\n }\n }\n },\n configurable: true,\n enumerable: true,\n }\n}\n\n/**\n * Define an event attribute (e.g. `eventTarget.onclick`).\n * @param {Object} eventTargetPrototype The event target prototype to define an event attrbite.\n * @param {string} eventName The event name to define.\n * @returns {void}\n */\nfunction defineEventAttribute(eventTargetPrototype, eventName) {\n Object.defineProperty(eventTargetPrototype, `on${eventName}`, defineEventAttributeDescriptor(eventName));\n}\n\n/**\n * Define a custom EventTarget with event attributes.\n * @param {string[]} eventNames Event names for event attributes.\n * @returns {EventTarget} The custom EventTarget.\n * @private\n */\nfunction defineCustomEventTarget(eventNames) {\n /** CustomEventTarget */\n function CustomEventTarget() {\n EventTarget.call(this);\n }\n\n CustomEventTarget.prototype = Object.create(EventTarget.prototype, {\n constructor: { value: CustomEventTarget, configurable: true, writable: true },\n });\n\n for (let i = 0; i < eventNames.length; ++i) {\n defineEventAttribute(CustomEventTarget.prototype, eventNames[i]);\n }\n\n return CustomEventTarget\n}\n\n/**\n * EventTarget.\n *\n * - This is constructor if no arguments.\n * - This is a function which returns a CustomEventTarget constructor if there are arguments.\n *\n * For example:\n *\n * class A extends EventTarget {}\n * class B extends EventTarget(\"message\") {}\n * class C extends EventTarget(\"message\", \"error\") {}\n * class D extends EventTarget([\"message\", \"error\"]) {}\n */\nfunction EventTarget() {\n /*eslint-disable consistent-return */\n if (this instanceof EventTarget) {\n listenersMap.set(this, new Map());\n return\n }\n if (arguments.length === 1 && Array.isArray(arguments[0])) {\n return defineCustomEventTarget(arguments[0])\n }\n if (arguments.length > 0) {\n const types = new Array(arguments.length);\n for (let i = 0; i < arguments.length; ++i) {\n types[i] = arguments[i];\n }\n return defineCustomEventTarget(types)\n }\n throw new TypeError(\"Cannot call a class as a function\")\n /*eslint-enable consistent-return */\n}\n\n// Should be enumerable, but class methods are not enumerable.\nEventTarget.prototype = {\n /**\n * Add a given listener to this event target.\n * @param {string} eventName The event name to add.\n * @param {Function} listener The listener to add.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {boolean} `true` if the listener was added actually.\n */\n addEventListener(eventName, listener, options) {\n if (listener == null) {\n return false\n }\n if (typeof listener !== \"function\" && !isObject(listener)) {\n throw new TypeError(\"'listener' should be a function or an object.\")\n }\n\n const listeners = getListeners(this);\n const optionsIsObj = isObject(options);\n const capture = optionsIsObj ? Boolean(options.capture) : Boolean(options);\n const listenerType = (capture ? CAPTURE : BUBBLE);\n const newNode = {\n listener,\n listenerType,\n passive: optionsIsObj && Boolean(options.passive),\n once: optionsIsObj && Boolean(options.once),\n next: null,\n };\n\n // Set it as the first node if the first node is null.\n let node = listeners.get(eventName);\n if (node === undefined) {\n listeners.set(eventName, newNode);\n return true\n }\n\n // Traverse to the tail while checking duplication..\n let prev = null;\n while (node != null) {\n if (node.listener === listener && node.listenerType === listenerType) {\n // Should ignore duplication.\n return false\n }\n prev = node;\n node = node.next;\n }\n\n // Add it.\n prev.next = newNode;\n return true\n },\n\n /**\n * Remove a given listener from this event target.\n * @param {string} eventName The event name to remove.\n * @param {Function} listener The listener to remove.\n * @param {boolean|{capture?:boolean,passive?:boolean,once?:boolean}} [options] The options for this listener.\n * @returns {boolean} `true` if the listener was removed actually.\n */\n removeEventListener(eventName, listener, options) {\n if (listener == null) {\n return false\n }\n\n const listeners = getListeners(this);\n const capture = isObject(options) ? Boolean(options.capture) : Boolean(options);\n const listenerType = (capture ? CAPTURE : BUBBLE);\n\n let prev = null;\n let node = listeners.get(eventName);\n while (node != null) {\n if (node.listener === listener && node.listenerType === listenerType) {\n if (prev !== null) {\n prev.next = node.next;\n }\n else if (node.next !== null) {\n listeners.set(eventName, node.next);\n }\n else {\n listeners.delete(eventName);\n }\n return true\n }\n\n prev = node;\n node = node.next;\n }\n\n return false\n },\n\n /**\n * Dispatch a given event.\n * @param {Event|{type:string}} event The event to dispatch.\n * @returns {boolean} `false` if canceled.\n */\n dispatchEvent(event) { //eslint-disable-line complexity\n if (event == null || typeof event.type !== \"string\") {\n throw new TypeError(\"\\\"event.type\\\" should be a string.\")\n }\n\n // If listeners aren't registered, terminate.\n const listeners = getListeners(this);\n const eventName = event.type;\n let node = listeners.get(eventName);\n if (node == null) {\n return true\n }\n\n // Since we cannot rewrite several properties, so wrap object.\n const wrappedEvent = wrapEvent(this, event);\n\n // This doesn't process capturing phase and bubbling phase.\n // This isn't participating in a tree.\n let prev = null;\n while (node != null) {\n // Remove this listener if it's once\n if (node.once) {\n if (prev !== null) {\n prev.next = node.next;\n }\n else if (node.next !== null) {\n listeners.set(eventName, node.next);\n }\n else {\n listeners.delete(eventName);\n }\n }\n else {\n prev = node;\n }\n\n // Call this listener\n setPassiveListener(wrappedEvent, (node.passive ? node.listener : null));\n if (typeof node.listener === \"function\") {\n try {\n node.listener.call(this, wrappedEvent);\n }\n catch (err) {\n /*eslint-disable no-console */\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(err);\n }\n /*eslint-enable no-console */\n }\n }\n else if (node.listenerType !== ATTRIBUTE && typeof node.listener.handleEvent === \"function\") {\n node.listener.handleEvent(wrappedEvent);\n }\n\n // Break if `event.stopImmediatePropagation` was called.\n if (isStopped(wrappedEvent)) {\n break\n }\n\n node = node.next;\n }\n setPassiveListener(wrappedEvent, null);\n setEventPhase(wrappedEvent, 0);\n setCurrentTarget(wrappedEvent, null);\n\n return !wrappedEvent.defaultPrevented\n },\n};\n\n// `constructor` is not enumerable.\nObject.defineProperty(EventTarget.prototype, \"constructor\", { value: EventTarget, configurable: true, writable: true });\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (typeof window !== \"undefined\" && typeof window.EventTarget !== \"undefined\") {\n Object.setPrototypeOf(EventTarget.prototype, window.EventTarget.prototype);\n}\n\nexports.defineEventAttribute = defineEventAttribute;\nexports.EventTarget = EventTarget;\nexports.default = EventTarget;\n\nmodule.exports = EventTarget\nmodule.exports.EventTarget = module.exports[\"default\"] = EventTarget\nmodule.exports.defineEventAttribute = defineEventAttribute\n//# sourceMappingURL=event-target-shim.js.map\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","'use strict';\n\nvar helpers = require('./helpers');\n\n/** @type ValidatorResult */\nvar ValidatorResult = helpers.ValidatorResult;\n/** @type SchemaError */\nvar SchemaError = helpers.SchemaError;\n\nvar attribute = {};\n\nattribute.ignoreProperties = {\n // informative properties\n 'id': true,\n 'default': true,\n 'description': true,\n 'title': true,\n // arguments to other properties\n 'additionalItems': true,\n 'then': true,\n 'else': true,\n // special-handled properties\n '$schema': true,\n '$ref': true,\n 'extends': true,\n};\n\n/**\n * @name validators\n */\nvar validators = attribute.validators = {};\n\n/**\n * Validates whether the instance if of a certain type\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {ValidatorResult|null}\n */\nvalidators.type = function validateType (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var types = Array.isArray(schema.type) ? schema.type : [schema.type];\n if (!types.some(this.testType.bind(this, instance, schema, options, ctx))) {\n var list = types.map(function (v) {\n if(!v) return;\n var id = v.$id || v.id;\n return id ? ('<' + id + '>') : (v+'');\n });\n result.addError({\n name: 'type',\n argument: list,\n message: \"is not of a type(s) \" + list,\n });\n }\n return result;\n};\n\nfunction testSchemaNoThrow(instance, options, ctx, callback, schema){\n var throwError = options.throwError;\n var throwAll = options.throwAll;\n options.throwError = false;\n options.throwAll = false;\n var res = this.validateSchema(instance, schema, options, ctx);\n options.throwError = throwError;\n options.throwAll = throwAll;\n\n if (!res.valid && callback instanceof Function) {\n callback(res);\n }\n return res.valid;\n}\n\n/**\n * Validates whether the instance matches some of the given schemas\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {ValidatorResult|null}\n */\nvalidators.anyOf = function validateAnyOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var inner = new ValidatorResult(instance, schema, options, ctx);\n if (!Array.isArray(schema.anyOf)){\n throw new SchemaError(\"anyOf must be an array\");\n }\n if (!schema.anyOf.some(\n testSchemaNoThrow.bind(\n this, instance, options, ctx, function(res){inner.importErrors(res);}\n ))) {\n var list = schema.anyOf.map(function (v, i) {\n var id = v.$id || v.id;\n if(id) return '<' + id + '>';\n return(v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n });\n if (options.nestedErrors) {\n result.importErrors(inner);\n }\n result.addError({\n name: 'anyOf',\n argument: list,\n message: \"is not any of \" + list.join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance matches every given schema\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null}\n */\nvalidators.allOf = function validateAllOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n if (!Array.isArray(schema.allOf)){\n throw new SchemaError(\"allOf must be an array\");\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var self = this;\n schema.allOf.forEach(function(v, i){\n var valid = self.validateSchema(instance, v, options, ctx);\n if(!valid.valid){\n var id = v.$id || v.id;\n var msg = id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n result.addError({\n name: 'allOf',\n argument: { id: msg, length: valid.errors.length, valid: valid },\n message: 'does not match allOf schema ' + msg + ' with ' + valid.errors.length + ' error[s]:',\n });\n result.importErrors(valid);\n }\n });\n return result;\n};\n\n/**\n * Validates whether the instance matches exactly one of the given schemas\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null}\n */\nvalidators.oneOf = function validateOneOf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) {\n return null;\n }\n if (!Array.isArray(schema.oneOf)){\n throw new SchemaError(\"oneOf must be an array\");\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n var inner = new ValidatorResult(instance, schema, options, ctx);\n var count = schema.oneOf.filter(\n testSchemaNoThrow.bind(\n this, instance, options, ctx, function(res) {inner.importErrors(res);}\n ) ).length;\n var list = schema.oneOf.map(function (v, i) {\n var id = v.$id || v.id;\n return id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']';\n });\n if (count!==1) {\n if (options.nestedErrors) {\n result.importErrors(inner);\n }\n result.addError({\n name: 'oneOf',\n argument: list,\n message: \"is not exactly one from \" + list.join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates \"then\" or \"else\" depending on the result of validating \"if\"\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null}\n */\nvalidators.if = function validateIf (instance, schema, options, ctx) {\n // Ignore undefined instances\n if (instance === undefined) return null;\n if (!helpers.isSchema(schema.if)) throw new Error('Expected \"if\" keyword to be a schema');\n var ifValid = testSchemaNoThrow.call(this, instance, options, ctx, null, schema.if);\n var result = new ValidatorResult(instance, schema, options, ctx);\n var res;\n if(ifValid){\n if (schema.then === undefined) return;\n if (!helpers.isSchema(schema.then)) throw new Error('Expected \"then\" keyword to be a schema');\n res = this.validateSchema(instance, schema.then, options, ctx.makeChild(schema.then));\n result.importErrors(res);\n }else{\n if (schema.else === undefined) return;\n if (!helpers.isSchema(schema.else)) throw new Error('Expected \"else\" keyword to be a schema');\n res = this.validateSchema(instance, schema.else, options, ctx.makeChild(schema.else));\n result.importErrors(res);\n }\n return result;\n};\n\nfunction getEnumerableProperty(object, key){\n // Determine if `key` shows up in `for(var key in object)`\n // First test Object.hasOwnProperty.call as an optimization: that guarantees it does\n if(Object.hasOwnProperty.call(object, key)) return object[key];\n // Test `key in object` as an optimization; false means it won't\n if(!(key in object)) return;\n while( (object = Object.getPrototypeOf(object)) ){\n if(Object.propertyIsEnumerable.call(object, key)) return object[key];\n }\n}\n\n/**\n * Validates propertyNames\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.propertyNames = function validatePropertyNames (instance, schema, options, ctx) {\n if(!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var subschema = schema.propertyNames!==undefined ? schema.propertyNames : {};\n if(!helpers.isSchema(subschema)) throw new SchemaError('Expected \"propertyNames\" to be a schema (object or boolean)');\n\n for (var property in instance) {\n if(getEnumerableProperty(instance, property) !== undefined){\n var res = this.validateSchema(property, subschema, options, ctx.makeChild(subschema));\n result.importErrors(res);\n }\n }\n\n return result;\n};\n\n/**\n * Validates properties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.properties = function validateProperties (instance, schema, options, ctx) {\n if(!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var properties = schema.properties || {};\n for (var property in properties) {\n var subschema = properties[property];\n if(subschema===undefined){\n continue;\n }else if(subschema===null){\n throw new SchemaError('Unexpected null, expected schema in \"properties\"');\n }\n if (typeof options.preValidateProperty == 'function') {\n options.preValidateProperty(instance, property, subschema, options, ctx);\n }\n var prop = getEnumerableProperty(instance, property);\n var res = this.validateSchema(prop, subschema, options, ctx.makeChild(subschema, property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n return result;\n};\n\n/**\n * Test a specific property within in instance against the additionalProperties schema attribute\n * This ignores properties with definitions in the properties schema attribute, but no other attributes.\n * If too many more types of property-existence tests pop up they may need their own class of tests (like `type` has)\n * @private\n * @return {boolean}\n */\nfunction testAdditionalProperty (instance, schema, options, ctx, property, result) {\n if(!this.types.object(instance)) return;\n if (schema.properties && schema.properties[property] !== undefined) {\n return;\n }\n if (schema.additionalProperties === false) {\n result.addError({\n name: 'additionalProperties',\n argument: property,\n message: \"is not allowed to have the additional property \" + JSON.stringify(property),\n });\n } else {\n var additionalProperties = schema.additionalProperties || {};\n\n if (typeof options.preValidateProperty == 'function') {\n options.preValidateProperty(instance, property, additionalProperties, options, ctx);\n }\n\n var res = this.validateSchema(instance[property], additionalProperties, options, ctx.makeChild(additionalProperties, property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n}\n\n/**\n * Validates patternProperties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.patternProperties = function validatePatternProperties (instance, schema, options, ctx) {\n if(!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var patternProperties = schema.patternProperties || {};\n\n for (var property in instance) {\n var test = true;\n for (var pattern in patternProperties) {\n var subschema = patternProperties[pattern];\n if(subschema===undefined){\n continue;\n }else if(subschema===null){\n throw new SchemaError('Unexpected null, expected schema in \"patternProperties\"');\n }\n try {\n var regexp = new RegExp(pattern, 'u');\n } catch(_e) {\n // In the event the stricter handling causes an error, fall back on the forgiving handling\n // DEPRECATED\n regexp = new RegExp(pattern);\n }\n if (!regexp.test(property)) {\n continue;\n }\n test = false;\n\n if (typeof options.preValidateProperty == 'function') {\n options.preValidateProperty(instance, property, subschema, options, ctx);\n }\n\n var res = this.validateSchema(instance[property], subschema, options, ctx.makeChild(subschema, property));\n if(res.instance !== result.instance[property]) result.instance[property] = res.instance;\n result.importErrors(res);\n }\n if (test) {\n testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n }\n }\n\n return result;\n};\n\n/**\n * Validates additionalProperties\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.additionalProperties = function validateAdditionalProperties (instance, schema, options, ctx) {\n if(!this.types.object(instance)) return;\n // if patternProperties is defined then we'll test when that one is called instead\n if (schema.patternProperties) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n for (var property in instance) {\n testAdditionalProperty.call(this, instance, schema, options, ctx, property, result);\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minProperties = function validateMinProperties (instance, schema, options, ctx) {\n if (!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var keys = Object.keys(instance);\n if (!(keys.length >= schema.minProperties)) {\n result.addError({\n name: 'minProperties',\n argument: schema.minProperties,\n message: \"does not meet minimum property length of \" + schema.minProperties,\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxProperties = function validateMaxProperties (instance, schema, options, ctx) {\n if (!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var keys = Object.keys(instance);\n if (!(keys.length <= schema.maxProperties)) {\n result.addError({\n name: 'maxProperties',\n argument: schema.maxProperties,\n message: \"does not meet maximum property length of \" + schema.maxProperties,\n });\n }\n return result;\n};\n\n/**\n * Validates items when instance is an array\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.items = function validateItems (instance, schema, options, ctx) {\n var self = this;\n if (!this.types.array(instance)) return;\n if (schema.items===undefined) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n instance.every(function (value, i) {\n if(Array.isArray(schema.items)){\n var items = schema.items[i]===undefined ? schema.additionalItems : schema.items[i];\n }else{\n var items = schema.items;\n }\n if (items === undefined) {\n return true;\n }\n if (items === false) {\n result.addError({\n name: 'items',\n message: \"additionalItems not permitted\",\n });\n return false;\n }\n var res = self.validateSchema(value, items, options, ctx.makeChild(items, i));\n if(res.instance !== result.instance[i]) result.instance[i] = res.instance;\n result.importErrors(res);\n return true;\n });\n return result;\n};\n\n/**\n * Validates the \"contains\" keyword\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {String|null|ValidatorResult}\n */\nvalidators.contains = function validateContains (instance, schema, options, ctx) {\n var self = this;\n if (!this.types.array(instance)) return;\n if (schema.contains===undefined) return;\n if (!helpers.isSchema(schema.contains)) throw new Error('Expected \"contains\" keyword to be a schema');\n var result = new ValidatorResult(instance, schema, options, ctx);\n var count = instance.some(function (value, i) {\n var res = self.validateSchema(value, schema.contains, options, ctx.makeChild(schema.contains, i));\n return res.errors.length===0;\n });\n if(count===false){\n result.addError({\n name: 'contains',\n argument: schema.contains,\n message: \"must contain an item matching given schema\",\n });\n }\n return result;\n};\n\n/**\n * Validates minimum and exclusiveMinimum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minimum = function validateMinimum (instance, schema, options, ctx) {\n if (!this.types.number(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) {\n if(!(instance > schema.minimum)){\n result.addError({\n name: 'minimum',\n argument: schema.minimum,\n message: \"must be greater than \" + schema.minimum,\n });\n }\n } else {\n if(!(instance >= schema.minimum)){\n result.addError({\n name: 'minimum',\n argument: schema.minimum,\n message: \"must be greater than or equal to \" + schema.minimum,\n });\n }\n }\n return result;\n};\n\n/**\n * Validates maximum and exclusiveMaximum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maximum = function validateMaximum (instance, schema, options, ctx) {\n if (!this.types.number(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) {\n if(!(instance < schema.maximum)){\n result.addError({\n name: 'maximum',\n argument: schema.maximum,\n message: \"must be less than \" + schema.maximum,\n });\n }\n } else {\n if(!(instance <= schema.maximum)){\n result.addError({\n name: 'maximum',\n argument: schema.maximum,\n message: \"must be less than or equal to \" + schema.maximum,\n });\n }\n }\n return result;\n};\n\n/**\n * Validates the number form of exclusiveMinimum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.exclusiveMinimum = function validateExclusiveMinimum (instance, schema, options, ctx) {\n // Support the boolean form of exclusiveMinimum, which is handled by the \"minimum\" keyword.\n if(typeof schema.exclusiveMinimum === 'boolean') return;\n if (!this.types.number(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var valid = instance > schema.exclusiveMinimum;\n if (!valid) {\n result.addError({\n name: 'exclusiveMinimum',\n argument: schema.exclusiveMinimum,\n message: \"must be strictly greater than \" + schema.exclusiveMinimum,\n });\n }\n return result;\n};\n\n/**\n * Validates the number form of exclusiveMaximum when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.exclusiveMaximum = function validateExclusiveMaximum (instance, schema, options, ctx) {\n // Support the boolean form of exclusiveMaximum, which is handled by the \"maximum\" keyword.\n if(typeof schema.exclusiveMaximum === 'boolean') return;\n if (!this.types.number(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var valid = instance < schema.exclusiveMaximum;\n if (!valid) {\n result.addError({\n name: 'exclusiveMaximum',\n argument: schema.exclusiveMaximum,\n message: \"must be strictly less than \" + schema.exclusiveMaximum,\n });\n }\n return result;\n};\n\n/**\n * Perform validation for multipleOf and divisibleBy, which are essentially the same.\n * @param instance\n * @param schema\n * @param validationType\n * @param errorMessage\n * @returns {String|null}\n */\nvar validateMultipleOfOrDivisbleBy = function validateMultipleOfOrDivisbleBy (instance, schema, options, ctx, validationType, errorMessage) {\n if (!this.types.number(instance)) return;\n\n var validationArgument = schema[validationType];\n if (validationArgument == 0) {\n throw new SchemaError(validationType + \" cannot be zero\");\n }\n\n var result = new ValidatorResult(instance, schema, options, ctx);\n\n var instanceDecimals = helpers.getDecimalPlaces(instance);\n var divisorDecimals = helpers.getDecimalPlaces(validationArgument);\n\n var maxDecimals = Math.max(instanceDecimals , divisorDecimals);\n var multiplier = Math.pow(10, maxDecimals);\n\n if (Math.round(instance * multiplier) % Math.round(validationArgument * multiplier) !== 0) {\n result.addError({\n name: validationType,\n argument: validationArgument,\n message: errorMessage + JSON.stringify(validationArgument),\n });\n }\n\n return result;\n};\n\n/**\n * Validates divisibleBy when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.multipleOf = function validateMultipleOf (instance, schema, options, ctx) {\n return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, \"multipleOf\", \"is not a multiple of (divisible by) \");\n};\n\n/**\n * Validates multipleOf when the type of the instance value is a number.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.divisibleBy = function validateDivisibleBy (instance, schema, options, ctx) {\n return validateMultipleOfOrDivisbleBy.call(this, instance, schema, options, ctx, \"divisibleBy\", \"is not divisible by (multiple of) \");\n};\n\n/**\n * Validates whether the instance value is present.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.required = function validateRequired (instance, schema, options, ctx) {\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (instance === undefined && schema.required === true) {\n // A boolean form is implemented for reverse-compatibility with schemas written against older drafts\n result.addError({\n name: 'required',\n message: \"is required\",\n });\n } else if (this.types.object(instance) && Array.isArray(schema.required)) {\n schema.required.forEach(function(n){\n if(getEnumerableProperty(instance, n)===undefined){\n result.addError({\n name: 'required',\n argument: n,\n message: \"requires property \" + JSON.stringify(n),\n });\n }\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value matches the regular expression, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.pattern = function validatePattern (instance, schema, options, ctx) {\n if (!this.types.string(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var pattern = schema.pattern;\n try {\n var regexp = new RegExp(pattern, 'u');\n } catch(_e) {\n // In the event the stricter handling causes an error, fall back on the forgiving handling\n // DEPRECATED\n regexp = new RegExp(pattern);\n }\n if (!instance.match(regexp)) {\n result.addError({\n name: 'pattern',\n argument: schema.pattern,\n message: \"does not match pattern \" + JSON.stringify(schema.pattern.toString()),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is of a certain defined format or a custom\n * format.\n * The following formats are supported for string types:\n * - date-time\n * - date\n * - time\n * - ip-address\n * - ipv6\n * - uri\n * - color\n * - host-name\n * - alpha\n * - alpha-numeric\n * - utc-millisec\n * @param instance\n * @param schema\n * @param [options]\n * @param [ctx]\n * @return {String|null}\n */\nvalidators.format = function validateFormat (instance, schema, options, ctx) {\n if (instance===undefined) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!result.disableFormat && !helpers.isFormat(instance, schema.format, this)) {\n result.addError({\n name: 'format',\n argument: schema.format,\n message: \"does not conform to the \" + JSON.stringify(schema.format) + \" format\",\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at least of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minLength = function validateMinLength (instance, schema, options, ctx) {\n if (!this.types.string(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var hsp = instance.match(/[\\uDC00-\\uDFFF]/g);\n var length = instance.length - (hsp ? hsp.length : 0);\n if (!(length >= schema.minLength)) {\n result.addError({\n name: 'minLength',\n argument: schema.minLength,\n message: \"does not meet minimum length of \" + schema.minLength,\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is at most of a certain length, when the instance value is a string.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxLength = function validateMaxLength (instance, schema, options, ctx) {\n if (!this.types.string(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n // TODO if this was already computed in \"minLength\", use that value instead of re-computing\n var hsp = instance.match(/[\\uDC00-\\uDFFF]/g);\n var length = instance.length - (hsp ? hsp.length : 0);\n if (!(length <= schema.maxLength)) {\n result.addError({\n name: 'maxLength',\n argument: schema.maxLength,\n message: \"does not meet maximum length of \" + schema.maxLength,\n });\n }\n return result;\n};\n\n/**\n * Validates whether instance contains at least a minimum number of items, when the instance is an Array.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.minItems = function validateMinItems (instance, schema, options, ctx) {\n if (!this.types.array(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length >= schema.minItems)) {\n result.addError({\n name: 'minItems',\n argument: schema.minItems,\n message: \"does not meet minimum length of \" + schema.minItems,\n });\n }\n return result;\n};\n\n/**\n * Validates whether instance contains no more than a maximum number of items, when the instance is an Array.\n * @param instance\n * @param schema\n * @return {String|null}\n */\nvalidators.maxItems = function validateMaxItems (instance, schema, options, ctx) {\n if (!this.types.array(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!(instance.length <= schema.maxItems)) {\n result.addError({\n name: 'maxItems',\n argument: schema.maxItems,\n message: \"does not meet maximum length of \" + schema.maxItems,\n });\n }\n return result;\n};\n\n/**\n * Deep compares arrays for duplicates\n * @param v\n * @param i\n * @param a\n * @private\n * @return {boolean}\n */\nfunction testArrays (v, i, a) {\n var j, len = a.length;\n for (j = i + 1, len; j < len; j++) {\n if (helpers.deepCompareStrict(v, a[j])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Validates whether there are no duplicates, when the instance is an Array.\n * @param instance\n * @return {String|null}\n */\nvalidators.uniqueItems = function validateUniqueItems (instance, schema, options, ctx) {\n if (schema.uniqueItems!==true) return;\n if (!this.types.array(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!instance.every(testArrays)) {\n result.addError({\n name: 'uniqueItems',\n message: \"contains duplicate item\",\n });\n }\n return result;\n};\n\n/**\n * Validate for the presence of dependency properties, if the instance is an object.\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {null|ValidatorResult}\n */\nvalidators.dependencies = function validateDependencies (instance, schema, options, ctx) {\n if (!this.types.object(instance)) return;\n var result = new ValidatorResult(instance, schema, options, ctx);\n for (var property in schema.dependencies) {\n if (instance[property] === undefined) {\n continue;\n }\n var dep = schema.dependencies[property];\n var childContext = ctx.makeChild(dep, property);\n if (typeof dep == 'string') {\n dep = [dep];\n }\n if (Array.isArray(dep)) {\n dep.forEach(function (prop) {\n if (instance[prop] === undefined) {\n result.addError({\n // FIXME there's two different \"dependencies\" errors here with slightly different outputs\n // Can we make these the same? Or should we create different error types?\n name: 'dependencies',\n argument: childContext.propertyPath,\n message: \"property \" + prop + \" not found, required by \" + childContext.propertyPath,\n });\n }\n });\n } else {\n var res = this.validateSchema(instance, dep, options, childContext);\n if(result.instance !== res.instance) result.instance = res.instance;\n if (res && res.errors.length) {\n result.addError({\n name: 'dependencies',\n argument: childContext.propertyPath,\n message: \"does not meet dependency required by \" + childContext.propertyPath,\n });\n result.importErrors(res);\n }\n }\n }\n return result;\n};\n\n/**\n * Validates whether the instance value is one of the enumerated values.\n *\n * @param instance\n * @param schema\n * @return {ValidatorResult|null}\n */\nvalidators['enum'] = function validateEnum (instance, schema, options, ctx) {\n if (instance === undefined) {\n return null;\n }\n if (!Array.isArray(schema['enum'])) {\n throw new SchemaError(\"enum expects an array\", schema);\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!schema['enum'].some(helpers.deepCompareStrict.bind(null, instance))) {\n result.addError({\n name: 'enum',\n argument: schema['enum'],\n message: \"is not one of enum values: \" + schema['enum'].map(String).join(','),\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance exactly matches a given value\n *\n * @param instance\n * @param schema\n * @return {ValidatorResult|null}\n */\nvalidators['const'] = function validateEnum (instance, schema, options, ctx) {\n if (instance === undefined) {\n return null;\n }\n var result = new ValidatorResult(instance, schema, options, ctx);\n if (!helpers.deepCompareStrict(schema['const'], instance)) {\n result.addError({\n name: 'const',\n argument: schema['const'],\n message: \"does not exactly match expected constant: \" + schema['const'],\n });\n }\n return result;\n};\n\n/**\n * Validates whether the instance if of a prohibited type.\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @return {null|ValidatorResult}\n */\nvalidators.not = validators.disallow = function validateNot (instance, schema, options, ctx) {\n var self = this;\n if(instance===undefined) return null;\n var result = new ValidatorResult(instance, schema, options, ctx);\n var notTypes = schema.not || schema.disallow;\n if(!notTypes) return null;\n if(!Array.isArray(notTypes)) notTypes=[notTypes];\n notTypes.forEach(function (type) {\n if (self.testType(instance, schema, options, ctx, type)) {\n var id = type && (type.$id || type.id);\n var schemaId = id || type;\n result.addError({\n name: 'not',\n argument: schemaId,\n message: \"is of prohibited type \" + schemaId,\n });\n }\n });\n return result;\n};\n\nmodule.exports = attribute;\n","'use strict';\n\nvar uri = require('url');\n\nvar ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, path, name, argument) {\n if(Array.isArray(path)){\n this.path = path;\n this.property = path.reduce(function(sum, item){\n return sum + makeSuffix(item);\n }, 'instance');\n }else if(path !== undefined){\n this.property = path;\n }\n if (message) {\n this.message = message;\n }\n if (schema) {\n var id = schema.$id || schema.id;\n this.schema = id || schema;\n }\n if (instance !== undefined) {\n this.instance = instance;\n }\n this.name = name;\n this.argument = argument;\n this.stack = this.toString();\n};\n\nValidationError.prototype.toString = function toString() {\n return this.property + ' ' + this.message;\n};\n\nvar ValidatorResult = exports.ValidatorResult = function ValidatorResult(instance, schema, options, ctx) {\n this.instance = instance;\n this.schema = schema;\n this.options = options;\n this.path = ctx.path;\n this.propertyPath = ctx.propertyPath;\n this.errors = [];\n this.throwError = options && options.throwError;\n this.throwFirst = options && options.throwFirst;\n this.throwAll = options && options.throwAll;\n this.disableFormat = options && options.disableFormat === true;\n};\n\nValidatorResult.prototype.addError = function addError(detail) {\n var err;\n if (typeof detail == 'string') {\n err = new ValidationError(detail, this.instance, this.schema, this.path);\n } else {\n if (!detail) throw new Error('Missing error detail');\n if (!detail.message) throw new Error('Missing error message');\n if (!detail.name) throw new Error('Missing validator type');\n err = new ValidationError(detail.message, this.instance, this.schema, this.path, detail.name, detail.argument);\n }\n\n this.errors.push(err);\n if (this.throwFirst) {\n throw new ValidatorResultError(this);\n }else if(this.throwError){\n throw err;\n }\n return err;\n};\n\nValidatorResult.prototype.importErrors = function importErrors(res) {\n if (typeof res == 'string' || (res && res.validatorType)) {\n this.addError(res);\n } else if (res && res.errors) {\n this.errors = this.errors.concat(res.errors);\n }\n};\n\nfunction stringizer (v,i){\n return i+': '+v.toString()+'\\n';\n}\nValidatorResult.prototype.toString = function toString(res) {\n return this.errors.map(stringizer).join('');\n};\n\nObject.defineProperty(ValidatorResult.prototype, \"valid\", { get: function() {\n return !this.errors.length;\n} });\n\nmodule.exports.ValidatorResultError = ValidatorResultError;\nfunction ValidatorResultError(result) {\n if(Error.captureStackTrace){\n Error.captureStackTrace(this, ValidatorResultError);\n }\n this.instance = result.instance;\n this.schema = result.schema;\n this.options = result.options;\n this.errors = result.errors;\n}\nValidatorResultError.prototype = new Error();\nValidatorResultError.prototype.constructor = ValidatorResultError;\nValidatorResultError.prototype.name = \"Validation Error\";\n\n/**\n * Describes a problem with a Schema which prevents validation of an instance\n * @name SchemaError\n * @constructor\n */\nvar SchemaError = exports.SchemaError = function SchemaError (msg, schema) {\n this.message = msg;\n this.schema = schema;\n Error.call(this, msg);\n Error.captureStackTrace(this, SchemaError);\n};\nSchemaError.prototype = Object.create(Error.prototype,\n {\n constructor: {value: SchemaError, enumerable: false},\n name: {value: 'SchemaError', enumerable: false},\n });\n\nvar SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, path, base, schemas) {\n this.schema = schema;\n this.options = options;\n if(Array.isArray(path)){\n this.path = path;\n this.propertyPath = path.reduce(function(sum, item){\n return sum + makeSuffix(item);\n }, 'instance');\n }else{\n this.propertyPath = path;\n }\n this.base = base;\n this.schemas = schemas;\n};\n\nSchemaContext.prototype.resolve = function resolve (target) {\n return uri.resolve(this.base, target);\n};\n\nSchemaContext.prototype.makeChild = function makeChild(schema, propertyName){\n var path = (propertyName===undefined) ? this.path : this.path.concat([propertyName]);\n var id = schema.$id || schema.id;\n var base = uri.resolve(this.base, id||'');\n var ctx = new SchemaContext(schema, this.options, path, base, Object.create(this.schemas));\n if(id && !ctx.schemas[base]){\n ctx.schemas[base] = schema;\n }\n return ctx;\n};\n\nvar FORMAT_REGEXPS = exports.FORMAT_REGEXPS = {\n // 7.3.1. Dates, Times, and Duration\n 'date-time': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])[tT ](2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])(\\.\\d+)?([zZ]|[+-]([0-5][0-9]):(60|[0-5][0-9]))$/,\n 'date': /^\\d{4}-(?:0[0-9]{1}|1[0-2]{1})-(3[01]|0[1-9]|[12][0-9])$/,\n 'time': /^(2[0-4]|[01][0-9]):([0-5][0-9]):(60|[0-5][0-9])$/,\n 'duration': /P(T\\d+(H(\\d+M(\\d+S)?)?|M(\\d+S)?|S)|\\d+(D|M(\\d+D)?|Y(\\d+M(\\d+D)?)?)(T\\d+(H(\\d+M(\\d+S)?)?|M(\\d+S)?|S))?|\\d+W)/i,\n\n // 7.3.2. Email Addresses\n // TODO: fix the email production\n 'email': /^(?:[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+\\.)*[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\`\\{\\|\\}\\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!\\.)){0,61}[a-zA-Z0-9]?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\\[(?:(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\.){3}(?:[01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\]))$/,\n 'idn-email': /^(\"(?:[!#-\\[\\]-\\u{10FFFF}]|\\\\[\\t -\\u{10FFFF}])*\"|[!#-'*+\\-/-9=?A-Z\\^-\\u{10FFFF}](?:\\.?[!#-'*+\\-/-9=?A-Z\\^-\\u{10FFFF}])*)@([!#-'*+\\-/-9=?A-Z\\^-\\u{10FFFF}](?:\\.?[!#-'*+\\-/-9=?A-Z\\^-\\u{10FFFF}])*|\\[[!-Z\\^-\\u{10FFFF}]*\\])$/u,\n\n // 7.3.3. Hostnames\n\n // 7.3.4. IP Addresses\n 'ip-address': /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n // FIXME whitespace is invalid\n 'ipv6': /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/,\n\n // 7.3.5. Resource Identifiers\n // TODO: A more accurate regular expression for \"uri\" goes:\n // [A-Za-z][+\\-.0-9A-Za-z]*:((/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?)?)?#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])|/?%[0-9A-Fa-f]{2}|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*(#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\\d*)?|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?:\\d*|\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)?)?\n 'uri': /^[a-zA-Z][a-zA-Z0-9+.-]*:[^\\s]*$/,\n 'uri-reference': /^(((([A-Za-z][+\\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\\-.0-9A-Za-z]*:)?\\/((%[0-9A-Fa-f]{2}|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(([A-Za-z][+\\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~]|[A-Za-z][+\\-.0-9A-Za-z]*[!$&-*,;=@_~])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|([A-Za-z][+\\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\\-.0-9A-Za-z]*:)?\\/((%[0-9A-Fa-f]{2}|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\\d*)?|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?:\\d*|\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\\])?)?|[A-Za-z][+\\-.0-9A-Za-z]*:?)?$/,\n 'iri': /^[a-zA-Z][a-zA-Z0-9+.-]*:[^\\s]*$/,\n 'iri-reference': /^(((([A-Za-z][+\\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~-\\u{10FFFF}]|[/?])|\\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*|([A-Za-z][+\\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\\-.0-9A-Za-z]*:)?\\/((%[0-9A-Fa-f]{2}|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\\u{10FFFF}])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~-\\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?[/?]|[!$&-.0-;=?-Z_a-z~-\\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*|(\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\\u{10FFFF}])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~-\\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*|(([A-Za-z][+\\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~-\\u{10FFFF}]|[A-Za-z][+\\-.0-9A-Za-z]*[!$&-*,;=@_~-\\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~-\\u{10FFFF}])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*)?|([A-Za-z][+\\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~-\\u{10FFFF}]|[/?])|\\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*|([A-Za-z][+\\-.0-9A-Za-z]*:)?\\/((%[0-9A-Fa-f]{2}|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\\u{10FFFF}])+|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~-\\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\\])?)(:\\d*)?[/?]|[!$&-.0-;=?-Z_a-z~-\\u{10FFFF}])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~-\\u{10FFFF}])*|\\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~-\\u{10FFFF}])+(:\\d*)?|(\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~-\\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\\])?:\\d*|\\[(([Vv][0-9A-Fa-f]+\\.[!$&-.0-;=A-Z_a-z~-\\u{10FFFF}]+)?|[.0-:A-Fa-f]+)\\])?)?|[A-Za-z][+\\-.0-9A-Za-z]*:?)?$/u,\n 'uuid': /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n\n // 7.3.6. uri-template\n 'uri-template': /(%[0-9a-f]{2}|[!#$&(-;=?@\\[\\]_a-z~]|\\{[!#&+,./;=?@|]?(%[0-9a-f]{2}|[0-9_a-z])(\\.?(%[0-9a-f]{2}|[0-9_a-z]))*(:[1-9]\\d{0,3}|\\*)?(,(%[0-9a-f]{2}|[0-9_a-z])(\\.?(%[0-9a-f]{2}|[0-9_a-z]))*(:[1-9]\\d{0,3}|\\*)?)*\\})*/iu,\n\n // 7.3.7. JSON Pointers\n 'json-pointer': /^(\\/([\\x00-\\x2e0-@\\[-}\\x7f]|~[01])*)*$/iu,\n 'relative-json-pointer': /^\\d+(#|(\\/([\\x00-\\x2e0-@\\[-}\\x7f]|~[01])*)*)$/iu,\n\n // hostname regex from: http://stackoverflow.com/a/1420225/5628\n 'hostname': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n 'host-name': /^(?=.{1,255}$)[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?(?:\\.[0-9A-Za-z](?:(?:[0-9A-Za-z]|-){0,61}[0-9A-Za-z])?)*\\.?$/,\n\n 'utc-millisec': function (input) {\n return (typeof input === 'string') && parseFloat(input) === parseInt(input, 10) && !isNaN(input);\n },\n\n // 7.3.8. regex\n 'regex': function (input) {\n var result = true;\n try {\n new RegExp(input);\n } catch (e) {\n result = false;\n }\n return result;\n },\n\n // Other definitions\n // \"style\" was removed from JSON Schema in draft-4 and is deprecated\n 'style': /[\\r\\n\\t ]*[^\\r\\n\\t ][^:]*:[\\r\\n\\t ]*[^\\r\\n\\t ;]*[\\r\\n\\t ]*;?/,\n // \"color\" was removed from JSON Schema in draft-4 and is deprecated\n 'color': /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/,\n 'phone': /^\\+(?:[0-9] ?){6,14}[0-9]$/,\n 'alpha': /^[a-zA-Z]+$/,\n 'alphanumeric': /^[a-zA-Z0-9]+$/,\n};\n\nFORMAT_REGEXPS.regexp = FORMAT_REGEXPS.regex;\nFORMAT_REGEXPS.pattern = FORMAT_REGEXPS.regex;\nFORMAT_REGEXPS.ipv4 = FORMAT_REGEXPS['ip-address'];\n\nexports.isFormat = function isFormat (input, format, validator) {\n if (typeof input === 'string' && FORMAT_REGEXPS[format] !== undefined) {\n if (FORMAT_REGEXPS[format] instanceof RegExp) {\n return FORMAT_REGEXPS[format].test(input);\n }\n if (typeof FORMAT_REGEXPS[format] === 'function') {\n return FORMAT_REGEXPS[format](input);\n }\n } else if (validator && validator.customFormats &&\n typeof validator.customFormats[format] === 'function') {\n return validator.customFormats[format](input);\n }\n return true;\n};\n\nvar makeSuffix = exports.makeSuffix = function makeSuffix (key) {\n key = key.toString();\n // This function could be capable of outputting valid a ECMAScript string, but the\n // resulting code for testing which form to use would be tens of thousands of characters long\n // That means this will use the name form for some illegal forms\n if (!key.match(/[.\\s\\[\\]]/) && !key.match(/^[\\d]/)) {\n return '.' + key;\n }\n if (key.match(/^\\d+$/)) {\n return '[' + key + ']';\n }\n return '[' + JSON.stringify(key) + ']';\n};\n\nexports.deepCompareStrict = function deepCompareStrict (a, b) {\n if (typeof a !== typeof b) {\n return false;\n }\n if (Array.isArray(a)) {\n if (!Array.isArray(b)) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n return a.every(function (v, i) {\n return deepCompareStrict(a[i], b[i]);\n });\n }\n if (typeof a === 'object') {\n if (!a || !b) {\n return a === b;\n }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n return aKeys.every(function (v) {\n return deepCompareStrict(a[v], b[v]);\n });\n }\n return a === b;\n};\n\nfunction deepMerger (target, dst, e, i) {\n if (typeof e === 'object') {\n dst[i] = deepMerge(target[i], e);\n } else {\n if (target.indexOf(e) === -1) {\n dst.push(e);\n }\n }\n}\n\nfunction copyist (src, dst, key) {\n dst[key] = src[key];\n}\n\nfunction copyistWithDeepMerge (target, src, dst, key) {\n if (typeof src[key] !== 'object' || !src[key]) {\n dst[key] = src[key];\n }\n else {\n if (!target[key]) {\n dst[key] = src[key];\n } else {\n dst[key] = deepMerge(target[key], src[key]);\n }\n }\n}\n\nfunction deepMerge (target, src) {\n var array = Array.isArray(src);\n var dst = array && [] || {};\n\n if (array) {\n target = target || [];\n dst = dst.concat(target);\n src.forEach(deepMerger.bind(null, target, dst));\n } else {\n if (target && typeof target === 'object') {\n Object.keys(target).forEach(copyist.bind(null, target, dst));\n }\n Object.keys(src).forEach(copyistWithDeepMerge.bind(null, target, src, dst));\n }\n\n return dst;\n}\n\nmodule.exports.deepMerge = deepMerge;\n\n/**\n * Validates instance against the provided schema\n * Implements URI+JSON Pointer encoding, e.g. \"%7e\"=\"~0\"=>\"~\", \"~1\"=\"%2f\"=>\"/\"\n * @param o\n * @param s The path to walk o along\n * @return any\n */\nexports.objectGetPath = function objectGetPath(o, s) {\n var parts = s.split('/').slice(1);\n var k;\n while (typeof (k=parts.shift()) == 'string') {\n var n = decodeURIComponent(k.replace(/~0/,'~').replace(/~1/g,'/'));\n if (!(n in o)) return;\n o = o[n];\n }\n return o;\n};\n\nfunction pathEncoder (v) {\n return '/'+encodeURIComponent(v).replace(/~/g,'%7E');\n}\n/**\n * Accept an Array of property names and return a JSON Pointer URI fragment\n * @param Array a\n * @return {String}\n */\nexports.encodePath = function encodePointer(a){\n // ~ must be encoded explicitly because hacks\n // the slash is encoded by encodeURIComponent\n return a.map(pathEncoder).join('');\n};\n\n\n/**\n * Calculate the number of decimal places a number uses\n * We need this to get correct results out of multipleOf and divisibleBy\n * when either figure is has decimal places, due to IEEE-754 float issues.\n * @param number\n * @returns {number}\n */\nexports.getDecimalPlaces = function getDecimalPlaces(number) {\n\n var decimalPlaces = 0;\n if (isNaN(number)) return decimalPlaces;\n\n if (typeof number !== 'number') {\n number = Number(number);\n }\n\n var parts = number.toString().split('e');\n if (parts.length === 2) {\n if (parts[1][0] !== '-') {\n return decimalPlaces;\n } else {\n decimalPlaces = Number(parts[1].slice(1));\n }\n }\n\n var decimalParts = parts[0].split('.');\n if (decimalParts.length === 2) {\n decimalPlaces += decimalParts[1].length;\n }\n\n return decimalPlaces;\n};\n\nexports.isSchema = function isSchema(val){\n return (typeof val === 'object' && val) || (typeof val === 'boolean');\n};\n\n","'use strict';\n\nvar Validator = module.exports.Validator = require('./validator');\n\nmodule.exports.ValidatorResult = require('./helpers').ValidatorResult;\nmodule.exports.ValidatorResultError = require('./helpers').ValidatorResultError;\nmodule.exports.ValidationError = require('./helpers').ValidationError;\nmodule.exports.SchemaError = require('./helpers').SchemaError;\nmodule.exports.SchemaScanResult = require('./scan').SchemaScanResult;\nmodule.exports.scan = require('./scan').scan;\n\nmodule.exports.validate = function (instance, schema, options) {\n var v = new Validator();\n return v.validate(instance, schema, options);\n};\n","\"use strict\";\n\nvar urilib = require('url');\nvar helpers = require('./helpers');\n\nmodule.exports.SchemaScanResult = SchemaScanResult;\nfunction SchemaScanResult(found, ref){\n this.id = found;\n this.ref = ref;\n}\n\n/**\n * Adds a schema with a certain urn to the Validator instance.\n * @param string uri\n * @param object schema\n * @return {Object}\n */\nmodule.exports.scan = function scan(base, schema){\n function scanSchema(baseuri, schema){\n if(!schema || typeof schema!='object') return;\n // Mark all referenced schemas so we can tell later which schemas are referred to, but never defined\n if(schema.$ref){\n var resolvedUri = urilib.resolve(baseuri, schema.$ref);\n ref[resolvedUri] = ref[resolvedUri] ? ref[resolvedUri]+1 : 0;\n return;\n }\n var id = schema.$id || schema.id;\n var ourBase = id ? urilib.resolve(baseuri, id) : baseuri;\n if (ourBase) {\n // If there's no fragment, append an empty one\n if(ourBase.indexOf('#')<0) ourBase += '#';\n if(found[ourBase]){\n if(!helpers.deepCompareStrict(found[ourBase], schema)){\n throw new Error('Schema <'+ourBase+'> already exists with different definition');\n }\n return found[ourBase];\n }\n found[ourBase] = schema;\n // strip trailing fragment\n if(ourBase[ourBase.length-1]=='#'){\n found[ourBase.substring(0, ourBase.length-1)] = schema;\n }\n }\n scanArray(ourBase+'/items', (Array.isArray(schema.items)?schema.items:[schema.items]));\n scanArray(ourBase+'/extends', (Array.isArray(schema.extends)?schema.extends:[schema.extends]));\n scanSchema(ourBase+'/additionalItems', schema.additionalItems);\n scanObject(ourBase+'/properties', schema.properties);\n scanSchema(ourBase+'/additionalProperties', schema.additionalProperties);\n scanObject(ourBase+'/definitions', schema.definitions);\n scanObject(ourBase+'/patternProperties', schema.patternProperties);\n scanObject(ourBase+'/dependencies', schema.dependencies);\n scanArray(ourBase+'/disallow', schema.disallow);\n scanArray(ourBase+'/allOf', schema.allOf);\n scanArray(ourBase+'/anyOf', schema.anyOf);\n scanArray(ourBase+'/oneOf', schema.oneOf);\n scanSchema(ourBase+'/not', schema.not);\n }\n function scanArray(baseuri, schemas){\n if(!Array.isArray(schemas)) return;\n for(var i=0; i\", schema);\n }\n var subschema = helpers.objectGetPath(ctx.schemas[document], fragment.substr(1));\n if(subschema===undefined){\n throw new SchemaError(\"no such schema \" + fragment + \" located in <\" + document + \">\", schema);\n }\n return {subschema: subschema, switchSchema: switchSchema};\n};\n\n/**\n * Tests whether the instance if of a certain type.\n * @private\n * @param instance\n * @param schema\n * @param options\n * @param ctx\n * @param type\n * @return {boolean}\n */\nValidator.prototype.testType = function validateType (instance, schema, options, ctx, type) {\n if(type===undefined){\n return;\n }else if(type===null){\n throw new SchemaError('Unexpected null in \"type\" keyword');\n }\n if (typeof this.types[type] == 'function') {\n return this.types[type].call(this, instance);\n }\n if (type && typeof type == 'object') {\n var res = this.validateSchema(instance, type, options, ctx);\n return res === undefined || !(res && res.errors.length);\n }\n // Undefined or properties not on the list are acceptable, same as not being defined\n return true;\n};\n\nvar types = Validator.prototype.types = {};\ntypes.string = function testString (instance) {\n return typeof instance == 'string';\n};\ntypes.number = function testNumber (instance) {\n // isFinite returns false for NaN, Infinity, and -Infinity\n return typeof instance == 'number' && isFinite(instance);\n};\ntypes.integer = function testInteger (instance) {\n return (typeof instance == 'number') && instance % 1 === 0;\n};\ntypes.boolean = function testBoolean (instance) {\n return typeof instance == 'boolean';\n};\ntypes.array = function testArray (instance) {\n return Array.isArray(instance);\n};\ntypes['null'] = function testNull (instance) {\n return instance === null;\n};\ntypes.date = function testDate (instance) {\n return instance instanceof Date;\n};\ntypes.any = function testAny (instance) {\n return true;\n};\ntypes.object = function testObject (instance) {\n // TODO: fix this - see #15\n return instance && (typeof instance === 'object') && !(Array.isArray(instance)) && !(instance instanceof Date);\n};\n\nmodule.exports = Validator;\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n var str = String(input).replace(/=+$/, '');\n if (str.length % 4 == 1) {\n throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = '';\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n var code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n}\n\nmodule.exports = function(str) {\n var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n\n try{\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n};\n","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n if (typeof token !== 'string') {\n throw new InvalidTokenError('Invalid token specified');\n }\n\n options = options || {};\n var pos = options.header === true ? 0 : 1;\n try {\n return JSON.parse(base64_url_decode(token.split('.')[pos]));\n } catch (e) {\n throw new InvalidTokenError('Invalid token specified: ' + e.message);\n }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\n","/**\n * Phoenix Channels JavaScript client\n *\n * ## Socket Connection\n *\n * A single connection is established to the server and\n * channels are multiplexed over the connection.\n * Connect to the server using the `Socket` class:\n *\n * ```javascript\n * let socket = new Socket(\"/socket\", {params: {userToken: \"123\"}})\n * socket.connect()\n * ```\n *\n * The `Socket` constructor takes the mount point of the socket,\n * the authentication params, as well as options that can be found in\n * the Socket docs, such as configuring the `LongPoll` transport, and\n * heartbeat.\n *\n * ## Channels\n *\n * Channels are isolated, concurrent processes on the server that\n * subscribe to topics and broker events between the client and server.\n * To join a channel, you must provide the topic, and channel params for\n * authorization. Here's an example chat room example where `\"new_msg\"`\n * events are listened for, messages are pushed to the server, and\n * the channel is joined with ok/error/timeout matches:\n *\n * ```javascript\n * let channel = socket.channel(\"room:123\", {token: roomToken})\n * channel.on(\"new_msg\", msg => console.log(\"Got message\", msg) )\n * $input.onEnter( e => {\n * channel.push(\"new_msg\", {body: e.target.val}, 10000)\n * .receive(\"ok\", (msg) => console.log(\"created message\", msg) )\n * .receive(\"error\", (reasons) => console.log(\"create failed\", reasons) )\n * .receive(\"timeout\", () => console.log(\"Networking issue...\") )\n * })\n *\n * channel.join()\n * .receive(\"ok\", ({messages}) => console.log(\"catching up\", messages) )\n * .receive(\"error\", ({reason}) => console.log(\"failed join\", reason) )\n * .receive(\"timeout\", () => console.log(\"Networking issue. Still waiting...\"))\n *```\n *\n * ## Joining\n *\n * Creating a channel with `socket.channel(topic, params)`, binds the params to\n * `channel.params`, which are sent up on `channel.join()`.\n * Subsequent rejoins will send up the modified params for\n * updating authorization params, or passing up last_message_id information.\n * Successful joins receive an \"ok\" status, while unsuccessful joins\n * receive \"error\".\n *\n * ## Duplicate Join Subscriptions\n *\n * While the client may join any number of topics on any number of channels,\n * the client may only hold a single subscription for each unique topic at any\n * given time. When attempting to create a duplicate subscription,\n * the server will close the existing channel, log a warning, and\n * spawn a new channel for the topic. The client will have their\n * `channel.onClose` callbacks fired for the existing channel, and the new\n * channel join will have its receive hooks processed as normal.\n *\n * ## Pushing Messages\n *\n * From the previous example, we can see that pushing messages to the server\n * can be done with `channel.push(eventName, payload)` and we can optionally\n * receive responses from the push. Additionally, we can use\n * `receive(\"timeout\", callback)` to abort waiting for our other `receive` hooks\n * and take action after some period of waiting. The default timeout is 10000ms.\n *\n *\n * ## Socket Hooks\n *\n * Lifecycle events of the multiplexed connection can be hooked into via\n * `socket.onError()` and `socket.onClose()` events, ie:\n *\n * ```javascript\n * socket.onError( () => console.log(\"there was an error with the connection!\") )\n * socket.onClose( () => console.log(\"the connection dropped\") )\n * ```\n *\n *\n * ## Channel Hooks\n *\n * For each joined channel, you can bind to `onError` and `onClose` events\n * to monitor the channel lifecycle, ie:\n *\n * ```javascript\n * channel.onError( () => console.log(\"there was an error!\") )\n * channel.onClose( () => console.log(\"the channel has gone away gracefully\") )\n * ```\n *\n * ### onError hooks\n *\n * `onError` hooks are invoked if the socket connection drops, or the channel\n * crashes on the server. In either case, a channel rejoin is attempted\n * automatically in an exponential backoff manner.\n *\n * ### onClose hooks\n *\n * `onClose` hooks are invoked only in two cases. 1) the channel explicitly\n * closed on the server, or 2). The client explicitly closed, by calling\n * `channel.leave()`\n *\n *\n * ## Presence\n *\n * The `Presence` object provides features for syncing presence information\n * from the server with the client and handling presences joining and leaving.\n *\n * ### Syncing state from the server\n *\n * To sync presence state from the server, first instantiate an object and\n * pass your channel in to track lifecycle events:\n *\n * ```javascript\n * let channel = socket.channel(\"some:topic\")\n * let presence = new Presence(channel)\n * ```\n *\n * Next, use the `presence.onSync` callback to react to state changes\n * from the server. For example, to render the list of users every time\n * the list changes, you could write:\n *\n * ```javascript\n * presence.onSync(() => {\n * myRenderUsersFunction(presence.list())\n * })\n * ```\n *\n * ### Listing Presences\n *\n * `presence.list` is used to return a list of presence information\n * based on the local state of metadata. By default, all presence\n * metadata is returned, but a `listBy` function can be supplied to\n * allow the client to select which metadata to use for a given presence.\n * For example, you may have a user online from different devices with\n * a metadata status of \"online\", but they have set themselves to \"away\"\n * on another device. In this case, the app may choose to use the \"away\"\n * status for what appears on the UI. The example below defines a `listBy`\n * function which prioritizes the first metadata which was registered for\n * each user. This could be the first tab they opened, or the first device\n * they came online from:\n *\n * ```javascript\n * let listBy = (id, {metas: [first, ...rest]}) => {\n * first.count = rest.length + 1 // count of this user's presences\n * first.id = id\n * return first\n * }\n * let onlineUsers = presence.list(listBy)\n * ```\n *\n * ### Handling individual presence join and leave events\n *\n * The `presence.onJoin` and `presence.onLeave` callbacks can be used to\n * react to individual presences joining and leaving the app. For example:\n *\n * ```javascript\n * let presence = new Presence(channel)\n *\n * // detect if user has joined for the 1st time or from another tab/device\n * presence.onJoin((id, current, newPres) => {\n * if(!current){\n * console.log(\"user has entered for the first time\", newPres)\n * } else {\n * console.log(\"user additional presence\", newPres)\n * }\n * })\n *\n * // detect if user has left from all tabs/devices, or is still present\n * presence.onLeave((id, current, leftPres) => {\n * if(current.metas.length === 0){\n * console.log(\"user has left from all devices\", leftPres)\n * } else {\n * console.log(\"user left from a device\", leftPres)\n * }\n * })\n * // receive presence data from server\n * presence.onSync(() => {\n * displayUsers(presence.list())\n * })\n * ```\n * @module phoenix\n */\n\nconst globalSelf = typeof self !== \"undefined\" ? self : null\nconst phxWindow = typeof window !== \"undefined\" ? window : null\nconst global = globalSelf || phxWindow || this\nconst DEFAULT_VSN = \"2.0.0\"\nconst SOCKET_STATES = {connecting: 0, open: 1, closing: 2, closed: 3}\nconst DEFAULT_TIMEOUT = 10000\nconst WS_CLOSE_NORMAL = 1000\nconst CHANNEL_STATES = {\n closed: \"closed\",\n errored: \"errored\",\n joined: \"joined\",\n joining: \"joining\",\n leaving: \"leaving\",\n}\nconst CHANNEL_EVENTS = {\n close: \"phx_close\",\n error: \"phx_error\",\n join: \"phx_join\",\n reply: \"phx_reply\",\n leave: \"phx_leave\"\n}\nconst CHANNEL_LIFECYCLE_EVENTS = [\n CHANNEL_EVENTS.close,\n CHANNEL_EVENTS.error,\n CHANNEL_EVENTS.join,\n CHANNEL_EVENTS.reply,\n CHANNEL_EVENTS.leave\n]\nconst TRANSPORTS = {\n longpoll: \"longpoll\",\n websocket: \"websocket\"\n}\n\n// wraps value in closure or returns closure\nlet closure = (value) => {\n if(typeof value === \"function\"){\n return value\n } else {\n let closure = function(){ return value }\n return closure\n }\n}\n\n/**\n * Initializes the Push\n * @param {Channel} channel - The Channel\n * @param {string} event - The event, for example `\"phx_join\"`\n * @param {Object} payload - The payload, for example `{user_id: 123}`\n * @param {number} timeout - The push timeout in milliseconds\n */\nclass Push {\n constructor(channel, event, payload, timeout){\n this.channel = channel\n this.event = event\n this.payload = payload || function(){ return {} }\n this.receivedResp = null\n this.timeout = timeout\n this.timeoutTimer = null\n this.recHooks = []\n this.sent = false\n }\n\n /**\n *\n * @param {number} timeout\n */\n resend(timeout){\n this.timeout = timeout\n this.reset()\n this.send()\n }\n\n /**\n *\n */\n send(){ if(this.hasReceived(\"timeout\")){ return }\n this.startTimeout()\n this.sent = true\n this.channel.socket.push({\n topic: this.channel.topic,\n event: this.event,\n payload: this.payload(),\n ref: this.ref,\n join_ref: this.channel.joinRef()\n })\n }\n\n /**\n *\n * @param {*} status\n * @param {*} callback\n */\n receive(status, callback){\n if(this.hasReceived(status)){\n callback(this.receivedResp.response)\n }\n\n this.recHooks.push({status, callback})\n return this\n }\n\n /**\n * @private\n */\n reset(){\n this.cancelRefEvent()\n this.ref = null\n this.refEvent = null\n this.receivedResp = null\n this.sent = false\n }\n\n /**\n * @private\n */\n matchReceive({status, response, ref}){\n this.recHooks.filter( h => h.status === status )\n .forEach( h => h.callback(response) )\n }\n\n /**\n * @private\n */\n cancelRefEvent(){ if(!this.refEvent){ return }\n this.channel.off(this.refEvent)\n }\n\n /**\n * @private\n */\n cancelTimeout(){\n clearTimeout(this.timeoutTimer)\n this.timeoutTimer = null\n }\n\n /**\n * @private\n */\n startTimeout(){ if(this.timeoutTimer){ this.cancelTimeout() }\n this.ref = this.channel.socket.makeRef()\n this.refEvent = this.channel.replyEventName(this.ref)\n\n this.channel.on(this.refEvent, payload => {\n this.cancelRefEvent()\n this.cancelTimeout()\n this.receivedResp = payload\n this.matchReceive(payload)\n })\n\n this.timeoutTimer = setTimeout(() => {\n this.trigger(\"timeout\", {})\n }, this.timeout)\n }\n\n /**\n * @private\n */\n hasReceived(status){\n return this.receivedResp && this.receivedResp.status === status\n }\n\n /**\n * @private\n */\n trigger(status, response){\n this.channel.trigger(this.refEvent, {status, response})\n }\n}\n\n/**\n *\n * @param {string} topic\n * @param {(Object|function)} params\n * @param {Socket} socket\n */\nexport class Channel {\n constructor(topic, params, socket) {\n this.state = CHANNEL_STATES.closed\n this.topic = topic\n this.params = closure(params || {})\n this.socket = socket\n this.bindings = []\n this.bindingRef = 0\n this.timeout = this.socket.timeout\n this.joinedOnce = false\n this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout)\n this.pushBuffer = []\n this.stateChangeRefs = [];\n\n this.rejoinTimer = new Timer(() => {\n if(this.socket.isConnected()){ this.rejoin() }\n }, this.socket.rejoinAfterMs)\n this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset()))\n this.stateChangeRefs.push(this.socket.onOpen(() => {\n this.rejoinTimer.reset()\n if(this.isErrored()){ this.rejoin() }\n })\n )\n this.joinPush.receive(\"ok\", () => {\n this.state = CHANNEL_STATES.joined\n this.rejoinTimer.reset()\n this.pushBuffer.forEach( pushEvent => pushEvent.send() )\n this.pushBuffer = []\n })\n this.joinPush.receive(\"error\", () => {\n this.state = CHANNEL_STATES.errored\n if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n })\n this.onClose(() => {\n this.rejoinTimer.reset()\n if(this.socket.hasLogger()) this.socket.log(\"channel\", `close ${this.topic} ${this.joinRef()}`)\n this.state = CHANNEL_STATES.closed\n this.socket.remove(this)\n })\n this.onError(reason => {\n if(this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason)\n if(this.isJoining()){ this.joinPush.reset() }\n this.state = CHANNEL_STATES.errored\n if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n })\n this.joinPush.receive(\"timeout\", () => {\n if(this.socket.hasLogger()) this.socket.log(\"channel\", `timeout ${this.topic} (${this.joinRef()})`, this.joinPush.timeout)\n let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), this.timeout)\n leavePush.send()\n this.state = CHANNEL_STATES.errored\n this.joinPush.reset()\n if(this.socket.isConnected()){ this.rejoinTimer.scheduleTimeout() }\n })\n this.on(CHANNEL_EVENTS.reply, (payload, ref) => {\n this.trigger(this.replyEventName(ref), payload)\n })\n }\n\n /**\n * Join the channel\n * @param {integer} timeout\n * @returns {Push}\n */\n join(timeout = this.timeout){\n if(this.joinedOnce){\n throw new Error(`tried to join multiple times. 'join' can only be called a single time per channel instance`)\n } else {\n this.timeout = timeout\n this.joinedOnce = true\n this.rejoin()\n return this.joinPush\n }\n }\n\n /**\n * Hook into channel close\n * @param {Function} callback\n */\n onClose(callback){\n this.on(CHANNEL_EVENTS.close, callback)\n }\n\n /**\n * Hook into channel errors\n * @param {Function} callback\n */\n onError(callback){\n return this.on(CHANNEL_EVENTS.error, reason => callback(reason))\n }\n\n /**\n * Subscribes on channel events\n *\n * Subscription returns a ref counter, which can be used later to\n * unsubscribe the exact event listener\n *\n * @example\n * const ref1 = channel.on(\"event\", do_stuff)\n * const ref2 = channel.on(\"event\", do_other_stuff)\n * channel.off(\"event\", ref1)\n * // Since unsubscription, do_stuff won't fire,\n * // while do_other_stuff will keep firing on the \"event\"\n *\n * @param {string} event\n * @param {Function} callback\n * @returns {integer} ref\n */\n on(event, callback){\n let ref = this.bindingRef++\n this.bindings.push({event, ref, callback})\n return ref\n }\n\n /**\n * Unsubscribes off of channel events\n *\n * Use the ref returned from a channel.on() to unsubscribe one\n * handler, or pass nothing for the ref to unsubscribe all\n * handlers for the given event.\n *\n * @example\n * // Unsubscribe the do_stuff handler\n * const ref1 = channel.on(\"event\", do_stuff)\n * channel.off(\"event\", ref1)\n *\n * // Unsubscribe all handlers from event\n * channel.off(\"event\")\n *\n * @param {string} event\n * @param {integer} ref\n */\n off(event, ref){\n this.bindings = this.bindings.filter((bind) => {\n return !(bind.event === event && (typeof ref === \"undefined\" || ref === bind.ref))\n })\n }\n\n /**\n * @private\n */\n canPush(){ return this.socket.isConnected() && this.isJoined() }\n\n /**\n * Sends a message `event` to phoenix with the payload `payload`.\n * Phoenix receives this in the `handle_in(event, payload, socket)`\n * function. if phoenix replies or it times out (default 10000ms),\n * then optionally the reply can be received.\n *\n * @example\n * channel.push(\"event\")\n * .receive(\"ok\", payload => console.log(\"phoenix replied:\", payload))\n * .receive(\"error\", err => console.log(\"phoenix errored\", err))\n * .receive(\"timeout\", () => console.log(\"timed out pushing\"))\n * @param {string} event\n * @param {Object} payload\n * @param {number} [timeout]\n * @returns {Push}\n */\n push(event, payload, timeout = this.timeout){\n if(!this.joinedOnce){\n throw new Error(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`)\n }\n let pushEvent = new Push(this, event, function(){ return payload }, timeout)\n if(this.canPush()){\n pushEvent.send()\n } else {\n pushEvent.startTimeout()\n this.pushBuffer.push(pushEvent)\n }\n\n return pushEvent\n }\n\n /**\n * More memory/CPU efficient push, but does not guarantee delivery if connection is lost.\n * @param {string} event\n * @param {Object} payload\n */\n pushUnreliable(event, payload) {\n if(!this.joinedOnce){\n throw(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`)\n }\n\n this.socket.push({\n topic: this.topic,\n event, payload,\n ref: null,\n join_ref: this.joinRef()\n }, false);\n }\n\n /** Leaves the channel\n *\n * Unsubscribes from server events, and\n * instructs channel to terminate on server\n *\n * Triggers onClose() hooks\n *\n * To receive leave acknowledgements, use the `receive`\n * hook to bind to the server ack, ie:\n *\n * @example\n * channel.leave().receive(\"ok\", () => alert(\"left!\") )\n *\n * @param {integer} timeout\n * @returns {Push}\n */\n leave(timeout = this.timeout){\n this.rejoinTimer.reset()\n this.joinPush.cancelTimeout()\n\n this.state = CHANNEL_STATES.leaving\n let onClose = () => {\n if(this.socket.hasLogger()) this.socket.log(\"channel\", `leave ${this.topic}`)\n this.trigger(CHANNEL_EVENTS.close, \"leave\")\n }\n let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), timeout)\n leavePush.receive(\"ok\", () => onClose() )\n .receive(\"timeout\", () => onClose() )\n leavePush.send()\n if(!this.canPush()){ leavePush.trigger(\"ok\", {}) }\n\n return leavePush\n }\n\n /**\n * Overridable message hook\n *\n * Receives all events for specialized message handling\n * before dispatching to the channel callbacks.\n *\n * Must return the payload, modified or unmodified\n * @param {string} event\n * @param {Object} payload\n * @param {integer} ref\n * @returns {Object}\n */\n onMessage(event, payload, ref){ return payload }\n\n /**\n * @private\n */\n isLifecycleEvent(event) { return CHANNEL_LIFECYCLE_EVENTS.indexOf(event) >= 0 }\n\n /**\n * @private\n */\n isMember(topic, event, payload, joinRef){\n if(this.topic !== topic){ return false }\n\n if(joinRef && joinRef !== this.joinRef() && this.isLifecycleEvent(event)){\n if (this.socket.hasLogger()) this.socket.log(\"channel\", \"dropping outdated message\", {topic, event, payload, joinRef})\n return false\n } else {\n return true\n }\n }\n\n /**\n * @private\n */\n joinRef(){ return this.joinPush.ref }\n\n /**\n * @private\n */\n rejoin(timeout = this.timeout){ if(this.isLeaving()){ return }\n this.socket.leaveOpenTopic(this.topic)\n this.state = CHANNEL_STATES.joining\n this.joinPush.resend(timeout)\n }\n\n /**\n * @private\n */\n trigger(event, payload, ref, joinRef){\n let handledPayload = this.onMessage(event, payload, ref, joinRef)\n if(payload && !handledPayload){ throw new Error(\"channel onMessage callbacks must return the payload, modified or unmodified\") }\n\n let eventBindings = this.bindings.filter(bind => bind.event === event)\n\n for (let i = 0; i < eventBindings.length; i++) {\n let bind = eventBindings[i]\n bind.callback(handledPayload, ref, joinRef || this.joinRef())\n }\n }\n\n /**\n * @private\n */\n replyEventName(ref){ return `chan_reply_${ref}` }\n\n /**\n * @private\n */\n isClosed() { return this.state === CHANNEL_STATES.closed }\n\n /**\n * @private\n */\n isErrored(){ return this.state === CHANNEL_STATES.errored }\n\n /**\n * @private\n */\n isJoined() { return this.state === CHANNEL_STATES.joined }\n\n /**\n * @private\n */\n isJoining(){ return this.state === CHANNEL_STATES.joining }\n\n /**\n * @private\n */\n isLeaving(){ return this.state === CHANNEL_STATES.leaving }\n}\n\n/* The default serializer for encoding and decoding messages */\nexport let Serializer = {\n encode(msg, callback){\n let payload = [\n msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload\n ]\n return callback(JSON.stringify(payload))\n },\n\n decode(rawPayload, callback){\n let [join_ref, ref, topic, event, payload] = JSON.parse(rawPayload)\n\n return callback({join_ref, ref, topic, event, payload})\n }\n}\n\n\n/** Initializes the Socket\n *\n *\n * For IE8 support use an ES5-shim (https://github.com/es-shims/es5-shim)\n *\n * @param {string} endPoint - The string WebSocket endpoint, ie, `\"ws://example.com/socket\"`,\n * `\"wss://example.com\"`\n * `\"/socket\"` (inherited host & protocol)\n * @param {Object} [opts] - Optional configuration\n * @param {string} [opts.transport] - The Websocket Transport, for example WebSocket or Phoenix.LongPoll.\n *\n * Defaults to WebSocket with automatic LongPoll fallback.\n * @param {Function} [opts.encode] - The function to encode outgoing messages.\n *\n * Defaults to JSON encoder.\n *\n * @param {Function} [opts.decode] - The function to decode incoming messages.\n *\n * Defaults to JSON:\n *\n * ```javascript\n * (payload, callback) => callback(JSON.parse(payload))\n * ```\n *\n * @param {number} [opts.timeout] - The default timeout in milliseconds to trigger push timeouts.\n *\n * Defaults `DEFAULT_TIMEOUT`\n * @param {number} [opts.heartbeatIntervalMs] - The millisec interval to send a heartbeat message\n * @param {number} [opts.reconnectAfterMs] - The optional function that returns the millsec\n * socket reconnect interval.\n *\n * Defaults to stepped backoff of:\n *\n * ```javascript\n * function(tries){\n * return [10, 50, 100, 150, 200, 250, 500, 1000, 2000][tries - 1] || 5000\n * }\n * ````\n *\n * @param {number} [opts.rejoinAfterMs] - The optional function that returns the millsec\n * rejoin interval for individual channels.\n *\n * ```javascript\n * function(tries){\n * return [1000, 2000, 5000][tries - 1] || 10000\n * }\n * ````\n *\n * @param {Function} [opts.logger] - The optional function for specialized logging, ie:\n *\n * ```javascript\n * function(kind, msg, data) {\n * console.log(`${kind}: ${msg}`, data)\n * }\n * ```\n *\n * @param {number} [opts.longpollerTimeout] - The maximum timeout of a long poll AJAX request.\n *\n * Defaults to 20s (double the server long poll timer).\n *\n * @param {{Object|function)} [opts.params] - The optional params to pass when connecting\n * @param {string} [opts.binaryType] - The binary type to use for binary WebSocket frames.\n *\n * Defaults to \"arraybuffer\"\n *\n * @param {vsn} [opts.vsn] - The serializer's protocol version to send on connect.\n *\n * Defaults to DEFAULT_VSN.\n*/\nexport class Socket {\n constructor(endPoint, opts = {}){\n this.stateChangeCallbacks = {open: [], close: [], error: [], message: []}\n this.channels = []\n this.sendBuffer = []\n this.ref = 0\n this.timeout = opts.timeout || DEFAULT_TIMEOUT\n this.transport = opts.transport || global.WebSocket || LongPoll\n this.defaultEncoder = Serializer.encode\n this.defaultDecoder = Serializer.decode\n this.closeWasClean = false\n this.unloaded = false\n this.binaryType = opts.binaryType || \"arraybuffer\"\n if(this.transport !== LongPoll){\n this.encode = opts.encode || this.defaultEncoder\n this.decode = opts.decode || this.defaultDecoder\n } else {\n this.encode = this.defaultEncoder\n this.decode = this.defaultDecoder\n }\n if(phxWindow && phxWindow.addEventListener){\n phxWindow.addEventListener(\"unload\", e => {\n if(this.conn){\n this.unloaded = true\n this.abnormalClose(\"unloaded\")\n }\n })\n }\n this.heartbeatIntervalMs = opts.heartbeatIntervalMs || 30000\n this.rejoinAfterMs = (tries) => {\n if(opts.rejoinAfterMs){\n return opts.rejoinAfterMs(tries)\n } else {\n return [1000, 2000, 5000][tries - 1] || 10000\n }\n }\n this.reconnectAfterMs = (tries) => {\n if(this.unloaded){ return 100 }\n if(opts.reconnectAfterMs){\n return opts.reconnectAfterMs(tries)\n } else {\n return [10, 50, 100, 150, 200, 250, 500, 1000, 2000][tries - 1] || 5000\n }\n }\n this.logger = opts.logger || null\n this.longpollerTimeout = opts.longpollerTimeout || 20000\n this.params = closure(opts.params || {})\n this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`\n this.vsn = opts.vsn || DEFAULT_VSN\n this.heartbeatTimer = null\n this.pendingHeartbeatRef = null\n this.reconnectTimer = new Timer(() => {\n this.teardown(() => this.connect())\n }, this.reconnectAfterMs)\n }\n\n /**\n * Returns the socket protocol\n *\n * @returns {string}\n */\n protocol(){ return location.protocol.match(/^https/) ? \"wss\" : \"ws\" }\n\n /**\n * The fully qualifed socket url\n *\n * @returns {string}\n */\n endPointURL(){\n let uri = Ajax.appendParams(\n Ajax.appendParams(this.endPoint, this.params()), {vsn: this.vsn})\n if(uri.charAt(0) !== \"/\"){ return uri }\n if(uri.charAt(1) === \"/\"){ return `${this.protocol()}:${uri}` }\n\n return `${this.protocol()}://${location.host}${uri}`\n }\n\n /**\n * Disconnects the socket\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes for valid status codes.\n *\n * @param {Function} callback - Optional callback which is called after socket is disconnected.\n * @param {integer} code - A status code for disconnection (Optional).\n * @param {string} reason - A textual description of the reason to disconnect. (Optional)\n */\n disconnect(callback, code, reason){\n this.closeWasClean = true\n this.reconnectTimer.reset()\n this.teardown(callback, code, reason)\n }\n\n /**\n *\n * @param {Object} params - The params to send when connecting, for example `{user_id: userToken}`\n *\n * Passing params to connect is deprecated; pass them in the Socket constructor instead:\n * `new Socket(\"/socket\", {params: {user_id: userToken}})`.\n */\n connect(params){\n if(params){\n console && console.log(\"passing params to connect is deprecated. Instead pass :params to the Socket constructor\")\n this.params = closure(params)\n }\n if(this.conn){ return }\n this.closeWasClean = false\n this.conn = new this.transport(this.endPointURL())\n this.conn.binaryType = this.binaryType\n this.conn.timeout = this.longpollerTimeout\n this.conn.onopen = () => this.onConnOpen()\n this.conn.onerror = error => this.onConnError(error)\n this.conn.onmessage = event => this.onConnMessage(event)\n this.conn.onclose = event => this.onConnClose(event)\n }\n\n /**\n * Logs the message. Override `this.logger` for specialized logging. noops by default\n * @param {string} kind\n * @param {string} msg\n * @param {Object} data\n */\n log(kind, msg, data){ this.logger(kind, msg, data) }\n\n /**\n * Returns true if a logger has been set on this socket.\n */\n hasLogger(){ return this.logger !== null }\n\n /**\n * Registers callbacks for connection open events\n *\n * @example socket.onOpen(function(){ console.info(\"the socket was opened\") })\n *\n * @param {Function} callback\n */\n onOpen(callback){\n let ref = this.makeRef()\n this.stateChangeCallbacks.open.push([ref, callback])\n return ref\n }\n\n /**\n * Registers callbacks for connection close events\n * @param {Function} callback\n */\n onClose(callback){\n let ref = this.makeRef()\n this.stateChangeCallbacks.close.push([ref, callback])\n return ref\n }\n\n /**\n * Registers callbacks for connection error events\n *\n * @example socket.onError(function(error){ alert(\"An error occurred\") })\n *\n * @param {Function} callback\n */\n onError(callback){\n let ref = this.makeRef()\n this.stateChangeCallbacks.error.push([ref, callback])\n return ref\n }\n\n /**\n * Registers callbacks for connection message events\n * @param {Function} callback\n */\n onMessage(callback){\n let ref = this.makeRef()\n this.stateChangeCallbacks.message.push([ref, callback])\n return ref\n }\n\n /**\n * @private\n */\n onConnOpen(){\n if(this.hasLogger()) this.log(\"transport\", `connected to ${this.endPointURL()}`)\n this.unloaded = false\n this.closeWasClean = false\n this.flushSendBuffer()\n this.reconnectTimer.reset()\n this.resetHeartbeat()\n this.stateChangeCallbacks.open.forEach(([, callback]) => callback() )\n }\n\n /**\n * @private\n */\n\n resetHeartbeat(){ if(this.conn && this.conn.skipHeartbeat){ return }\n this.pendingHeartbeatRef = null\n clearInterval(this.heartbeatTimer)\n this.heartbeatTimer = setInterval(() => this.sendHeartbeat(), this.heartbeatIntervalMs)\n }\n\n teardown(callback, code, reason){\n if (!this.conn) {\n return callback && callback()\n }\n\n this.waitForBufferDone(() => {\n if (this.conn) {\n if(code){ this.conn.close(code, reason || \"\") } else { this.conn.close() }\n }\n\n this.waitForSocketClosed(() => {\n if (this.conn) {\n this.conn.onclose = function(){} // noop\n this.conn = null\n }\n\n callback && callback()\n })\n })\n }\n\n waitForBufferDone(callback, tries = 1) {\n if (tries === 5 || !this.conn || !this.conn.bufferedAmount) {\n callback()\n return\n }\n\n setTimeout(() => {\n this.waitForBufferDone(callback, tries + 1)\n }, 150 * tries)\n }\n\n waitForSocketClosed(callback, tries = 1) {\n if (tries === 5 || !this.conn || this.conn.readyState === SOCKET_STATES.closed) {\n callback()\n return\n }\n\n setTimeout(() => {\n this.waitForSocketClosed(callback, tries + 1)\n }, 150 * tries)\n }\n\n onConnClose(event){\n if (this.hasLogger()) this.log(\"transport\", \"close\", event)\n this.triggerChanError()\n clearInterval(this.heartbeatTimer)\n if(!this.closeWasClean){\n this.reconnectTimer.scheduleTimeout()\n }\n this.stateChangeCallbacks.close.forEach(([, callback]) => callback(event) )\n }\n\n /**\n * @private\n */\n onConnError(error){\n if (this.hasLogger()) this.log(\"transport\", error)\n this.triggerChanError()\n this.stateChangeCallbacks.error.forEach(([, callback]) => callback(error) )\n }\n\n /**\n * @private\n */\n triggerChanError(){\n this.channels.forEach( channel => {\n if(!(channel.isErrored() || channel.isLeaving() || channel.isClosed())){\n channel.trigger(CHANNEL_EVENTS.error)\n }\n })\n }\n\n /**\n * @returns {string}\n */\n connectionState(){\n switch(this.conn && this.conn.readyState){\n case SOCKET_STATES.connecting: return \"connecting\"\n case SOCKET_STATES.open: return \"open\"\n case SOCKET_STATES.closing: return \"closing\"\n default: return \"closed\"\n }\n }\n\n /**\n * @returns {boolean}\n */\n isConnected(){ return this.connectionState() === \"open\" }\n\n /**\n * @private\n *\n * @param {Channel}\n */\n remove(channel){\n this.off(channel.stateChangeRefs)\n this.channels = this.channels.filter(c => c.joinRef() !== channel.joinRef())\n }\n\n /**\n * Removes `onOpen`, `onClose`, `onError,` and `onMessage` registrations.\n *\n * @param {refs} - list of refs returned by calls to\n * `onOpen`, `onClose`, `onError,` and `onMessage`\n */\n off(refs) {\n for(let key in this.stateChangeCallbacks){\n this.stateChangeCallbacks[key] = this.stateChangeCallbacks[key].filter(([ref]) => {\n return refs.indexOf(ref) === -1\n })\n }\n }\n\n /**\n * Initiates a new channel for the given topic\n *\n * @param {string} topic\n * @param {Object} chanParams - Parameters for the channel\n * @returns {Channel}\n */\n channel(topic, chanParams = {}){\n let chan = new Channel(topic, chanParams, this)\n this.channels.push(chan)\n return chan\n }\n\n /**\n * @param {Object} data\n */\n push(data, reliable = true){\n if (this.hasLogger()) {\n let {topic, event, payload, ref, join_ref} = data\n this.log(\"push\", `${topic} ${event} (${join_ref}, ${ref})`, payload)\n }\n\n if(this.isConnected()){\n this.encode(data, result => this.conn.send(result))\n } else if (reliable) {\n this.sendBuffer.push(() => this.encode(data, result => this.conn.send(result)))\n }\n }\n\n /**\n * Return the next message ref, accounting for overflows\n * @returns {string}\n */\n makeRef(){\n let newRef = this.ref + 1\n if(newRef === this.ref){ this.ref = 0 } else { this.ref = newRef }\n\n return this.ref.toString()\n }\n\n sendHeartbeat(){\n if(!this.isConnected()){ return }\n if(this.pendingHeartbeatRef){\n this.pendingHeartbeatRef = null\n if (this.hasLogger()) this.log(\"transport\", \"heartbeat timeout. Attempting to re-establish connection\")\n this.abnormalClose(\"heartbeat timeout\")\n return\n }\n this.pendingHeartbeatRef = this.makeRef()\n this.push({topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref: this.pendingHeartbeatRef})\n }\n\n abnormalClose(reason){\n this.closeWasClean = false\n this.conn.close(WS_CLOSE_NORMAL, reason)\n }\n\n flushSendBuffer(){\n if(this.isConnected() && this.sendBuffer.length > 0){\n this.sendBuffer.forEach( callback => callback() )\n this.sendBuffer = []\n }\n }\n\n onConnMessage(rawMessage){\n this.decode(rawMessage.data, msg => {\n let {topic, event, payload, ref, join_ref} = msg\n if(ref && ref === this.pendingHeartbeatRef){ this.pendingHeartbeatRef = null }\n\n if (this.hasLogger()) this.log(\"receive\", `${payload.status || \"\"} ${topic} ${event} ${ref && \"(\" + ref + \")\" || \"\"}`, payload)\n\n for (let i = 0; i < this.channels.length; i++) {\n const channel = this.channels[i]\n if(!channel.isMember(topic, event, payload, join_ref)){ continue }\n channel.trigger(event, payload, ref, join_ref)\n }\n\n for (let i = 0; i < this.stateChangeCallbacks.message.length; i++) {\n let [, callback] = this.stateChangeCallbacks.message[i]\n callback(msg)\n }\n })\n }\n\n leaveOpenTopic(topic){\n let dupChannel = this.channels.find(c => c.topic === topic && (c.isJoined() || c.isJoining()))\n if(dupChannel){\n if(this.hasLogger()) this.log(\"transport\", `leaving duplicate topic \"${topic}\"`)\n dupChannel.leave()\n }\n }\n}\n\n\nexport class LongPoll {\n\n constructor(endPoint){\n this.endPoint = null\n this.token = null\n this.skipHeartbeat = true\n this.onopen = function(){} // noop\n this.onerror = function(){} // noop\n this.onmessage = function(){} // noop\n this.onclose = function(){} // noop\n this.pollEndpoint = this.normalizeEndpoint(endPoint)\n this.readyState = SOCKET_STATES.connecting\n\n this.poll()\n }\n\n normalizeEndpoint(endPoint){\n return(endPoint\n .replace(\"ws://\", \"http://\")\n .replace(\"wss://\", \"https://\")\n .replace(new RegExp(\"(.*)\\/\" + TRANSPORTS.websocket), \"$1/\" + TRANSPORTS.longpoll))\n }\n\n endpointURL(){\n return Ajax.appendParams(this.pollEndpoint, {token: this.token})\n }\n\n closeAndRetry(){\n this.close()\n this.readyState = SOCKET_STATES.connecting\n }\n\n ontimeout(){\n this.onerror(\"timeout\")\n this.closeAndRetry()\n }\n\n poll(){\n if(!(this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting)){ return }\n\n Ajax.request(\"GET\", this.endpointURL(), \"application/json\", null, this.timeout, this.ontimeout.bind(this), (resp) => {\n if(resp){\n var {status, token, messages} = resp\n this.token = token\n } else{\n var status = 0\n }\n\n switch(status){\n case 200:\n messages.forEach(msg => this.onmessage({data: msg}))\n this.poll()\n break\n case 204:\n this.poll()\n break\n case 410:\n this.readyState = SOCKET_STATES.open\n this.onopen()\n this.poll()\n break\n case 403:\n this.onerror()\n this.close()\n break\n case 0:\n case 500:\n this.onerror()\n this.closeAndRetry()\n break\n default: throw new Error(`unhandled poll status ${status}`)\n }\n })\n }\n\n send(body){\n Ajax.request(\"POST\", this.endpointURL(), \"application/json\", body, this.timeout, this.onerror.bind(this, \"timeout\"), (resp) => {\n if(!resp || resp.status !== 200){\n this.onerror(resp && resp.status)\n this.closeAndRetry()\n }\n })\n }\n\n close(code, reason){\n this.readyState = SOCKET_STATES.closed\n this.onclose()\n }\n}\n\nexport class Ajax {\n\n static request(method, endPoint, accept, body, timeout, ontimeout, callback){\n if(global.XDomainRequest){\n let req = new XDomainRequest() // IE8, IE9\n this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback)\n } else {\n let req = new global.XMLHttpRequest(); // IE7+, Firefox, Chrome, Opera, Safari\n this.xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback)\n }\n }\n\n static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback){\n req.timeout = timeout\n req.open(method, endPoint)\n req.onload = () => {\n let response = this.parseJSON(req.responseText)\n callback && callback(response)\n }\n if(ontimeout){ req.ontimeout = ontimeout }\n\n // Work around bug in IE9 that requires an attached onprogress handler\n req.onprogress = () => {}\n\n req.send(body)\n }\n\n static xhrRequest(req, method, endPoint, accept, body, timeout, ontimeout, callback){\n req.open(method, endPoint, true)\n req.timeout = timeout\n req.setRequestHeader(\"Content-Type\", accept)\n req.onerror = () => { callback && callback(null) }\n req.onreadystatechange = () => {\n if(req.readyState === this.states.complete && callback){\n let response = this.parseJSON(req.responseText)\n callback(response)\n }\n }\n if(ontimeout){ req.ontimeout = ontimeout }\n\n req.send(body)\n }\n\n static parseJSON(resp){\n if(!resp || resp === \"\"){ return null }\n\n try {\n return JSON.parse(resp)\n } catch(e) {\n console && console.log(\"failed to parse JSON response\", resp)\n return null\n }\n }\n\n static serialize(obj, parentKey){\n let queryStr = []\n for(var key in obj){ if(!obj.hasOwnProperty(key)){ continue }\n let paramKey = parentKey ? `${parentKey}[${key}]` : key\n let paramVal = obj[key]\n if(typeof paramVal === \"object\"){\n queryStr.push(this.serialize(paramVal, paramKey))\n } else {\n queryStr.push(encodeURIComponent(paramKey) + \"=\" + encodeURIComponent(paramVal))\n }\n }\n return queryStr.join(\"&\")\n }\n\n static appendParams(url, params){\n if(Object.keys(params).length === 0){ return url }\n\n let prefix = url.match(/\\?/) ? \"&\" : \"?\"\n return `${url}${prefix}${this.serialize(params)}`\n }\n}\n\nAjax.states = {complete: 4}\n\n/**\n * Initializes the Presence\n * @param {Channel} channel - The Channel\n * @param {Object} opts - The options,\n * for example `{events: {state: \"state\", diff: \"diff\"}}`\n */\nexport class Presence {\n\n constructor(channel, opts = {}){\n let events = opts.events || {state: \"presence_state\", diff: \"presence_diff\"}\n this.state = {}\n this.pendingDiffs = []\n this.channel = channel\n this.joinRef = null\n this.caller = {\n onJoin: function(){},\n onLeave: function(){},\n onSync: function(){}\n }\n\n this.channel.on(events.state, newState => {\n let {onJoin, onLeave, onSync} = this.caller\n\n this.joinRef = this.channel.joinRef()\n this.state = Presence.syncState(this.state, newState, onJoin, onLeave)\n\n this.pendingDiffs.forEach(diff => {\n this.state = Presence.syncDiff(this.state, diff, onJoin, onLeave)\n })\n this.pendingDiffs = []\n onSync()\n })\n\n this.channel.on(events.diff, diff => {\n let {onJoin, onLeave, onSync} = this.caller\n\n if(this.inPendingSyncState()){\n this.pendingDiffs.push(diff)\n } else {\n this.state = Presence.syncDiff(this.state, diff, onJoin, onLeave)\n onSync()\n }\n })\n }\n\n onJoin(callback){ this.caller.onJoin = callback }\n\n onLeave(callback){ this.caller.onLeave = callback }\n\n onSync(callback){ this.caller.onSync = callback }\n\n list(by){ return Presence.list(this.state, by) }\n\n inPendingSyncState(){\n return !this.joinRef || (this.joinRef !== this.channel.joinRef())\n }\n\n // lower-level public static API\n\n /**\n * Used to sync the list of presences on the server\n * with the client's state. An optional `onJoin` and `onLeave` callback can\n * be provided to react to changes in the client's local presences across\n * disconnects and reconnects with the server.\n *\n * @returns {Presence}\n */\n static syncState(currentState, newState, onJoin, onLeave){\n let state = this.clone(currentState)\n let joins = {}\n let leaves = {}\n\n this.map(state, (key, presence) => {\n if(!newState[key]){\n leaves[key] = presence\n }\n })\n this.map(newState, (key, newPresence) => {\n let currentPresence = state[key]\n if(currentPresence){\n let newRefs = newPresence.metas.map(m => m.phx_ref)\n let curRefs = currentPresence.metas.map(m => m.phx_ref)\n let joinedMetas = newPresence.metas.filter(m => curRefs.indexOf(m.phx_ref) < 0)\n let leftMetas = currentPresence.metas.filter(m => newRefs.indexOf(m.phx_ref) < 0)\n if(joinedMetas.length > 0){\n joins[key] = newPresence\n joins[key].metas = joinedMetas\n }\n if(leftMetas.length > 0){\n leaves[key] = this.clone(currentPresence)\n leaves[key].metas = leftMetas\n }\n } else {\n joins[key] = newPresence\n }\n })\n return this.syncDiff(state, {joins: joins, leaves: leaves}, onJoin, onLeave)\n }\n\n /**\n *\n * Used to sync a diff of presence join and leave\n * events from the server, as they happen. Like `syncState`, `syncDiff`\n * accepts optional `onJoin` and `onLeave` callbacks to react to a user\n * joining or leaving from a device.\n *\n * @returns {Presence}\n */\n static syncDiff(currentState, {joins, leaves}, onJoin, onLeave){\n let state = this.clone(currentState)\n if(!onJoin){ onJoin = function(){} }\n if(!onLeave){ onLeave = function(){} }\n\n this.map(joins, (key, newPresence) => {\n let currentPresence = state[key]\n state[key] = newPresence\n if(currentPresence){\n let joinedRefs = state[key].metas.map(m => m.phx_ref)\n let curMetas = currentPresence.metas.filter(m => joinedRefs.indexOf(m.phx_ref) < 0)\n state[key].metas.unshift(...curMetas)\n }\n onJoin(key, currentPresence, newPresence)\n })\n this.map(leaves, (key, leftPresence) => {\n let currentPresence = state[key]\n if(!currentPresence){ return }\n let refsToRemove = leftPresence.metas.map(m => m.phx_ref)\n currentPresence.metas = currentPresence.metas.filter(p => {\n return refsToRemove.indexOf(p.phx_ref) < 0\n })\n onLeave(key, currentPresence, leftPresence)\n if(currentPresence.metas.length === 0){\n delete state[key]\n }\n })\n return state\n }\n\n /**\n * Returns the array of presences, with selected metadata.\n *\n * @param {Object} presences\n * @param {Function} chooser\n *\n * @returns {Presence}\n */\n static list(presences, chooser){\n if(!chooser){ chooser = function(key, pres){ return pres } }\n\n return this.map(presences, (key, presence) => {\n return chooser(key, presence)\n })\n }\n\n // private\n\n static map(obj, func){\n return Object.getOwnPropertyNames(obj).map(key => func(key, obj[key]))\n }\n\n static clone(obj){ return JSON.parse(JSON.stringify(obj)) }\n}\n\n\n/**\n *\n * Creates a timer that accepts a `timerCalc` function to perform\n * calculated timeout retries, such as exponential backoff.\n *\n * @example\n * let reconnectTimer = new Timer(() => this.connect(), function(tries){\n * return [1000, 5000, 10000][tries - 1] || 10000\n * })\n * reconnectTimer.scheduleTimeout() // fires after 1000\n * reconnectTimer.scheduleTimeout() // fires after 5000\n * reconnectTimer.reset()\n * reconnectTimer.scheduleTimeout() // fires after 1000\n *\n * @param {Function} callback\n * @param {Function} timerCalc\n */\nclass Timer {\n constructor(callback, timerCalc){\n this.callback = callback\n this.timerCalc = timerCalc\n this.timer = null\n this.tries = 0\n }\n\n reset(){\n this.tries = 0\n clearTimeout(this.timer)\n }\n\n /**\n * Cancels any previous scheduleTimeout and schedules callback\n */\n scheduleTimeout(){\n clearTimeout(this.timer)\n\n this.timer = setTimeout(() => {\n this.tries = this.tries + 1\n this.callback()\n }, this.timerCalc(this.tries + 1))\n }\n}\n"],"names":["Object","defineProperty","exports","value","privateData","WeakMap","wrappers","pd","event","retv","get","console","assert","Event","eventTarget","set","this","eventPhase","currentTarget","canceled","stopped","passiveListener","timeStamp","Date","now","enumerable","keys","i","length","key","defineRedirectDescriptor","configurable","defineCallDescriptor","apply","arguments","getWrapper","proto","prototype","wrapper","BaseEvent","CustomEvent","call","create","constructor","writable","isFunc","getOwnPropertyDescriptor","defineWrapper","getPrototypeOf","isStopped","setPassiveListener","type","target","composedPath","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","stopPropagation","data","stopImmediatePropagation","bubbles","Boolean","cancelable","preventDefault","warn","defaultPrevented","composed","window","setPrototypeOf","listenersMap","ATTRIBUTE","isObject","x","getListeners","listeners","TypeError","defineEventAttribute","eventTargetPrototype","eventName","node","listenerType","listener","next","prev","delete","newNode","passive","once","defineEventAttributeDescriptor","defineCustomEventTarget","eventNames","CustomEventTarget","EventTarget","Array","isArray","types","Map","addEventListener","options","optionsIsObj","capture","undefined","removeEventListener","dispatchEvent","wrappedEvent","wrapEvent","err","error","handleEvent","setEventPhase","setCurrentTarget","module","factory","extend","result","attributes","decode","s","replace","decodeURIComponent","init","converter","api","document","path","defaults","expires","toUTCString","JSON","stringify","test","e","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","split","cookie","json","jar","cookies","parts","slice","join","charAt","name","read","parse","getJSON","remove","withConverter","helpers","ValidatorResult","SchemaError","attribute","validators","testSchemaNoThrow","instance","ctx","callback","schema","throwError","throwAll","res","validateSchema","valid","Function","getEnumerableProperty","object","hasOwnProperty","propertyIsEnumerable","testAdditionalProperty","property","properties","additionalProperties","addError","argument","message","preValidateProperty","makeChild","importErrors","some","testType","bind","list","map","v","id","$id","anyOf","inner","title","nestedErrors","allOf","self","forEach","msg","errors","oneOf","count","filter","if","isSchema","Error","ifValid","then","else","propertyNames","subschema","prop","patternProperties","pattern","regexp","RegExp","_e","minProperties","maxProperties","items","array","every","additionalItems","contains","minimum","number","exclusiveMinimum","maximum","exclusiveMaximum","validateMultipleOfOrDivisbleBy","validationType","errorMessage","validationArgument","instanceDecimals","getDecimalPlaces","divisorDecimals","maxDecimals","Math","max","multiplier","pow","round","testArrays","a","j","len","deepCompareStrict","multipleOf","divisibleBy","required","n","string","match","toString","format","disableFormat","isFormat","minLength","hsp","maxLength","minItems","maxItems","uniqueItems","dependencies","dep","childContext","propertyPath","not","disallow","notTypes","schemaId","uri","ValidationError","reduce","sum","item","makeSuffix","stack","throwFirst","stringizer","ValidatorResultError","captureStackTrace","detail","push","validatorType","concat","SchemaContext","base","schemas","resolve","propertyName","FORMAT_REGEXPS","input","parseFloat","parseInt","isNaN","regex","ipv4","validator","customFormats","deepMerger","dst","deepMerge","indexOf","copyist","src","copyistWithDeepMerge","pathEncoder","b","aKeys","bKeys","objectGetPath","o","k","shift","encodePath","decimalPlaces","Number","decimalParts","val","Validator","urilib","SchemaScanResult","found","ref","scanSchema","baseuri","$ref","resolvedUri","ourBase","substring","scanArray","extends","scanObject","definitions","p","unresolvedRefs","shouldResolve","addSchema","scan","ourUri","addSubSchemaArray","addSubSchema","addSubSchemaObject","setSchemas","getSchema","urn","validate","sch","schemaobj","schemaTraverser","superResolve","switchSchema","resolved","subctx","skipAttributes","ignoreProperties","validatorErr","allowUnknownAttributes","rewrite","parsed","fragment","hash","substr","isFinite","integer","boolean","date","any","InvalidCharacterError","atob","str","bs","buffer","bc","idx","output","fromCharCode","m","code","charCodeAt","toUpperCase","b64DecodeUnicode","base64_url_decode","InvalidTokenError","token","pos","header","globalSelf","phxWindow","global","CHANNEL_STATES","CHANNEL_EVENTS","CHANNEL_LIFECYCLE_EVENTS","TRANSPORTS","closure","Push","channel","payload","timeout","receivedResp","timeoutTimer","recHooks","sent","resend","reset","send","hasReceived","startTimeout","socket","topic","join_ref","joinRef","receive","status","response","cancelRefEvent","refEvent","matchReceive","h","off","cancelTimeout","clearTimeout","makeRef","replyEventName","on","setTimeout","trigger","Channel","params","state","bindings","bindingRef","joinedOnce","joinPush","pushBuffer","stateChangeRefs","rejoinTimer","Timer","isConnected","rejoin","rejoinAfterMs","onError","onOpen","isErrored","pushEvent","scheduleTimeout","onClose","hasLogger","log","reason","isJoining","canPush","isJoined","pushUnreliable","leave","leavePush","onMessage","isLifecycleEvent","isMember","isLeaving","leaveOpenTopic","handledPayload","eventBindings","isClosed","Serializer","encode","rawPayload","Socket","endPoint","opts","stateChangeCallbacks","open","close","channels","sendBuffer","transport","WebSocket","LongPoll","defaultEncoder","defaultDecoder","closeWasClean","unloaded","binaryType","conn","abnormalClose","heartbeatIntervalMs","tries","reconnectAfterMs","logger","longpollerTimeout","vsn","heartbeatTimer","pendingHeartbeatRef","reconnectTimer","teardown","connect","protocol","location","endPointURL","Ajax","appendParams","host","disconnect","onopen","onConnOpen","onerror","onConnError","onmessage","onConnMessage","onclose","onConnClose","kind","flushSendBuffer","resetHeartbeat","skipHeartbeat","clearInterval","setInterval","sendHeartbeat","waitForBufferDone","waitForSocketClosed","bufferedAmount","readyState","triggerChanError","connectionState","c","refs","chanParams","chan","reliable","newRef","rawMessage","dupChannel","find","pollEndpoint","normalizeEndpoint","poll","endpointURL","closeAndRetry","ontimeout","request","resp","messages","body","method","accept","XDomainRequest","req","xdomainRequest","XMLHttpRequest","xhrRequest","onload","parseJSON","responseText","onprogress","setRequestHeader","onreadystatechange","states","complete","serialize","obj","parentKey","queryStr","paramKey","paramVal","url","prefix","Presence","events","diff","pendingDiffs","caller","onJoin","onLeave","onSync","newState","syncState","syncDiff","inPendingSyncState","by","currentState","clone","joins","leaves","presence","newPresence","currentPresence","newRefs","metas","phx_ref","curRefs","joinedMetas","leftMetas","joinedRefs","curMetas","unshift","leftPresence","refsToRemove","presences","chooser","pres","func","getOwnPropertyNames","timerCalc","timer"],"sourceRoot":""}