{
  "docs": [
    {
      "comment": "/**\n@class ChatEngine\n@extends RootEmitter\n@return {ChatEngine} Returns an instance of {@link ChatEngine}\n*/",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 11,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "kind": "class",
      "name": "ChatEngine",
      "augments": [
        "RootEmitter"
      ],
      "returns": [
        {
          "type": {
            "names": [
              "ChatEngine"
            ]
          },
          "description": "Returns an instance of {@link ChatEngine}"
        }
      ],
      "longname": "ChatEngine",
      "scope": "global",
      "___id": "T000002R000010",
      "___s": true
    },
    {
      "comment": "/**\n     * A map of all known {@link User}s in this instance of ChatEngine.\n     * @type {Object}\n     * @memberof ChatEngine\n     */",
      "meta": {
        "range": [
          795,
          816
        ],
        "filename": "bootstrap.js",
        "lineno": 29,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000081",
          "name": "ChatEngine.users",
          "type": "ObjectExpression",
          "funcscope": "module.exports",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "A map of all known {@link User}s in this instance of ChatEngine.",
      "type": {
        "names": [
          "Object"
        ]
      },
      "memberof": "ChatEngine",
      "name": "users",
      "longname": "ChatEngine.users",
      "kind": "member",
      "scope": "static",
      "___id": "T000002R000015",
      "___s": true
    },
    {
      "comment": "/**\n     * A map of all known {@link Chat}s in this instance of ChatEngine.\n     * @memberof ChatEngine\n     * @type {Object}\n     */",
      "meta": {
        "range": [
          961,
          982
        ],
        "filename": "bootstrap.js",
        "lineno": 36,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000087",
          "name": "ChatEngine.chats",
          "type": "ObjectExpression",
          "funcscope": "module.exports",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "A map of all known {@link Chat}s in this instance of ChatEngine.",
      "memberof": "ChatEngine",
      "type": {
        "names": [
          "Object"
        ]
      },
      "name": "chats",
      "longname": "ChatEngine.chats",
      "kind": "member",
      "scope": "static",
      "___id": "T000002R000016",
      "___s": true
    },
    {
      "comment": "/**\n     * A global {@link Chat} that all {@link User}s join when they connect to ChatEngine. Useful for announcements, alerts, and global events.\n     * @member {Chat} global\n     * @memberof ChatEngine\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 38,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "A global {@link Chat} that all {@link User}s join when they connect to ChatEngine. Useful for announcements, alerts, and global events.",
      "kind": "member",
      "name": "global",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "memberof": "ChatEngine",
      "scope": "static",
      "longname": "ChatEngine.global",
      "___id": "T000002R000017",
      "___s": true
    },
    {
      "comment": "/**\n     * This instance of ChatEngine represented as a special {@link User} know as {@link Me}.\n     * @member {Me} me\n     * @memberof ChatEngine\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 45,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "This instance of ChatEngine represented as a special {@link User} know as {@link Me}.",
      "kind": "member",
      "name": "me",
      "type": {
        "names": [
          "Me"
        ]
      },
      "memberof": "ChatEngine",
      "scope": "static",
      "longname": "ChatEngine.me",
      "___id": "T000002R000019",
      "___s": true
    },
    {
      "comment": "/**\n     * An instance of PubNub, the networking infrastructure that powers the realtime communication between {@link User}s in {@link Chats}.\n     * @member {Object} pubnub\n     * @memberof ChatEngine\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 52,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "An instance of PubNub, the networking infrastructure that powers the realtime communication between {@link User}s in {@link Chats}.",
      "kind": "member",
      "name": "pubnub",
      "type": {
        "names": [
          "Object"
        ]
      },
      "memberof": "ChatEngine",
      "scope": "static",
      "longname": "ChatEngine.pubnub",
      "___id": "T000002R000021",
      "___s": true
    },
    {
      "comment": "/**\n     * Indicates if ChatEngine has fired the {@link ChatEngine#$\".\"ready} event.\n     * @member {Object} ready\n     * @memberof ChatEngine\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 59,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Indicates if ChatEngine has fired the {@link ChatEngine#$\".\"ready} event.",
      "kind": "member",
      "name": "ready",
      "type": {
        "names": [
          "Object"
        ]
      },
      "memberof": "ChatEngine",
      "scope": "static",
      "longname": "ChatEngine.ready",
      "___id": "T000002R000023",
      "___s": true
    },
    {
      "comment": "/**\n     * The package.json for ChatEngine. Used mainly for detecting package version.\n     * @type {Object}\n     */",
      "meta": {
        "range": [
          1978,
          2003
        ],
        "filename": "bootstrap.js",
        "lineno": 70,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000117",
          "name": "ChatEngine.package",
          "type": "Identifier",
          "funcscope": "module.exports",
          "value": "pack",
          "paramnames": []
        }
      },
      "description": "The package.json for ChatEngine. Used mainly for detecting package version.",
      "type": {
        "names": [
          "Object"
        ]
      },
      "name": "package",
      "longname": "module.exports~ChatEngine.package",
      "kind": "member",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000025",
      "___s": true
    },
    {
      "comment": "/**\n     * Bind a plugin to all future instances of a Class.\n     * @method ChatEngine#proto\n     * @param  {String} className The string representation of a class to bind to\n     * @param  {Class} plugin The plugin function.\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 116,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Bind a plugin to all future instances of a Class.",
      "kind": "function",
      "name": "proto",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The string representation of a class to bind to",
          "name": "className"
        },
        {
          "type": {
            "names": [
              "Class"
            ]
          },
          "description": "The plugin function.",
          "name": "plugin"
        }
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#proto",
      "scope": "instance",
      "___id": "T000002R000034",
      "___s": true
    },
    {
      "comment": "/**\n     * @private\n     */",
      "meta": {
        "range": [
          3455,
          4173
        ],
        "filename": "bootstrap.js",
        "lineno": 130,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000311",
          "name": "ChatEngine.request",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "method",
            "route",
            "inputBody",
            "inputParams"
          ]
        },
        "vars": {
          "body": "module.exports~ChatEngine.request~body",
          "params": "module.exports~ChatEngine.request~params"
        }
      },
      "access": "private",
      "name": "request",
      "longname": "module.exports~ChatEngine.request",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000037",
      "___s": true
    },
    {
      "comment": "/**\n     * Parse a channel name into chat object parts\n     * @private\n     */",
      "meta": {
        "range": [
          4263,
          4479
        ],
        "filename": "bootstrap.js",
        "lineno": 160,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000418",
          "name": "ChatEngine.parseChannel",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "channel"
          ]
        },
        "vars": {
          "info": "module.exports~ChatEngine.parseChannel~info"
        }
      },
      "description": "Parse a channel name into chat object parts",
      "access": "private",
      "name": "parseChannel",
      "longname": "module.exports~ChatEngine.parseChannel",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000050",
      "___s": true
    },
    {
      "comment": "/**\n     * Get the internal channel name of supplied string\n     * @private\n     */",
      "meta": {
        "range": [
          4574,
          5200
        ],
        "filename": "bootstrap.js",
        "lineno": 176,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000450",
          "name": "ChatEngine.augmentChannel",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "original",
            "isPrivate"
          ]
        },
        "vars": {
          "channel": "module.exports~ChatEngine.augmentChannel~channel",
          "chanPrivString": "module.exports~ChatEngine.augmentChannel~chanPrivString"
        }
      },
      "description": "Get the internal channel name of supplied string",
      "access": "private",
      "name": "augmentChannel",
      "longname": "module.exports~ChatEngine.augmentChannel",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000055",
      "___s": true
    },
    {
      "comment": "/**\n     * Initial communication with the server. Server grants permissions to\n     * talk in chats, etc.\n     * @private\n     */",
      "meta": {
        "range": [
          5341,
          6433
        ],
        "filename": "bootstrap.js",
        "lineno": 201,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000517",
          "name": "ChatEngine.handshake",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "complete"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Initial communication with the server. Server grants permissions to\ntalk in chats, etc.",
      "access": "private",
      "name": "handshake",
      "longname": "module.exports~ChatEngine.handshake",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000060",
      "___s": true
    },
    {
      "comment": "/**\n     * Listen to PubNub events and forward them into ChatEngine system.\n     * @private\n     */",
      "meta": {
        "range": [
          6544,
          9732
        ],
        "filename": "bootstrap.js",
        "lineno": 240,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000662",
          "name": "ChatEngine.listenToPubNub",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Listen to PubNub events and forward them into ChatEngine system.",
      "access": "private",
      "name": "listenToPubNub",
      "longname": "module.exports~ChatEngine.listenToPubNub",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000062",
      "___s": true
    },
    {
      "comment": "/**\n                 * SDK detected that network is online.\n                 * @event ChatEngine#$\".\"network\".\"up\".\"online\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 262,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "SDK detected that network is online.",
      "kind": "event",
      "name": "$\".\"network\".\"up\".\"online",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"up\".\"online",
      "scope": "instance",
      "___id": "T000002R000067",
      "___s": true
    },
    {
      "comment": "/**\n                 * SDK detected that network is down.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"offline\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 267,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "SDK detected that network is down.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"offline",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"offline",
      "scope": "instance",
      "___id": "T000002R000068",
      "___s": true
    },
    {
      "comment": "/**\n                 * A subscribe event experienced an exception when running.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"issue\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 272,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "A subscribe event experienced an exception when running.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"issue",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"issue",
      "scope": "instance",
      "___id": "T000002R000069",
      "___s": true
    },
    {
      "comment": "/**\n                 * SDK was able to reconnect to pubnub.\n                 * @event ChatEngine#$\".\"network\".\"up\".\"reconnected\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 277,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "SDK was able to reconnect to pubnub.",
      "kind": "event",
      "name": "$\".\"network\".\"up\".\"reconnected",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"up\".\"reconnected",
      "scope": "instance",
      "___id": "T000002R000070",
      "___s": true
    },
    {
      "comment": "/**\n                 * SDK subscribed with a new mix of channels.\n                 * @event ChatEngine#$\".\"network\".\"up\".\"connected\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 282,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "SDK subscribed with a new mix of channels.",
      "kind": "event",
      "name": "$\".\"network\".\"up\".\"connected",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"up\".\"connected",
      "scope": "instance",
      "___id": "T000002R000071",
      "___s": true
    },
    {
      "comment": "/**\n                 * JSON parsing crashed.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"malformed\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 287,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "JSON parsing crashed.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"malformed",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"malformed",
      "scope": "instance",
      "___id": "T000002R000072",
      "___s": true
    },
    {
      "comment": "/**\n                 * Server rejected the request.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"badrequest\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 292,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Server rejected the request.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"badrequest",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"badrequest",
      "scope": "instance",
      "___id": "T000002R000073",
      "___s": true
    },
    {
      "comment": "/**\n                 * If using decryption strategies and the decryption fails.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"decryption\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 297,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "If using decryption strategies and the decryption fails.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"decryption",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"decryption",
      "scope": "instance",
      "___id": "T000002R000074",
      "___s": true
    },
    {
      "comment": "/**\n                 * Request timed out.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"timeout\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 302,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Request timed out.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"timeout",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"timeout",
      "scope": "instance",
      "___id": "T000002R000075",
      "___s": true
    },
    {
      "comment": "/**\n                 * PAM permission failure.\n                 * @event ChatEngine#$\".\"network\".\"down\".\"denied\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 307,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "PAM permission failure.",
      "kind": "event",
      "name": "$\".\"network\".\"down\".\"denied",
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"network\".\"down\".\"denied",
      "scope": "instance",
      "___id": "T000002R000076",
      "___s": true
    },
    {
      "comment": "/**\n     * Subscribe to PubNub and begin receiving events.\n     * @private\n     */",
      "meta": {
        "range": [
          9826,
          10254
        ],
        "filename": "bootstrap.js",
        "lineno": 339,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000796",
          "name": "ChatEngine.subscribeToPubNub",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": []
        },
        "vars": {
          "chanGroups": "module.exports~ChatEngine.subscribeToPubNub~chanGroups"
        }
      },
      "description": "Subscribe to PubNub and begin receiving events.",
      "access": "private",
      "name": "subscribeToPubNub",
      "longname": "module.exports~ChatEngine.subscribeToPubNub",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000089",
      "___s": true
    },
    {
      "comment": "/**\n     * Initialize ChatEngine modules on first time boot.\n     * @private\n     */",
      "meta": {
        "range": [
          10350,
          12167
        ],
        "filename": "bootstrap.js",
        "lineno": 358,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100000858",
          "name": "ChatEngine.firstConnect",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "state"
          ]
        },
        "vars": {
          "ChatEngine.pubnub": "module.exports~ChatEngine.pubnub",
          "ChatEngine.global": "module.exports~ChatEngine.global",
          "": null
        }
      },
      "description": "Initialize ChatEngine modules on first time boot.",
      "access": "private",
      "name": "firstConnect",
      "longname": "module.exports~ChatEngine.firstConnect",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000093",
      "___s": true
    },
    {
      "comment": "/**\n            * Fired when a {@link Me} has been created within ChatEngine.\n            * @event ChatEngine#$\".\"created\".\"me\n            * @example\n            * ChatEngine.on('$.created.me', (data, me) => {\n            *     console.log('Me was created', me);\n            * });\n            */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 371,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Fired when a {@link Me} has been created within ChatEngine.",
      "kind": "event",
      "name": "$\".\"created\".\"me",
      "examples": [
        "ChatEngine.on('$.created.me', (data, me) => {\n    console.log('Me was created', me);\n});"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"created\".\"me",
      "scope": "instance",
      "___id": "T000002R000097",
      "___s": true
    },
    {
      "comment": "/**\n                 *  Fired when ChatEngine is connected to the internet and ready to go!\n                 * @event ChatEngine#$\".\"ready\n                 * @example\n                 * ChatEngine.on('$.ready', (data) => {\n                 *     let me = data.me;\n                 * })\n                 */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 387,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Fired when ChatEngine is connected to the internet and ready to go!",
      "kind": "event",
      "name": "$\".\"ready",
      "examples": [
        "ChatEngine.on('$.ready', (data) => {\n    let me = data.me;\n})"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"ready",
      "scope": "instance",
      "___id": "T000002R000098",
      "___s": true
    },
    {
      "comment": "/**\n     * Disconnect from all {@link Chat}s and mark them as asleep.\n     * @method ChatEngine#disconnect\n     * @example\n     *\n     * // create a new chat\n     * let chat = new ChatEngine.Chat(new Date().getTime());\n     *\n     * // disconnect from ChatEngine\n     * ChatEngine.disconnect();\n     *\n     * // every individual chat will be disconnected\n     * chat.on('$.disconnected', () => {\n     *     done();\n     * });\n     *\n     * // Changing User:\n     * ChatEngine.disconnect()\n     * ChatEngine = new ChatEngine({}, {});\n     * ChatEngine.connect()\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 416,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Disconnect from all {@link Chat}s and mark them as asleep.",
      "kind": "function",
      "name": "disconnect",
      "examples": [
        "// create a new chat\nlet chat = new ChatEngine.Chat(new Date().getTime());\n\n// disconnect from ChatEngine\nChatEngine.disconnect();\n\n// every individual chat will be disconnected\nchat.on('$.disconnected', () => {\n    done();\n});\n\n// Changing User:\nChatEngine.disconnect()\nChatEngine = new ChatEngine({}, {});\nChatEngine.connect()"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#disconnect",
      "scope": "instance",
      "___id": "T000002R000101",
      "___s": true
    },
    {
      "comment": "/**\n     * Performs authentication with server and restores connection\n     * to all sleeping chats.\n     * @method ChatEngine#reconnect\n     * @example\n     *\n     * // create a new chat\n     * let chat = new ChatEngine.Chat(new Date().getTime());\n     *\n     * // disconnect from ChatEngine\n     * ChatEngine.disconnect();\n     *\n     * // reconnect sometime later\n     * ChatEngine.reconnect();\n     *\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 449,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Performs authentication with server and restores connection\nto all sleeping chats.",
      "kind": "function",
      "name": "reconnect",
      "examples": [
        "// create a new chat\nlet chat = new ChatEngine.Chat(new Date().getTime());\n\n// disconnect from ChatEngine\nChatEngine.disconnect();\n\n// reconnect sometime later\nChatEngine.reconnect();"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#reconnect",
      "scope": "instance",
      "___id": "T000002R000103",
      "___s": true
    },
    {
      "comment": "/**\n    @private\n    */",
      "meta": {
        "range": [
          14147,
          14284
        ],
        "filename": "bootstrap.js",
        "lineno": 489,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100001110",
          "name": "ChatEngine.setAuth",
          "type": "ArrowFunctionExpression",
          "funcscope": "module.exports",
          "paramnames": [
            "authKey"
          ]
        },
        "vars": {
          "ChatEngine.pnConfig.authKey": "module.exports~ChatEngine.pnConfig.authKey"
        }
      },
      "access": "private",
      "name": "setAuth",
      "longname": "module.exports~ChatEngine.setAuth",
      "kind": "function",
      "memberof": "module.exports~ChatEngine",
      "scope": "static",
      "___id": "T000002R000105",
      "___s": true
    },
    {
      "comment": "/**\n     * Disconnects, changes authentication token, performs handshake with server\n     * and reconnects with new auth key. Used for extending logged in sessions\n     * for active users.\n     * @method ChatEngine#reauthorize\n     * @example\n     * // early\n     * ChatEngine.connect(...);\n     *\n     * ChatEngine.once('$.connected', () => {\n     *     // first connection established\n     * });\n     *\n     * // some time passes, session token expires\n     * ChatEngine.reauthorize(authKey);\n     *\n     * // we are connected again\n     * ChatEngine.once('$.connected', () => {\n     *     // we are connected again\n     * });\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 496,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Disconnects, changes authentication token, performs handshake with server\nand reconnects with new auth key. Used for extending logged in sessions\nfor active users.",
      "kind": "function",
      "name": "reauthorize",
      "examples": [
        "// early\nChatEngine.connect(...);\n\nChatEngine.once('$.connected', () => {\n    // first connection established\n});\n\n// some time passes, session token expires\nChatEngine.reauthorize(authKey);\n\n// we are connected again\nChatEngine.once('$.connected', () => {\n    // we are connected again\n});"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#reauthorize",
      "scope": "instance",
      "___id": "T000002R000107",
      "___s": true
    },
    {
      "comment": "/**\n     * Connect to realtime service and create instance of {@link Me}\n     * @method ChatEngine#connect\n     * @param {String} uuid A unique string for {@link Me}. It can be a device id, username, user id, email, etc. Must be alphanumeric.\n     * @param {Object} state An object containing information about this client ({@link Me}). This JSON object is sent to all other clients on the network, so no passwords!\n     * @param {String} [authKey] A authentication secret. Will be sent to authentication backend for validation. This is usually an access token. See {@tutorial auth} for more.\n     * @fires $\".\"connected\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 530,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Connect to realtime service and create instance of {@link Me}",
      "kind": "function",
      "name": "connect",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "A unique string for {@link Me}. It can be a device id, username, user id, email, etc. Must be alphanumeric.",
          "name": "uuid"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "An object containing information about this client ({@link Me}). This JSON object is sent to all other clients on the network, so no passwords!",
          "name": "state"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "optional": true,
          "description": "A authentication secret. Will be sent to authentication backend for validation. This is usually an access token. See {@tutorial auth} for more.",
          "name": "authKey"
        }
      ],
      "fires": [
        "event:$\".\"connected"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#connect",
      "scope": "instance",
      "___id": "T000002R000109",
      "___s": true
    },
    {
      "comment": "/**\n     * The {@link Chat} class. Creates a new Chat when initialized, or returns an existing instance if chat has already been created.\n     * @member {Chat} Chat\n     * @memberof ChatEngine\n     * @see {@link Chat}\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 568,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "The {@link Chat} class. Creates a new Chat when initialized, or returns an existing instance if chat has already been created.",
      "kind": "member",
      "name": "Chat",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "memberof": "ChatEngine",
      "see": [
        "{@link Chat}"
      ],
      "scope": "static",
      "longname": "ChatEngine.Chat",
      "___id": "T000002R000114",
      "___s": true
    },
    {
      "comment": "/**\n            * Fired when a {@link Chat} has been created within ChatEngine.\n            * @event ChatEngine#$\".\"created\".\"chat\n            * @example\n            * ChatEngine.on('$.created.chat', (data, chat) => {\n            *     console.log('Chat was created', chat);\n            * });\n            */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 584,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Fired when a {@link Chat} has been created within ChatEngine.",
      "kind": "event",
      "name": "$\".\"created\".\"chat",
      "examples": [
        "ChatEngine.on('$.created.chat', (data, chat) => {\n    console.log('Chat was created', chat);\n});"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"created\".\"chat",
      "scope": "instance",
      "___id": "T000002R000118",
      "___s": true
    },
    {
      "comment": "/**\n     * The {@link User} class. Creates a new User when initialized, or returns an existing instance if chat has already been created.\n     * @member {User} User\n     * @memberof ChatEngine\n     * @see {@link User}\n     */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 600,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "The {@link User} class. Creates a new User when initialized, or returns an existing instance if chat has already been created.",
      "kind": "member",
      "name": "User",
      "type": {
        "names": [
          "User"
        ]
      },
      "memberof": "ChatEngine",
      "see": [
        "{@link User}"
      ],
      "scope": "static",
      "longname": "ChatEngine.User",
      "___id": "T000002R000119",
      "___s": true
    },
    {
      "comment": "/**\n            * Fired when a {@link User} has been created within ChatEngine.\n            * @event ChatEngine#$\".\"created\".\"user\n            * @example\n            * ChatEngine.on('$.created.user', (data, user) => {\n            *     console.log('Chat was created', user);\n            * });\n            */",
      "meta": {
        "filename": "bootstrap.js",
        "lineno": 616,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {}
      },
      "description": "Fired when a {@link User} has been created within ChatEngine.",
      "kind": "event",
      "name": "$\".\"created\".\"user",
      "examples": [
        "ChatEngine.on('$.created.user', (data, user) => {\n    console.log('Chat was created', user);\n});"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"created\".\"user",
      "scope": "instance",
      "___id": "T000002R000122",
      "___s": true
    },
    {
      "comment": "/**\n This is the root {@link Chat} class that represents a chat room\n\n @param {String} [channel=new Date().getTime()] A unique identifier for this chat {@link Chat}. Must be alphanumeric. The channel is the unique name of a {@link Chat}, and is usually something like \"The Watercooler\", \"Support\", or \"Off Topic\". See [PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-).\n @param {Boolean} [isPrivate=true] Attempt to authenticate ourselves before connecting to this {@link Chat}.\n @param {Boolean} [autoConnect=true] Connect to this chat as soon as its initiated. If set to ```false```, call the {@link Chat#connect} method to connect to this {@link Chat}.\n @param {Object} [meta={}] Chat metadata that will be persisted on the server and populated on creation.\n @param {String} [group='default'] Groups chat into a \"type\". This is the key which chats will be grouped into within {@link Me.session} object.\n @class Chat\n @extends Emitter\n @extends RootEmitter\n @fires Chat#$\".\"ready\n @fires Chat#$\".\"state\n @fires Chat#$\".\"online\".\"*\n @fires Chat#$\".\"offline\".\"*\n */",
      "meta": {
        "filename": "chat.js",
        "lineno": 9,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "This is the root {@link Chat} class that represents a chat room",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "optional": true,
          "defaultvalue": "new Date().getTime()",
          "description": "A unique identifier for this chat {@link Chat}. Must be alphanumeric. The channel is the unique name of a {@link Chat}, and is usually something like \"The Watercooler\", \"Support\", or \"Off Topic\". See [PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-).",
          "name": "channel"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "defaultvalue": true,
          "description": "Attempt to authenticate ourselves before connecting to this {@link Chat}.",
          "name": "isPrivate"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "defaultvalue": true,
          "description": "Connect to this chat as soon as its initiated. If set to ```false```, call the {@link Chat#connect} method to connect to this {@link Chat}.",
          "name": "autoConnect"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "optional": true,
          "defaultvalue": "{}",
          "description": "Chat metadata that will be persisted on the server and populated on creation.",
          "name": "meta"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "optional": true,
          "defaultvalue": "'default'",
          "description": "Groups chat into a \"type\". This is the key which chats will be grouped into within {@link Me.session} object.",
          "name": "group"
        }
      ],
      "kind": "class",
      "name": "Chat",
      "augments": [
        "Emitter",
        "RootEmitter"
      ],
      "fires": [
        "Chat#event:$\".\"ready",
        "Chat#event:$\".\"state",
        "Chat#event:$\".\"online\".\"*",
        "Chat#event:$\".\"offline\".\"*"
      ],
      "longname": "Chat",
      "scope": "global",
      "___id": "T000002R000128",
      "___s": true
    },
    {
      "comment": "/**\n        * Classify the chat within some group, Valid options are 'system', 'fixed', or 'custom'.\n        * @type Boolean\n        * @readonly\n        * @private\n        */",
      "meta": {
        "range": [
          1854,
          1872
        ],
        "filename": "chat.js",
        "lineno": 43,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001479",
          "name": "this.group",
          "type": "Identifier",
          "value": "group",
          "paramnames": []
        }
      },
      "description": "Classify the chat within some group, Valid options are 'system', 'fixed', or 'custom'.",
      "type": {
        "names": [
          "Boolean"
        ]
      },
      "readonly": true,
      "access": "private",
      "name": "group",
      "longname": "Chat#group",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000133",
      "___s": true
    },
    {
      "comment": "/**\n        * Excludes all users from reading or writing to the {@link chat} unless they have been explicitly invited via {@link Chat#invite};\n        * @type Boolean\n        * @readonly\n        */",
      "meta": {
        "range": [
          2089,
          2115
        ],
        "filename": "chat.js",
        "lineno": 50,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001485",
          "name": "this.isPrivate",
          "type": "Identifier",
          "value": "isPrivate",
          "paramnames": []
        }
      },
      "description": "Excludes all users from reading or writing to the {@link chat} unless they have been explicitly invited via {@link Chat#invite};",
      "type": {
        "names": [
          "Boolean"
        ]
      },
      "readonly": true,
      "name": "isPrivate",
      "longname": "Chat#isPrivate",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000134",
      "___s": true
    },
    {
      "comment": "/**\n         * Chat metadata persisted on the server. Useful for storing things like the name and description. Call {@link Chat#update} to update the remote information.\n         * @type Object\n         * @readonly\n         */",
      "meta": {
        "range": [
          2361,
          2383
        ],
        "filename": "chat.js",
        "lineno": 57,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001491",
          "name": "this.meta",
          "type": "LogicalExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Chat metadata persisted on the server. Useful for storing things like the name and description. Call {@link Chat#update} to update the remote information.",
      "type": {
        "names": [
          "Object"
        ]
      },
      "readonly": true,
      "name": "meta",
      "longname": "Chat#meta",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000135",
      "___s": true
    },
    {
      "comment": "/**\n         * A string identifier for the Chat room. Any chat with an identical channel will be able to communicate with one another.\n         * @type String\n         * @readonly\n         * @see [PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-)\n         */",
      "meta": {
        "range": [
          2714,
          2784
        ],
        "filename": "chat.js",
        "lineno": 65,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001499",
          "name": "this.channel",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "A string identifier for the Chat room. Any chat with an identical channel will be able to communicate with one another.",
      "type": {
        "names": [
          "String"
        ]
      },
      "readonly": true,
      "see": [
        "[PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-)"
      ],
      "name": "channel",
      "longname": "Chat#channel",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000136",
      "___s": true
    },
    {
      "comment": "/**\n         A list of users in this {@link Chat}. Automatically kept in sync as users join and leave the chat.\n         Use [$.join](/Chat.html#event:$%2522.%2522join) and related events to get notified when this changes\n\n         @type Object\n         @readonly\n         */",
      "meta": {
        "range": [
          3079,
          3094
        ],
        "filename": "chat.js",
        "lineno": 74,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001514",
          "name": "this.users",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "A list of users in this {@link Chat}. Automatically kept in sync as users join and leave the chat.\n         Use [$.join](/Chat.html#event:$%2522.%2522join) and related events to get notified when this changes",
      "type": {
        "names": [
          "Object"
        ]
      },
      "readonly": true,
      "name": "users",
      "longname": "Chat#users",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000137",
      "___s": true
    },
    {
      "comment": "/**\n         * Boolean value that indicates of the Chat is connected to the network\n         * @type {Boolean}\n         */",
      "meta": {
        "range": [
          3236,
          3258
        ],
        "filename": "chat.js",
        "lineno": 80,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001520",
          "name": "this.connected",
          "type": "Literal",
          "value": false,
          "paramnames": []
        }
      },
      "description": "Boolean value that indicates of the Chat is connected to the network",
      "type": {
        "names": [
          "Boolean"
        ]
      },
      "name": "connected",
      "longname": "Chat#connected",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000138",
      "___s": true
    },
    {
      "comment": "/**\n         * Keep a record if we've every successfully connected to this chat before.\n         * @type {Boolean}\n         */",
      "meta": {
        "range": [
          3404,
          3429
        ],
        "filename": "chat.js",
        "lineno": 86,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001526",
          "name": "this.hasConnected",
          "type": "Literal",
          "value": false,
          "paramnames": []
        }
      },
      "description": "Keep a record if we've every successfully connected to this chat before.",
      "type": {
        "names": [
          "Boolean"
        ]
      },
      "name": "hasConnected",
      "longname": "Chat#hasConnected",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000139",
      "___s": true
    },
    {
      "comment": "/**\n         * If user manually disconnects via {@link ChatEngine#disconnect}, the\n         * chat is put to \"sleep\". If a connection is reestablished\n         * via {@link ChatEngine#reconnect}, sleeping chats reconnect automatically.\n         * @type {Boolean}\n         */",
      "meta": {
        "range": [
          3723,
          3742
        ],
        "filename": "chat.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001532",
          "name": "this.asleep",
          "type": "Literal",
          "value": false,
          "paramnames": []
        }
      },
      "description": "If user manually disconnects via {@link ChatEngine#disconnect}, the\nchat is put to \"sleep\". If a connection is reestablished\nvia {@link ChatEngine#reconnect}, sleeping chats reconnect automatically.",
      "type": {
        "names": [
          "Boolean"
        ]
      },
      "name": "asleep",
      "longname": "Chat#asleep",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000140",
      "___s": true
    },
    {
      "comment": "/**\n     Updates list of {@link User}s in this {@link Chat}\n     based on who is online now.\n\n     @private\n     @param {Object} status The response status\n     @param {Object} response The response payload object\n     */",
      "meta": {
        "range": [
          4123,
          4844
        ],
        "filename": "chat.js",
        "lineno": 114,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001559",
          "name": "Chat#onHereNow",
          "type": "MethodDefinition",
          "paramnames": [
            "status",
            "response"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Updates list of {@link User}s in this {@link Chat}\n     based on who is online now.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The response status",
          "name": "status"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The response payload object",
          "name": "response"
        }
      ],
      "name": "onHereNow",
      "longname": "Chat#onHereNow",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000142",
      "___s": true
    },
    {
      "comment": "/**\n             * There was a problem fetching the presence of this chat\n             * @event Chat#$\".\"error\".\"presence\n             */",
      "meta": {
        "filename": "chat.js",
        "lineno": 118,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "There was a problem fetching the presence of this chat",
      "kind": "event",
      "name": "$\".\"error\".\"presence",
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"error\".\"presence",
      "scope": "instance",
      "___id": "T000002R000143",
      "___s": true
    },
    {
      "comment": "/**\n    * Turns a {@link Chat} into a JSON representation.\n    * @return {Object}\n    */",
      "meta": {
        "range": [
          4943,
          5123
        ],
        "filename": "chat.js",
        "lineno": 142,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001615",
          "name": "Chat#objectify",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Turns a {@link Chat} into a JSON representation.",
      "returns": [
        {
          "type": {
            "names": [
              "Object"
            ]
          }
        }
      ],
      "name": "objectify",
      "longname": "Chat#objectify",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000145",
      "___s": true
    },
    {
      "comment": "/**\n     * Invite a user to this Chat. Authorizes the invited user in the Chat and sends them an invite via {@link User#direct}.\n     * @param {User} user The {@link User} to invite to this chatroom.\n     * @fires Me#event:$\".\"invite\n     * @example\n     * // one user running ChatEngine\n     * let secretChat = new ChatEngine.Chat('secret-channel');\n     * secretChat.invite(someoneElse);\n     *\n     * // someoneElse in another instance of ChatEngine\n     * me.direct.on('$.invite', (payload) => {\n     *     let secretChat = new ChatEngine.Chat(payload.data.channel);\n     * });\n     */",
      "meta": {
        "range": [
          5723,
          7026
        ],
        "filename": "chat.js",
        "lineno": 167,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001637",
          "name": "Chat#invite",
          "type": "MethodDefinition",
          "paramnames": [
            "user"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Invite a user to this Chat. Authorizes the invited user in the Chat and sends them an invite via {@link User#direct}.",
      "params": [
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "description": "The {@link User} to invite to this chatroom.",
          "name": "user"
        }
      ],
      "fires": [
        "Me#event:$\".\"invite"
      ],
      "examples": [
        "// one user running ChatEngine\nlet secretChat = new ChatEngine.Chat('secret-channel');\nsecretChat.invite(someoneElse);\n\n// someoneElse in another instance of ChatEngine\nme.direct.on('$.invite', (payload) => {\n    let secretChat = new ChatEngine.Chat(payload.data.channel);\n});"
      ],
      "name": "invite",
      "longname": "Chat#invite",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000150",
      "___s": true
    },
    {
      "comment": "/**\n                     * Notifies {@link Me} that they've been invited to a new private {@link Chat}.\n                     * Fired by the {@link Chat#invite} method.\n                     * @event Me#$\".\"invite\n                     * @tutorial private\n                     * @example\n                     * me.direct.on('$.invite', (payload) => {\n                     *    let privChat = new ChatEngine.Chat(payload.data.channel));\n                     * });\n                     */",
      "meta": {
        "filename": "chat.js",
        "lineno": 177,
        "columnno": 20,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Notifies {@link Me} that they've been invited to a new private {@link Chat}.\nFired by the {@link Chat#invite} method.",
      "kind": "event",
      "name": "$\".\"invite",
      "tutorials": [
        "private"
      ],
      "examples": [
        "me.direct.on('$.invite', (payload) => {\n   let privChat = new ChatEngine.Chat(payload.data.channel));\n});"
      ],
      "memberof": "Me",
      "longname": "Me#event:$\".\"invite",
      "scope": "instance",
      "___id": "T000002R000154",
      "___s": true
    },
    {
      "comment": "/**\n     Keep track of {@link User}s in the room by subscribing to PubNub presence events.\n\n     @private\n     @param {Object} data The PubNub presence response for this event\n     */",
      "meta": {
        "range": [
          7220,
          7921
        ],
        "filename": "chat.js",
        "lineno": 213,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001734",
          "name": "Chat#onPresence",
          "type": "MethodDefinition",
          "paramnames": [
            "presenceEvent"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Keep track of {@link User}s in the room by subscribing to PubNub presence events.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The PubNub presence response for this event",
          "name": "data"
        }
      ],
      "name": "onPresence",
      "longname": "Chat#onPresence",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000157",
      "___s": true
    },
    {
      "comment": "/**\n     * Update the {@link Chat} metadata on the server.\n     * @param  {object} data JSON object representing chat metadta.\n     */",
      "meta": {
        "range": [
          8066,
          8479
        ],
        "filename": "chat.js",
        "lineno": 243,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001805",
          "name": "Chat#update",
          "type": "MethodDefinition",
          "paramnames": [
            "data"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Update the {@link Chat} metadata on the server.",
      "params": [
        {
          "type": {
            "names": [
              "object"
            ]
          },
          "description": "JSON object representing chat metadta.",
          "name": "data"
        }
      ],
      "name": "update",
      "longname": "Chat#update",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000158",
      "___s": true
    },
    {
      "comment": "/**\n     * Send events to other clients in this {@link User}.\n     * Events are trigger over the network  and all events are made\n     * on behalf of {@link Me}\n     *\n     * @param {String} event The event name\n     * @param {Object} data The event payload object\n     * @example\n     * chat.emit('custom-event', {value: true});\n     * chat.on('custom-event', (payload) => {\n      *     console.log(payload.sender.uuid, 'emitted the value', payload.data.value);\n      * });\n     */",
      "meta": {
        "range": [
          8972,
          10043
        ],
        "filename": "chat.js",
        "lineno": 270,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001871",
          "name": "Chat#emit",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "data"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Send events to other clients in this {@link User}.\nEvents are trigger over the network  and all events are made\non behalf of {@link Me}",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "data"
        }
      ],
      "examples": [
        "chat.emit('custom-event', {value: true});\nchat.on('custom-event', (payload) => {\n    console.log(payload.sender.uuid, 'emitted the value', payload.data.value);\n});"
      ],
      "name": "emit",
      "longname": "Chat#emit",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000163",
      "___s": true
    },
    {
      "comment": "/**\n     Add a user to the {@link Chat}, creating it if it doesn't already exist.\n\n     @private\n     @param {String} uuid The user uuid\n     @param {Object} state The user initial state\n     @param {Boolean} trigger Force a trigger that this user is online\n     */",
      "meta": {
        "range": [
          10319,
          12357
        ],
        "filename": "chat.js",
        "lineno": 314,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100001959",
          "name": "Chat#userJoin",
          "type": "MethodDefinition",
          "paramnames": [
            "uuid",
            "state"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Add a user to the {@link Chat}, creating it if it doesn't already exist.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The user uuid",
          "name": "uuid"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The user initial state",
          "name": "state"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "description": "Force a trigger that this user is online",
          "name": "trigger"
        }
      ],
      "name": "userJoin",
      "longname": "Chat#userJoin",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000171",
      "___s": true
    },
    {
      "comment": "/**\n             * Broadcast that a {@link User} has come online. This is when\n             * the framework firsts learn of a user. This can be triggered\n             * by, ```$.join```, or other network events that\n             * notify the framework of a new user.\n             *\n             * @event Chat#$\".\"online\".\"here\n             * @param {Object} data The payload returned by the event\n             * @param {User} data.user The {@link User} that came online\n             * @example\n             * chat.on('$.online.here', (data) => {\n                      *     console.log('User has come online:', data.user);\n                      * });\n             */",
      "meta": {
        "filename": "chat.js",
        "lineno": 331,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Broadcast that a {@link User} has come online. This is when\nthe framework firsts learn of a user. This can be triggered\nby, ```$.join```, or other network events that\nnotify the framework of a new user.",
      "kind": "event",
      "name": "$\".\"online\".\"here",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The payload returned by the event",
          "name": "data"
        },
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "description": "The {@link User} that came online",
          "name": "data.user"
        }
      ],
      "examples": [
        "chat.on('$.online.here', (data) => {\n    console.log('User has come online:', data.user);\n});"
      ],
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"online\".\"here",
      "scope": "instance",
      "___id": "T000002R000175",
      "___s": true
    },
    {
      "comment": "/**\n             * Fired when a {@link User} has joined the room.\n             *\n             * @event Chat#$\".\"online\".\"join\n             * @param {Object} data The payload returned by the event\n             * @param {User} data.user The {@link User} that came online\n             * @example\n             * chat.on('$.join', (data) => {\n             *     console.log('User has joined the room!', data.user);\n             * });\n             */",
      "meta": {
        "filename": "chat.js",
        "lineno": 350,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired when a {@link User} has joined the room.",
      "kind": "event",
      "name": "$\".\"online\".\"join",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The payload returned by the event",
          "name": "data"
        },
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "description": "The {@link User} that came online",
          "name": "data.user"
        }
      ],
      "examples": [
        "chat.on('$.join', (data) => {\n    console.log('User has joined the room!', data.user);\n});"
      ],
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"online\".\"join",
      "scope": "instance",
      "___id": "T000002R000177",
      "___s": true
    },
    {
      "comment": "/**\n     * Update a user's state.\n     * @private\n     * @param {String} uuid The {@link User} uuid\n     * @param {Object} state State to update for the user\n     */",
      "meta": {
        "range": [
          12533,
          13612
        ],
        "filename": "chat.js",
        "lineno": 377,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002061",
          "name": "Chat#userUpdate",
          "type": "MethodDefinition",
          "paramnames": [
            "uuid",
            "state"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Update a user's state.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The {@link User} uuid",
          "name": "uuid"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "State to update for the user",
          "name": "state"
        }
      ],
      "name": "userUpdate",
      "longname": "Chat#userUpdate",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000179",
      "___s": true
    },
    {
      "comment": "/**\n         * Broadcast that a {@link User} has changed state.\n         * @event ChatEngine#$\".\"state\n         * @param {Object} data The payload returned by the event\n         * @param {User} data.user The {@link User} that changed state\n         * @param {Object} data.state The new user state\n         * @example\n         * ChatEngine.on('$.state', (data) => {\n         *     console.log('User has changed state:', data.user, 'new state:', data.state);\n         * });\n         */",
      "meta": {
        "filename": "chat.js",
        "lineno": 391,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Broadcast that a {@link User} has changed state.",
      "kind": "event",
      "name": "$\".\"state",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The payload returned by the event",
          "name": "data"
        },
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "description": "The {@link User} that changed state",
          "name": "data.user"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The new user state",
          "name": "data.state"
        }
      ],
      "examples": [
        "ChatEngine.on('$.state', (data) => {\n    console.log('User has changed state:', data.user, 'new state:', data.state);\n});"
      ],
      "memberof": "ChatEngine",
      "longname": "ChatEngine#event:$\".\"state",
      "scope": "instance",
      "___id": "T000002R000181",
      "___s": true
    },
    {
      "comment": "/**\n     * Called by {@link ChatEngine#disconnect}. Fires disconnection notifications\n     * and stores \"sleep\" state in memory. Sleep means the Chat was previously connected.\n     * @private\n     */",
      "meta": {
        "range": [
          13822,
          13945
        ],
        "filename": "chat.js",
        "lineno": 414,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002139",
          "name": "Chat#sleep",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Called by {@link ChatEngine#disconnect}. Fires disconnection notifications\nand stores \"sleep\" state in memory. Sleep means the Chat was previously connected.",
      "access": "private",
      "name": "sleep",
      "longname": "Chat#sleep",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000184",
      "___s": true
    },
    {
      "comment": "/**\n     * Called by {@link ChatEngine#reconnect}. Wakes the Chat up from sleep state.\n     * Re-authenticates with the server, and fires connection events once established.\n     * @private\n     */",
      "meta": {
        "range": [
          14153,
          14293
        ],
        "filename": "chat.js",
        "lineno": 427,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002159",
          "name": "Chat#wake",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Called by {@link ChatEngine#reconnect}. Wakes the Chat up from sleep state.\nRe-authenticates with the server, and fires connection events once established.",
      "access": "private",
      "name": "wake",
      "longname": "Chat#wake",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000186",
      "___s": true
    },
    {
      "comment": "/**\n     * Fired upon successful connection to the network.\n     * @private\n     */",
      "meta": {
        "range": [
          14387,
          14476
        ],
        "filename": "chat.js",
        "lineno": 441,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002180",
          "name": "Chat#onConnected",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Fired upon successful connection to the network.",
      "access": "private",
      "name": "onConnected",
      "longname": "Chat#onConnected",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000187",
      "___s": true
    },
    {
      "comment": "/**\n     * Fires upon disconnection from the network through any means.\n     * @private\n     */",
      "meta": {
        "range": [
          14582,
          14678
        ],
        "filename": "chat.js",
        "lineno": 450,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002196",
          "name": "Chat#onDisconnected",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Fires upon disconnection from the network through any means.",
      "access": "private",
      "name": "onDisconnected",
      "longname": "Chat#onDisconnected",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000189",
      "___s": true
    },
    {
      "comment": "/**\n     * Fires upon manually invoked leaving.\n     * @private\n     */",
      "meta": {
        "range": [
          14759,
          14839
        ],
        "filename": "chat.js",
        "lineno": 458,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002212",
          "name": "Chat#onLeave",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Fires upon manually invoked leaving.",
      "access": "private",
      "name": "onLeave",
      "longname": "Chat#onLeave",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000191",
      "___s": true
    },
    {
      "comment": "/**\n     * Leave from the {@link Chat} on behalf of {@link Me}. Disconnects from the {@link Chat} and will stop\n     * receiving events.\n     * @fires Chat#event:$\".\"offline\".\"leave\n     * @example\n     * chat.leave();\n     */",
      "meta": {
        "range": [
          15076,
          15984
        ],
        "filename": "chat.js",
        "lineno": 470,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002227",
          "name": "Chat#leave",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Leave from the {@link Chat} on behalf of {@link Me}. Disconnects from the {@link Chat} and will stop\nreceiving events.",
      "fires": [
        "Chat#event:$\".\"offline\".\"leave"
      ],
      "examples": [
        "chat.leave();"
      ],
      "name": "leave",
      "longname": "Chat#leave",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000192",
      "___s": true
    },
    {
      "comment": "/**\n     Perform updates when a user has left the {@link Chat}.\n\n     @private\n     */",
      "meta": {
        "range": [
          16081,
          17121
        ],
        "filename": "chat.js",
        "lineno": 504,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002326",
          "name": "Chat#userLeave",
          "type": "MethodDefinition",
          "paramnames": [
            "uuid"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Perform updates when a user has left the {@link Chat}.",
      "access": "private",
      "name": "userLeave",
      "longname": "Chat#userLeave",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000197",
      "___s": true
    },
    {
      "comment": "/**\n             * Fired when a {@link User} intentionally leaves a {@link Chat}.\n             *\n             * @event Chat#$\".\"offline\".\"leave\n             * @param {Object} data The data payload from the event\n             * @param {User} user The {@link User} that has left the room\n             * @example\n             * chat.on('$.offline.leave', (data) => {\n                      *     console.log('User left the room manually:', data.user);\n                      * });\n             */",
      "meta": {
        "filename": "chat.js",
        "lineno": 519,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired when a {@link User} intentionally leaves a {@link Chat}.",
      "kind": "event",
      "name": "$\".\"offline\".\"leave",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The data payload from the event",
          "name": "data"
        },
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "description": "The {@link User} that has left the room",
          "name": "user"
        }
      ],
      "examples": [
        "chat.on('$.offline.leave', (data) => {\n    console.log('User left the room manually:', data.user);\n});"
      ],
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"offline\".\"leave",
      "scope": "instance",
      "___id": "T000002R000199",
      "___s": true
    },
    {
      "comment": "/**\n     Fired when a user disconnects from the {@link Chat}\n\n     @private\n     @param {String} uuid The uuid of the {@link Chat} that left\n     */",
      "meta": {
        "range": [
          17280,
          18101
        ],
        "filename": "chat.js",
        "lineno": 542,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002358",
          "name": "Chat#userDisconnect",
          "type": "MethodDefinition",
          "paramnames": [
            "uuid"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Fired when a user disconnects from the {@link Chat}",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The uuid of the {@link Chat} that left",
          "name": "uuid"
        }
      ],
      "name": "userDisconnect",
      "longname": "Chat#userDisconnect",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000201",
      "___s": true
    },
    {
      "comment": "/**\n             * Fired specifically when a {@link User} looses network connection\n             * to the {@link Chat} involuntarily.\n             *\n             * @event Chat#$\".\"offline\".\"disconnect\n             * @param {Object} data The {@link User} that disconnected\n             * @param {Object} data.user The {@link User} that disconnected\n             * @example\n             * chat.on('$.offline.disconnect', (data) => {\n             *     console.log('User disconnected from the network:', data.user);\n             * });\n             */",
      "meta": {
        "filename": "chat.js",
        "lineno": 550,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired specifically when a {@link User} looses network connection\nto the {@link Chat} involuntarily.",
      "kind": "event",
      "name": "$\".\"offline\".\"disconnect",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The {@link User} that disconnected",
          "name": "data"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The {@link User} that disconnected",
          "name": "data.user"
        }
      ],
      "examples": [
        "chat.on('$.offline.disconnect', (data) => {\n    console.log('User disconnected from the network:', data.user);\n});"
      ],
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"offline\".\"disconnect",
      "scope": "instance",
      "___id": "T000002R000203",
      "___s": true
    },
    {
      "comment": "/**\n     Set the state for {@link Me} within this {@link User}.\n     Broadcasts the ```$.state``` event on other clients\n\n     @private\n     @param {Object} state The new state {@link Me} will have within this {@link User}\n     */",
      "meta": {
        "range": [
          18342,
          18481
        ],
        "filename": "chat.js",
        "lineno": 575,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002390",
          "name": "Chat#setState",
          "type": "MethodDefinition",
          "paramnames": [
            "state",
            "callback"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Set the state for {@link Me} within this {@link User}.\n     Broadcasts the ```$.state``` event on other clients",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The new state {@link Me} will have within this {@link User}",
          "name": "state"
        }
      ],
      "name": "setState",
      "longname": "Chat#setState",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000205",
      "___s": true
    },
    {
      "comment": "/**\n     Search through previously emitted events. Parameters act as AND operators. Returns an instance of the emitter based {@link History}. Will\n     which will emit all old events unless ```config.event``` is supplied.\n     @param {Object} [config] Our configuration for the PubNub history request. See the [PubNub History](https://www.pubnub.com/docs/web-javascript/storage-and-history) docs for more information on these parameters.\n     @param {Event} [config.event] The {@link Event} to search for.\n     @param {User} [config.sender] The {@link User} who sent the message.\n     @param {Number} [config.pages=10] The maximum number of history requests which {@link ChatEngine} will do automatically to fulfill `limit` requirement.\n     @param {Number} [config.limit=20] The maximum number of results to return that match search criteria. Search will continue operating until it returns this number of results or it reached the end of history. Limit will be ignored in case if both 'start' and 'end' timetokens has been passed in search configuration.\n     @param {Number} [config.count=100] The maximum number of messages which can be fetched with single history request.\n     @param {Number} [config.start=0] The timetoken to begin searching between.\n     @param {Number} [config.end=0] The timetoken to end searching between.\n     @param {Boolean} [config.reverse=false] Search oldest messages first.\n     @return {Search}\n     @example\n    chat.search({\n        event: 'my-custom-event',\n        sender: ChatEngine.me,\n        limit: 20\n    }).on('my-custom-event', (event) => {\n        console.log('this is an old event!', event);\n    }).on('$.search.finish', () => {\n        console.log('we have all our results!')\n    });\n     */",
      "meta": {
        "range": [
          20233,
          20527
        ],
        "filename": "chat.js",
        "lineno": 603,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002418",
          "name": "Chat#search",
          "type": "MethodDefinition",
          "paramnames": [
            "config"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Search through previously emitted events. Parameters act as AND operators. Returns an instance of the emitter based {@link History}. Will\n     which will emit all old events unless ```config.event``` is supplied.",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "optional": true,
          "description": "Our configuration for the PubNub history request. See the [PubNub History](https://www.pubnub.com/docs/web-javascript/storage-and-history) docs for more information on these parameters.",
          "name": "config"
        },
        {
          "type": {
            "names": [
              "Event"
            ]
          },
          "optional": true,
          "description": "The {@link Event} to search for.",
          "name": "config.event"
        },
        {
          "type": {
            "names": [
              "User"
            ]
          },
          "optional": true,
          "description": "The {@link User} who sent the message.",
          "name": "config.sender"
        },
        {
          "type": {
            "names": [
              "Number"
            ]
          },
          "optional": true,
          "defaultvalue": 10,
          "description": "The maximum number of history requests which {@link ChatEngine} will do automatically to fulfill `limit` requirement.",
          "name": "config.pages"
        },
        {
          "type": {
            "names": [
              "Number"
            ]
          },
          "optional": true,
          "defaultvalue": 20,
          "description": "The maximum number of results to return that match search criteria. Search will continue operating until it returns this number of results or it reached the end of history. Limit will be ignored in case if both 'start' and 'end' timetokens has been passed in search configuration.",
          "name": "config.limit"
        },
        {
          "type": {
            "names": [
              "Number"
            ]
          },
          "optional": true,
          "defaultvalue": 100,
          "description": "The maximum number of messages which can be fetched with single history request.",
          "name": "config.count"
        },
        {
          "type": {
            "names": [
              "Number"
            ]
          },
          "optional": true,
          "defaultvalue": 0,
          "description": "The timetoken to begin searching between.",
          "name": "config.start"
        },
        {
          "type": {
            "names": [
              "Number"
            ]
          },
          "optional": true,
          "defaultvalue": 0,
          "description": "The timetoken to end searching between.",
          "name": "config.end"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "defaultvalue": false,
          "description": "Search oldest messages first.",
          "name": "config.reverse"
        }
      ],
      "returns": [
        {
          "type": {
            "names": [
              "Search"
            ]
          }
        }
      ],
      "examples": [
        "chat.search({\n        event: 'my-custom-event',\n        sender: ChatEngine.me,\n        limit: 20\n    }).on('my-custom-event', (event) => {\n        console.log('this is an old event!', event);\n    }).on('$.search.finish', () => {\n        console.log('we have all our results!')\n    });"
      ],
      "name": "search",
      "longname": "Chat#search",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "___id": "T000002R000208",
      "___s": true
    },
    {
      "comment": "/**\n     * Fired when the chat first connects to network.\n     * @private\n     */",
      "meta": {
        "range": [
          20619,
          21844
        ],
        "filename": "chat.js",
        "lineno": 617,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002450",
          "name": "Chat#connectionReady",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Fired when the chat first connects to network.",
      "access": "private",
      "name": "connectionReady",
      "longname": "Chat#connectionReady",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000209",
      "___s": true
    },
    {
      "comment": "/**\n         * Broadcast that the {@link Chat} is connected to the network.\n         * @event Chat#$\".\"connected\n         * @example\n         * chat.on('$.connected', () => {\n         *     console.log('chat is ready to go!');\n         * });\n         */",
      "meta": {
        "filename": "chat.js",
        "lineno": 622,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Broadcast that the {@link Chat} is connected to the network.",
      "kind": "event",
      "name": "$\".\"connected",
      "examples": [
        "chat.on('$.connected', () => {\n    console.log('chat is ready to go!');\n});"
      ],
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"connected",
      "scope": "instance",
      "___id": "T000002R000212",
      "___s": true
    },
    {
      "comment": "/**\n     * Ask PubNub for information about {@link User}s in this {@link Chat}.\n     */",
      "meta": {
        "range": [
          21942,
          22297
        ],
        "filename": "chat.js",
        "lineno": 665,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002577",
          "name": "Chat#getUserUpdates",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Ask PubNub for information about {@link User}s in this {@link Chat}.",
      "name": "getUserUpdates",
      "longname": "Chat#getUserUpdates",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000215",
      "___s": true
    },
    {
      "comment": "/**\n     * Establish authentication with the server, then subscribe with PubNub.\n     * @fires Chat#$\".\"ready\n     */",
      "meta": {
        "range": [
          22425,
          22657
        ],
        "filename": "chat.js",
        "lineno": 683,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002611",
          "name": "Chat#connect",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Establish authentication with the server, then subscribe with PubNub.",
      "fires": [
        "Chat#event:$\".\"ready"
      ],
      "name": "connect",
      "longname": "Chat#connect",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000219",
      "___s": true
    },
    {
      "comment": "/**\n     * Connect to PubNub servers to initialize the chat.\n     * @example\n     * // create a new chatroom, but don't connect to it automatically\n     * let chat = new Chat('some-chat', false)\n     *\n     * // connect to the chat when we feel like it\n     * chat.connect();\n     */",
      "meta": {
        "range": [
          22951,
          24779
        ],
        "filename": "chat.js",
        "lineno": 704,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002627",
          "name": "Chat#handshake",
          "type": "MethodDefinition",
          "paramnames": [
            "complete"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Connect to PubNub servers to initialize the chat.",
      "examples": [
        "// create a new chatroom, but don't connect to it automatically\nlet chat = new Chat('some-chat', false)\n\n// connect to the chat when we feel like it\nchat.connect();"
      ],
      "name": "handshake",
      "longname": "Chat#handshake",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000220",
      "___s": true
    },
    {
      "comment": "/**\n * @class Event\n * Represents an {@link Chat} event.\n * @fires $\".\"emitted\n * @extends Emitter\n * @extends RootEmitter\n */",
      "meta": {
        "range": [
          180,
          2559
        ],
        "filename": "event.js",
        "lineno": 10,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002827",
          "name": "Event",
          "type": "ClassDeclaration",
          "paramnames": [
            "chatEngine",
            "chat",
            "event"
          ]
        }
      },
      "kind": "class",
      "classdesc": "Event\nRepresents an {@link Chat} event.",
      "fires": [
        "event:$\".\"emitted"
      ],
      "augments": [
        "Emitter",
        "RootEmitter"
      ],
      "name": "Event",
      "longname": "Event",
      "scope": "global",
      "params": [],
      "___id": "T000002R000228",
      "___s": true
    },
    {
      "comment": "/**\n         * @private\n         */",
      "meta": {
        "range": [
          325,
          353
        ],
        "filename": "event.js",
        "lineno": 19,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002842",
          "name": "this.chatEngine",
          "type": "Identifier",
          "value": "chatEngine",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "chatEngine",
      "longname": "Event#chatEngine",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000230",
      "___s": true
    },
    {
      "comment": "/**\n         * The {@link Chat#channel} that this event is registered to.\n         * @type String\n         * @see [PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-)\n         * @readonly\n         */",
      "meta": {
        "range": [
          623,
          650
        ],
        "filename": "event.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002848",
          "name": "this.channel",
          "type": "MemberExpression",
          "value": "chat.channel",
          "paramnames": []
        }
      },
      "description": "The {@link Chat#channel} that this event is registered to.",
      "type": {
        "names": [
          "String"
        ]
      },
      "see": [
        "[PubNub Channels](https://support.pubnub.com/support/solutions/articles/14000045182-what-is-a-channel-)"
      ],
      "readonly": true,
      "name": "channel",
      "longname": "Event#channel",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000231",
      "___s": true
    },
    {
      "comment": "/**\n         * Events are always a property of a {@link Chat}. Responsible for\n         * listening to specific events and firing events when they occur.\n         * @readonly\n         * @type {Chat}\n         */",
      "meta": {
        "range": [
          880,
          896
        ],
        "filename": "event.js",
        "lineno": 35,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002856",
          "name": "this.chat",
          "type": "Identifier",
          "value": "chat",
          "paramnames": []
        }
      },
      "description": "Events are always a property of a {@link Chat}. Responsible for\nlistening to specific events and firing events when they occur.",
      "readonly": true,
      "type": {
        "names": [
          "Chat"
        ]
      },
      "name": "chat",
      "longname": "Event#chat",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000232",
      "___s": true
    },
    {
      "comment": "/**\n         * The string representation of the event. This is supplied as the first parameter to {@link Chat#on}\n         * @type {String}\n         */",
      "meta": {
        "range": [
          1067,
          1085
        ],
        "filename": "event.js",
        "lineno": 41,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002862",
          "name": "this.event",
          "type": "Identifier",
          "value": "event",
          "paramnames": []
        }
      },
      "description": "The string representation of the event. This is supplied as the first parameter to {@link Chat#on}",
      "type": {
        "names": [
          "String"
        ]
      },
      "name": "event",
      "longname": "Event#event",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000233",
      "___s": true
    },
    {
      "comment": "/**\n         * A name that identifies this class\n         * @type {String}\n         */",
      "meta": {
        "range": [
          1191,
          1210
        ],
        "filename": "event.js",
        "lineno": 47,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002868",
          "name": "this.name",
          "type": "Literal",
          "value": "Event",
          "paramnames": []
        }
      },
      "description": "A name that identifies this class",
      "type": {
        "names": [
          "String"
        ]
      },
      "name": "name",
      "longname": "Event#name",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000234",
      "___s": true
    },
    {
      "comment": "/**\n     Publishes the event over the PubNub network to the {@link Event} channel\n\n     @private\n     @param {Object} data The event payload object\n     */",
      "meta": {
        "range": [
          1406,
          2556
        ],
        "filename": "event.js",
        "lineno": 59,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100002875",
          "name": "Event#publish",
          "type": "MethodDefinition",
          "paramnames": [
            "m"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Publishes the event over the PubNub network to the {@link Event} channel",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "data"
        }
      ],
      "name": "publish",
      "longname": "Event#publish",
      "kind": "function",
      "memberof": "Event",
      "scope": "instance",
      "___id": "T000002R000235",
      "___s": true
    },
    {
      "comment": "/**\n                 * Message successfully published\n                 * @event Event#$\".\"emitted\"\n                 * @param {Object} data The message payload\n                 */",
      "meta": {
        "filename": "event.js",
        "lineno": 82,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Message successfully published",
      "kind": "event",
      "name": "$\".\"emitted\"",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The message payload",
          "name": "data"
        }
      ],
      "memberof": "Event",
      "longname": "Event#event:$\".\"emitted\"",
      "scope": "instance",
      "___id": "T000002R000243",
      "___s": true
    },
    {
      "comment": "/**\n                 * There was a problem publishing over the PubNub network.\n                 * @event Chat#$\".\"error\".\"publish\n                 */",
      "meta": {
        "filename": "event.js",
        "lineno": 91,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "There was a problem publishing over the PubNub network.",
      "kind": "event",
      "name": "$\".\"error\".\"publish",
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"error\".\"publish",
      "scope": "instance",
      "___id": "T000002R000244",
      "___s": true
    },
    {
      "comment": "/**\n Represents the client connection as a special {@link User} with write permissions.\n Has the ability to update it's state on the network. An instance of\n {@link Me} is returned by the ```ChatEngine.connect()```\n method.\n\n @class Me\n @extends User\n @extends Emitter\n @extends RootEmitter\n @param {String} uuid The uuid of this user\n */",
      "meta": {
        "filename": "me.js",
        "lineno": 3,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Represents the client connection as a special {@link User} with write permissions.\n Has the ability to update it's state on the network. An instance of\n {@link Me} is returned by the ```ChatEngine.connect()```\n method.",
      "kind": "class",
      "name": "Me",
      "augments": [
        "User",
        "Emitter",
        "RootEmitter"
      ],
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The uuid of this user",
          "name": "uuid"
        }
      ],
      "longname": "Me",
      "scope": "global",
      "___id": "T000002R000248",
      "___s": true
    },
    {
      "comment": "/**\n     * Update {@link Me}'s state in a {@link Chat}. All other {@link User}s\n     * will be notified of this change via ```$.state```.\n     * Retrieve state at any time with {@link User#state}.\n     * @param {Object} state The new state for {@link Me}\n     * @param {Chat} chat An instance of the {@link Chat} where state will be updated.\n     * Defaults to ```ChatEngine.global```.\n     * @fires Chat#event:$\".\"state\n     * @example\n     * // update state\n     * me.update({value: true});\n     */",
      "meta": {
        "range": [
          1291,
          1556
        ],
        "filename": "me.js",
        "lineno": 48,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003040",
          "name": "Me#update",
          "type": "MethodDefinition",
          "paramnames": [
            "state",
            "callback"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Update {@link Me}'s state in a {@link Chat}. All other {@link User}s\nwill be notified of this change via ```$.state```.\nRetrieve state at any time with {@link User#state}.",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The new state for {@link Me}",
          "name": "state"
        },
        {
          "type": {
            "names": [
              "Chat"
            ]
          },
          "description": "An instance of the {@link Chat} where state will be updated.\nDefaults to ```ChatEngine.global```.",
          "name": "chat"
        }
      ],
      "fires": [
        "Chat#event:$\".\"state"
      ],
      "examples": [
        "// update state\nme.update({value: true});"
      ],
      "name": "update",
      "longname": "Me#update",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "overrides": "User#update",
      "___id": "T000002R000255",
      "___s": true
    },
    {
      "comment": "/**\n     * assign updates from network\n     * @private\n     */",
      "meta": {
        "range": [
          1629,
          1721
        ],
        "filename": "me.js",
        "lineno": 61,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003066",
          "name": "Me#assign",
          "type": "MethodDefinition",
          "paramnames": [
            "state"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "assign updates from network",
      "access": "private",
      "name": "assign",
      "longname": "Me#assign",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "params": [],
      "overrides": "User#assign",
      "___id": "T000002R000256",
      "___s": true
    },
    {
      "comment": "/**\nReturned by {@link Chat#search}. This is our Search class which allows one to search the backlog of messages.\nPowered by [PubNub History](https://www.pubnub.com/docs/web-javascript/storage-and-history).\n@class Search\n@extends Emitter\n@extends RootEmitter\n@param {ChatEngine} chatEngine This instance of the {@link ChatEngine} object.\n@param {Chat} chat The {@link Chat} object to search.\n@param {Object} config The configuration object. See {@link Chat#search} for a list of parameters.\n*/",
      "meta": {
        "filename": "search.js",
        "lineno": 6,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Returned by {@link Chat#search}. This is our Search class which allows one to search the backlog of messages.\nPowered by [PubNub History](https://www.pubnub.com/docs/web-javascript/storage-and-history).",
      "kind": "class",
      "name": "Search",
      "augments": [
        "Emitter",
        "RootEmitter"
      ],
      "params": [
        {
          "type": {
            "names": [
              "ChatEngine"
            ]
          },
          "description": "This instance of the {@link ChatEngine} object.",
          "name": "chatEngine"
        },
        {
          "type": {
            "names": [
              "Chat"
            ]
          },
          "description": "The {@link Chat} object to search.",
          "name": "chat"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The configuration object. See {@link Chat#search} for a list of parameters.",
          "name": "config"
        }
      ],
      "longname": "Search",
      "scope": "global",
      "___id": "T000002R000262",
      "___s": true
    },
    {
      "comment": "/**\n        Handy property to identify what this class is.\n        @type String\n        */",
      "meta": {
        "range": [
          960,
          980
        ],
        "filename": "search.js",
        "lineno": 28,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003133",
          "name": "this.name",
          "type": "Literal",
          "value": "Search",
          "paramnames": []
        }
      },
      "description": "Handy property to identify what this class is.",
      "type": {
        "names": [
          "String"
        ]
      },
      "name": "name",
      "longname": "Search#name",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000266",
      "___s": true
    },
    {
      "comment": "/**\n        The {@link Chat} used for searching.\n        @type Chat\n        */",
      "meta": {
        "range": [
          1078,
          1094
        ],
        "filename": "search.js",
        "lineno": 34,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003139",
          "name": "this.chat",
          "type": "Identifier",
          "value": "chat",
          "paramnames": []
        }
      },
      "description": "The {@link Chat} used for searching.",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "name": "chat",
      "longname": "Search#chat",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000267",
      "___s": true
    },
    {
      "comment": "/**\n        An object containing configuration parameters supplied by {@link Chat#search}. See {@link Chat#search} for possible parameters.\n        @type {Object}\n        */",
      "meta": {
        "range": [
          1287,
          1307
        ],
        "filename": "search.js",
        "lineno": 40,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003145",
          "name": "this.config",
          "type": "Identifier",
          "value": "config",
          "paramnames": []
        }
      },
      "description": "An object containing configuration parameters supplied by {@link Chat#search}. See {@link Chat#search} for possible parameters.",
      "type": {
        "names": [
          "Object"
        ]
      },
      "name": "config",
      "longname": "Search#config",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000268",
      "___s": true
    },
    {
      "comment": "/** @private */",
      "meta": {
        "range": [
          1682,
          1714
        ],
        "filename": "search.js",
        "lineno": 50,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003229",
          "name": "this.maxPage",
          "type": "MemberExpression",
          "value": "this.config.pages",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "maxPage",
      "longname": "Search#maxPage",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000276",
      "___s": true
    },
    {
      "comment": "/** @private */",
      "meta": {
        "range": [
          1748,
          1764
        ],
        "filename": "search.js",
        "lineno": 52,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003239",
          "name": "this.numPage",
          "type": "Literal",
          "value": 0,
          "paramnames": []
        }
      },
      "access": "private",
      "name": "numPage",
      "longname": "Search#numPage",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000277",
      "___s": true
    },
    {
      "comment": "/** @private */",
      "meta": {
        "range": [
          1799,
          1840
        ],
        "filename": "search.js",
        "lineno": 55,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003245",
          "name": "this.referenceDate",
          "type": "LogicalExpression",
          "value": "",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "referenceDate",
      "longname": "Search#referenceDate",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000278",
      "___s": true
    },
    {
      "comment": "/**\n         * Flag which represent whether there is potentially more data available in {@link Chat} history. This flag can\n         * be used for conditional call of {@link Chat#search}.\n         * @type {boolean}\n         */",
      "meta": {
        "range": [
          2086,
          2105
        ],
        "filename": "search.js",
        "lineno": 62,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003257",
          "name": "this.hasMore",
          "type": "Literal",
          "value": true,
          "paramnames": []
        }
      },
      "description": "Flag which represent whether there is potentially more data available in {@link Chat} history. This flag can\nbe used for conditional call of {@link Chat#search}.",
      "type": {
        "names": [
          "boolean"
        ]
      },
      "name": "hasMore",
      "longname": "Search#hasMore",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000279",
      "___s": true
    },
    {
      "comment": "/** @private */",
      "meta": {
        "range": [
          2139,
          2220
        ],
        "filename": "search.js",
        "lineno": 64,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003263",
          "name": "this.messagesBetweenTimetokens",
          "type": "LogicalExpression",
          "value": "",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "messagesBetweenTimetokens",
      "longname": "Search#messagesBetweenTimetokens",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000280",
      "___s": true
    },
    {
      "comment": "/** @private */",
      "meta": {
        "range": [
          2254,
          2274
        ],
        "filename": "search.js",
        "lineno": 66,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003283",
          "name": "this.needleCount",
          "type": "Literal",
          "value": 0,
          "paramnames": []
        }
      },
      "access": "private",
      "name": "needleCount",
      "longname": "Search#needleCount",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000281",
      "___s": true
    },
    {
      "comment": "/**\n         * Call PubNub history in a loop.\n         * @private\n         */",
      "meta": {
        "range": [
          2371,
          4230
        ],
        "filename": "search.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003289",
          "name": "this.page",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "pageDone"
          ]
        },
        "vars": {
          "searchConfiguration": "Search#page~searchConfiguration",
          "": null
        }
      },
      "description": "Call PubNub history in a loop.",
      "access": "private",
      "name": "page",
      "longname": "Search#page",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000282",
      "___s": true
    },
    {
      "comment": "/**\n             * Requesting another page from PubNub History.\n             * @event Search#$\".\"page\".\"request\n             */",
      "meta": {
        "filename": "search.js",
        "lineno": 77,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Requesting another page from PubNub History.",
      "kind": "event",
      "name": "$\".\"page\".\"request",
      "memberof": "Search",
      "longname": "Search#event:$\".\"page\".\"request",
      "scope": "instance",
      "___id": "T000002R000285",
      "___s": true
    },
    {
      "comment": "/**\n                 * PubNub History returned a response.\n                 * @event Search#$\".\"page\".\"response\n                 */",
      "meta": {
        "filename": "search.js",
        "lineno": 85,
        "columnno": 16,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "PubNub History returned a response.",
      "kind": "event",
      "name": "$\".\"page\".\"response",
      "memberof": "Search",
      "longname": "Search#event:$\".\"page\".\"response",
      "scope": "instance",
      "___id": "T000002R000286",
      "___s": true
    },
    {
      "comment": "/**\n                     * There was a problem fetching the history of this chat\n                     * @event Chat#$\".\"error\".\"history\n                     */",
      "meta": {
        "filename": "search.js",
        "lineno": 93,
        "columnno": 20,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "There was a problem fetching the history of this chat",
      "kind": "event",
      "name": "$\".\"error\".\"history",
      "memberof": "Chat",
      "longname": "Chat#event:$\".\"error\".\"history",
      "scope": "instance",
      "___id": "T000002R000287",
      "___s": true
    },
    {
      "comment": "/**\n         * @private\n         */",
      "meta": {
        "range": [
          4285,
          4780
        ],
        "filename": "search.js",
        "lineno": 119,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003471",
          "name": "this.triggerHistory",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "message",
            "cb"
          ]
        },
        "vars": {
          "message.entry.timetoken": "message.entry.timetoken",
          "": null
        }
      },
      "access": "private",
      "name": "triggerHistory",
      "longname": "Search#triggerHistory",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000293",
      "___s": true
    },
    {
      "comment": "/**\n         * @private\n         */",
      "meta": {
        "range": [
          5086,
          6156
        ],
        "filename": "search.js",
        "lineno": 156,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003576",
          "name": "this.find",
          "type": "ArrowFunctionExpression",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "access": "private",
      "name": "find",
      "longname": "Search#find",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "___id": "T000002R000298",
      "___s": true
    },
    {
      "comment": "/**\n                         * Search has returned all results or reached the end of history.\n                         * @event Search#$\".\"search\".\"finish\n                         */",
      "meta": {
        "filename": "search.js",
        "lineno": 173,
        "columnno": 24,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Search has returned all results or reached the end of history.",
      "kind": "event",
      "name": "$\".\"search\".\"finish",
      "memberof": "Search",
      "longname": "Search#event:$\".\"search\".\"finish",
      "scope": "instance",
      "___id": "T000002R000301",
      "___s": true
    },
    {
      "comment": "/**\n         * Search has started.\n         * @event Search#$\".\"search\".\"start\n         */",
      "meta": {
        "filename": "search.js",
        "lineno": 195,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Search has started.",
      "kind": "event",
      "name": "$\".\"search\".\"start",
      "memberof": "Search",
      "longname": "Search#event:$\".\"search\".\"start",
      "scope": "instance",
      "___id": "T000002R000302",
      "___s": true
    },
    {
      "comment": "/**\n         * Stores a map of {@link Chat} objects that this {@link Me} has joined across all clients.\n         * @type {Object}\n         */",
      "meta": {
        "range": [
          369,
          384
        ],
        "filename": "session.js",
        "lineno": 17,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003781",
          "name": "this.chats",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores a map of {@link Chat} objects that this {@link Me} has joined across all clients.",
      "type": {
        "names": [
          "Object"
        ]
      },
      "name": "chats",
      "longname": "Session#chats",
      "kind": "member",
      "memberof": "Session",
      "scope": "instance",
      "___id": "T000002R000309",
      "___s": true
    },
    {
      "comment": "/**\n         * The {@link Chat} that syncs session between instances. Only connects\n         * if \"enableSync\" has been set to true in ceConfig.\n         * @type {this}\n         */",
      "meta": {
        "range": [
          584,
          600
        ],
        "filename": "session.js",
        "lineno": 24,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003787",
          "name": "this.sync",
          "type": "Literal",
          "value": null,
          "paramnames": []
        }
      },
      "description": "The {@link Chat} that syncs session between instances. Only connects\nif \"enableSync\" has been set to true in ceConfig.",
      "type": {
        "names": [
          "this"
        ]
      },
      "name": "sync",
      "longname": "Session#sync",
      "kind": "member",
      "memberof": "Session",
      "scope": "instance",
      "___id": "T000002R000310",
      "___s": true
    },
    {
      "comment": "/**\n     * Forwards sync events from other instances into callback functions\n     * @private\n     */",
      "meta": {
        "range": [
          719,
          1259
        ],
        "filename": "session.js",
        "lineno": 32,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003792",
          "name": "Session#subscribe",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Forwards sync events from other instances into callback functions",
      "access": "private",
      "name": "subscribe",
      "longname": "Session#subscribe",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000311",
      "___s": true
    },
    {
      "comment": "/**\n     * Uses PubNub channel groups to restore a session for this uuid\n     * @private\n     */",
      "meta": {
        "range": [
          1366,
          3056
        ],
        "filename": "session.js",
        "lineno": 51,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100003881",
          "name": "Session#restore",
          "type": "MethodDefinition",
          "paramnames": []
        },
        "vars": {
          "": null
        }
      },
      "description": "Uses PubNub channel groups to restore a session for this uuid",
      "access": "private",
      "name": "restore",
      "longname": "Session#restore",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000313",
      "___s": true
    },
    {
      "comment": "/**\n                        Fired when session has been restored at boot. Fired once per\n                        session group.\n                        @event Me#$\".\"session\".\"group\".\"restored\n                        */",
      "meta": {
        "filename": "session.js",
        "lineno": 82,
        "columnno": 24,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired when session has been restored at boot. Fired once per\n                        session group.",
      "kind": "event",
      "name": "$\".\"session\".\"group\".\"restored",
      "memberof": "Me",
      "longname": "Me#event:$\".\"session\".\"group\".\"restored",
      "scope": "instance",
      "___id": "T000002R000321",
      "___s": true
    },
    {
      "comment": "/**\n     * Callback fired when another instance has joined a chat\n     * @private\n     */",
      "meta": {
        "range": [
          3156,
          3427
        ],
        "filename": "session.js",
        "lineno": 103,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004003",
          "name": "Session#join",
          "type": "MethodDefinition",
          "paramnames": [
            "chat"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Callback fired when another instance has joined a chat",
      "access": "private",
      "name": "join",
      "longname": "Session#join",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000323",
      "___s": true
    },
    {
      "comment": "/**\n     * Callback fired when another instance has left a chat\n     * @private\n     */",
      "meta": {
        "range": [
          3525,
          3630
        ],
        "filename": "session.js",
        "lineno": 116,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004045",
          "name": "Session#leave",
          "type": "MethodDefinition",
          "paramnames": [
            "chat"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Callback fired when another instance has left a chat",
      "access": "private",
      "name": "leave",
      "longname": "Session#leave",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000325",
      "___s": true
    },
    {
      "comment": "/**\n    Stores {@link Chat} within ```ChatEngine.session``` keyed based on the ```chat.group``` property.\n    @param {Object} chat JSON object representing {@link Chat}. Originally supplied via {@link Chat#objectify}.\n    @private\n    */",
      "meta": {
        "range": [
          3878,
          5452
        ],
        "filename": "session.js",
        "lineno": 125,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004064",
          "name": "Session#onJoin",
          "type": "MethodDefinition",
          "paramnames": [
            "chat"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Stores {@link Chat} within ```ChatEngine.session``` keyed based on the ```chat.group``` property.",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "JSON object representing {@link Chat}. Originally supplied via {@link Chat#objectify}.",
          "name": "chat"
        }
      ],
      "access": "private",
      "name": "onJoin",
      "longname": "Session#onJoin",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "___id": "T000002R000327",
      "___s": true
    },
    {
      "comment": "/**\n            Fired when another identical instance of {@link ChatEngine} and {@link Me} joins a {@link Chat} that this instance of {@link ChatEngine} is unaware of.\n            Used to synchronize ChatEngine sessions between desktop and mobile, duplicate windows, etc.\n            ChatEngine stores sessions on the server side identified by {@link User#uuid}.\n            @event Me#$\".\"session\".\"chat\".\"join\n            @example\n            *\n            * // Logged in as \"Ian\" in first window\n            * ChatEngine.me.session.on('$.chat.join', (data) => {\n            *     console.log('I joined a new chat in a second window!', data.chat);\n            * });\n            *\n            * // Logged in as \"Ian\" in second window\n            * new ChatEngine.Chat('another-chat');\n            */",
      "meta": {
        "filename": "session.js",
        "lineno": 143,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired when another identical instance of {@link ChatEngine} and {@link Me} joins a {@link Chat} that this instance of {@link ChatEngine} is unaware of.\n            Used to synchronize ChatEngine sessions between desktop and mobile, duplicate windows, etc.\n            ChatEngine stores sessions on the server side identified by {@link User#uuid}.",
      "kind": "event",
      "name": "$\".\"session\".\"chat\".\"join",
      "examples": [
        "// Logged in as \"Ian\" in first window\nChatEngine.me.session.on('$.chat.join', (data) => {\n    console.log('I joined a new chat in a second window!', data.chat);\n});\n\n// Logged in as \"Ian\" in second window\nnew ChatEngine.Chat('another-chat');"
      ],
      "memberof": "Me",
      "longname": "Me#event:$\".\"session\".\"chat\".\"join",
      "scope": "instance",
      "___id": "T000002R000332",
      "___s": true
    },
    {
      "comment": "/**\n    Removes {@link Chat} within this.chats\n    @private\n    */",
      "meta": {
        "range": [
          5529,
          6102
        ],
        "filename": "session.js",
        "lineno": 168,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004168",
          "name": "Session#onleave",
          "type": "MethodDefinition",
          "paramnames": [
            "chat"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Removes {@link Chat} within this.chats",
      "access": "private",
      "name": "onleave",
      "longname": "Session#onleave",
      "kind": "function",
      "memberof": "Session",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000334",
      "___s": true
    },
    {
      "comment": "/**\n            * Fired when another identical instance of {@link ChatEngine} with an identical {@link Me} leaves a {@link Chat} via {@link Chat#leave}.\n            * @event Me#$\".\"session\".\"chat\".\"leave\n            */",
      "meta": {
        "filename": "session.js",
        "lineno": 174,
        "columnno": 12,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "Fired when another identical instance of {@link ChatEngine} with an identical {@link Me} leaves a {@link Chat} via {@link Chat#leave}.",
      "kind": "event",
      "name": "$\".\"session\".\"chat\".\"leave",
      "memberof": "Me",
      "longname": "Me#event:$\".\"session\".\"chat\".\"leave",
      "scope": "instance",
      "___id": "T000002R000336",
      "___s": true
    },
    {
      "comment": "/**\nThis is our User class which represents a connected client. User's are automatically created and managed by {@link Chat}s, but you can also instantiate them yourself.\nIf a User has been created but has never been authenticated, you will recieve 403s when connecting to their feed or direct Chats.\n@class User\n@extends Emitter\n@extends RootEmitter\n@param {User#uuid} uuid A unique identifier for this user.\n@param {User#state} state The {@link User}'s state object synchronized between all clients of the chat.\n */",
      "meta": {
        "filename": "user.js",
        "lineno": 3,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {}
      },
      "description": "This is our User class which represents a connected client. User's are automatically created and managed by {@link Chat}s, but you can also instantiate them yourself.\nIf a User has been created but has never been authenticated, you will recieve 403s when connecting to their feed or direct Chats.",
      "kind": "class",
      "name": "User",
      "augments": [
        "Emitter",
        "RootEmitter"
      ],
      "params": [
        {
          "type": {
            "names": [
              "User#uuid"
            ]
          },
          "description": "A unique identifier for this user.",
          "name": "uuid"
        },
        {
          "type": {
            "names": [
              "User#state"
            ]
          },
          "description": "The {@link User}'s state object synchronized between all clients of the chat.",
          "name": "state"
        }
      ],
      "longname": "User",
      "scope": "global",
      "___id": "T000002R000340",
      "___s": true
    },
    {
      "comment": "/**\n         The User's unique identifier, usually a device uuid. This helps ChatEngine identify the user between events. This is public id exposed to the network.\n         Check out [the wikipedia page on UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier).\n\n         @readonly\n         @type String\n         */",
      "meta": {
        "range": [
          1076,
          1103
        ],
        "filename": "user.js",
        "lineno": 29,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004286",
          "name": "this.uuid",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "The User's unique identifier, usually a device uuid. This helps ChatEngine identify the user between events. This is public id exposed to the network.\n         Check out [the wikipedia page on UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier).",
      "readonly": true,
      "type": {
        "names": [
          "String"
        ]
      },
      "name": "uuid",
      "longname": "User#uuid",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "___id": "T000002R000345",
      "___s": true
    },
    {
      "comment": "/**\n         * Gets the user state. See {@link Me#update} for how to assign state values.\n         * @return {Object} Returns a generic JSON object containing state information.\n         * @example\n         *\n         * // State\n         * let state = user.state;\n         */",
      "meta": {
        "range": [
          1398,
          1416
        ],
        "filename": "user.js",
        "lineno": 39,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004295",
          "name": "this.state",
          "type": "Identifier",
          "value": "state",
          "paramnames": []
        }
      },
      "description": "Gets the user state. See {@link Me#update} for how to assign state values.",
      "returns": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "Returns a generic JSON object containing state information."
        }
      ],
      "examples": [
        "// State\nlet state = user.state;"
      ],
      "name": "state",
      "longname": "User#state",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "___id": "T000002R000346",
      "___s": true
    },
    {
      "comment": "/**\n         * Feed is a Chat that only streams things a User does, like\n         * 'startTyping' or 'idle' events for example. Anybody can subscribe\n         * to a User's feed, but only the User can publish to it. Users will\n         * not be able to converse in this channel.\n         *\n         * @type Chat\n         * @example\n         * // me\n         * me.feed.emit('update', 'I may be away from my computer right now');\n         *\n         * // another instance\n         * them.feed.connect();\n         * them.feed.on('update', (payload) => {})\n         */",
      "meta": {
        "range": [
          2158,
          2317
        ],
        "filename": "user.js",
        "lineno": 60,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004307",
          "name": "this.feed",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Feed is a Chat that only streams things a User does, like\n'startTyping' or 'idle' events for example. Anybody can subscribe\nto a User's feed, but only the User can publish to it. Users will\nnot be able to converse in this channel.",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "examples": [
        "// me\nme.feed.emit('update', 'I may be away from my computer right now');\n\n// another instance\nthem.feed.connect();\nthem.feed.on('update', (payload) => {})"
      ],
      "name": "feed",
      "longname": "User#feed",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "___id": "T000002R000348",
      "___s": true
    },
    {
      "comment": "/**\n         * Direct is a private channel that anybody can publish to but only\n         * the user can subscribe to. Great for pushing notifications or\n         * inviting to other chats. Users will not be able to communicate\n         * with one another inside of this chat. Check out the\n         * {@link Chat#invite} method for private chats utilizing\n         * {@link User#direct}.\n         *\n         * @type Chat\n         * @example\n         * // me\n         * me.direct.on('private-message', (payload) -> {\n        *     console.log(payload.sender.uuid, 'sent your a direct message');\n        * });\n         *\n         * // another instance\n         * them.direct.connect();\n         * them.direct.emit('private-message', {secret: 42});\n         */",
      "meta": {
        "range": [
          3094,
          3258
        ],
        "filename": "user.js",
        "lineno": 81,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004342",
          "name": "this.direct",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Direct is a private channel that anybody can publish to but only\nthe user can subscribe to. Great for pushing notifications or\ninviting to other chats. Users will not be able to communicate\nwith one another inside of this chat. Check out the\n{@link Chat#invite} method for private chats utilizing\n{@link User#direct}.",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "examples": [
        "// me\nme.direct.on('private-message', (payload) -> {\n    console.log(payload.sender.uuid, 'sent your a direct message');\n});\n\n// another instance\nthem.direct.connect();\nthem.direct.emit('private-message', {secret: 42});"
      ],
      "name": "direct",
      "longname": "User#direct",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "___id": "T000002R000349",
      "___s": true
    },
    {
      "comment": "/**\n     this is only called from network updates\n     @private\n     */",
      "meta": {
        "range": [
          3715,
          3864
        ],
        "filename": "user.js",
        "lineno": 102,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004409",
          "name": "User#assign",
          "type": "MethodDefinition",
          "paramnames": [
            "state"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "this is only called from network updates",
      "access": "private",
      "name": "assign",
      "longname": "User#assign",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000351",
      "___s": true
    },
    {
      "comment": "/**\n     * @private\n     * @param {Object} state The new state for the user\n     */",
      "meta": {
        "range": [
          3958,
          4007
        ],
        "filename": "user.js",
        "lineno": 115,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004439",
          "name": "User#update",
          "type": "MethodDefinition",
          "paramnames": [
            "state"
          ]
        },
        "vars": {
          "": null
        }
      },
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The new state for the user",
          "name": "state"
        }
      ],
      "name": "update",
      "longname": "User#update",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "___id": "T000002R000355",
      "___s": true
    },
    {
      "comment": "/**\n    Get stored user state from remote server.\n    @private\n    */",
      "meta": {
        "range": [
          4087,
          4543
        ],
        "filename": "user.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004450",
          "name": "User#_getStoredState",
          "type": "MethodDefinition",
          "paramnames": [
            "callback"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Get stored user state from remote server.",
      "access": "private",
      "name": "_getStoredState",
      "longname": "User#_getStoredState",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "params": [],
      "___id": "T000002R000356",
      "___s": true
    },
    {
      "comment": "/**\nGlobal object used to create an instance of {@link ChatEngine}.\n\n@alias ChatEngineCore\n@param pnConfig {Object} ChatEngine is based off PubNub. Supply your PubNub configuration parameters here. See the getting started tutorial and [the PubNub docs](https://www.pubnub.com/docs/web-javascript/api-reference-configuration).\n@param ceConfig {Object} A list of ChatEngine specific configuration options.\n@param [ceConfig.globalChannel=chat-engine] {String} The root channel. See {@link ChatEngine.global}\n@param [ceConfig.enableSync] {Boolean} Synchronizes chats between instances with the same {@link Me#uuid}. See {@link Me#sync}.\n@param [ceConfig.enableMeta] {Boolean} Persists {@link Chat#meta} on the server. See {@link Chat#update}.\n@param [ceConfig.throwErrors=true] {Boolean} Throws errors in JS console.\n@param [ceConfig.endpoint='https://pubsub.pubnub.com/v1/blocks/sub-key/YOUR_SUB_KEY/chat-engine-server'] {String} The root URL of the server used to manage permissions for private channels. Set by default to match the PubNub functions deployed to your account. See {@tutorial privacy} for more.\n@param [ceConfig.debug] {Boolean} Logs all ChatEngine events to the console This should not be enabled in production.\n@param [ceConfig.profile] {Boolean} Sums event counts and outputs a table to the console every few seconds.\n@return {ChatEngine} Returns an instance of {@link ChatEngine}\n@example\nChatEngine = ChatEngineCore.create({\n    publishKey: 'YOUR_PUB_KEY',\n    subscribeKey: 'YOUR_SUB_KEY'\n});\n*/",
      "meta": {
        "range": [
          1560,
          2354
        ],
        "filename": "index.js",
        "lineno": 24,
        "columnno": 6,
        "path": "/Users/ian/Development/chat-engine/src",
        "code": {
          "id": "astnode100004534",
          "name": "create",
          "type": "ArrowFunctionExpression"
        },
        "vars": {
          "ceConfig.globalChannel": "ceConfig.globalChannel",
          "ceConfig.throwErrors": "ceConfig.throwErrors",
          "ceConfig.enableSync": "ceConfig.enableSync",
          "ceConfig.enableMeta": "ceConfig.enableMeta",
          "ceConfig.endpoint": "ceConfig.endpoint",
          "pnConfig.heartbeatInterval": "pnConfig.heartbeatInterval"
        }
      },
      "description": "Global object used to create an instance of {@link ChatEngine}.",
      "alias": "ChatEngineCore",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "ChatEngine is based off PubNub. Supply your PubNub configuration parameters here. See the getting started tutorial and [the PubNub docs](https://www.pubnub.com/docs/web-javascript/api-reference-configuration).",
          "name": "pnConfig"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "A list of ChatEngine specific configuration options.",
          "name": "ceConfig"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "optional": true,
          "defaultvalue": "chat-engine",
          "description": "The root channel. See {@link ChatEngine.global}",
          "name": "ceConfig.globalChannel"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "description": "Synchronizes chats between instances with the same {@link Me#uuid}. See {@link Me#sync}.",
          "name": "ceConfig.enableSync"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "description": "Persists {@link Chat#meta} on the server. See {@link Chat#update}.",
          "name": "ceConfig.enableMeta"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "defaultvalue": true,
          "description": "Throws errors in JS console.",
          "name": "ceConfig.throwErrors"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "optional": true,
          "defaultvalue": "'https://pubsub.pubnub.com/v1/blocks/sub-key/YOUR_SUB_KEY/chat-engine-server'",
          "description": "The root URL of the server used to manage permissions for private channels. Set by default to match the PubNub functions deployed to your account. See {@tutorial privacy} for more.",
          "name": "ceConfig.endpoint"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "description": "Logs all ChatEngine events to the console This should not be enabled in production.",
          "name": "ceConfig.debug"
        },
        {
          "type": {
            "names": [
              "Boolean"
            ]
          },
          "optional": true,
          "description": "Sums event counts and outputs a table to the console every few seconds.",
          "name": "ceConfig.profile"
        }
      ],
      "returns": [
        {
          "type": {
            "names": [
              "ChatEngine"
            ]
          },
          "description": "Returns an instance of {@link ChatEngine}"
        }
      ],
      "examples": [
        "ChatEngine = ChatEngineCore.create({\n    publishKey: 'YOUR_PUB_KEY',\n    subscribeKey: 'YOUR_SUB_KEY'\n});"
      ],
      "name": "ChatEngineCore",
      "longname": "ChatEngineCore",
      "kind": "function",
      "scope": "global",
      "___id": "T000002R000360",
      "___s": true
    },
    {
      "comment": "/**\n An ChatEngine generic emitter that supports plugins and duplicates\n events on the root emitter.\n @class Emitter\n @extends RootEmitter\n */",
      "meta": {
        "filename": "emitter.js",
        "lineno": 6,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {}
      },
      "description": "An ChatEngine generic emitter that supports plugins and duplicates\n events on the root emitter.",
      "kind": "class",
      "name": "Emitter",
      "augments": [
        "RootEmitter"
      ],
      "longname": "Emitter",
      "scope": "global",
      "___id": "T000002R000377",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "Emitter#plugins",
      "kind": "member",
      "memberof": "Emitter",
      "scope": "instance",
      "___id": "T000002R000382",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "Emitter#_dataset",
      "kind": "member",
      "memberof": "Emitter",
      "scope": "instance",
      "___id": "T000002R000383",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "Emitter#_emit",
      "kind": "function",
      "memberof": "Emitter",
      "scope": "instance",
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000384",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "Emitter#on",
      "memberof": "Emitter",
      "scope": "instance",
      "overrides": "RootEmitter#on",
      "___id": "T000002R000385",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "Emitter#plugin",
      "kind": "function",
      "memberof": "Emitter",
      "scope": "instance",
      "___id": "T000002R000396",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "Emitter#trigger",
      "kind": "function",
      "memberof": "Emitter",
      "scope": "instance",
      "___id": "T000002R000399",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "Emitter#runPluginQueue",
      "kind": "function",
      "memberof": "Emitter",
      "scope": "instance",
      "___id": "T000002R000400",
      "___s": true
    },
    {
      "comment": "/**\n* The {@link ChatEngine} object is a RootEmitter. Configures an event emitter that other ChatEngine objects inherit. Adds shortcut methods for\n* ```this.on()```, ```this.emit()```, etc.\n* @class RootEmitter\n*/",
      "meta": {
        "filename": "root_emitter.js",
        "lineno": 6,
        "columnno": 0,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {}
      },
      "description": "The {@link ChatEngine} object is a RootEmitter. Configures an event emitter that other ChatEngine objects inherit. Adds shortcut methods for\n```this.on()```, ```this.emit()```, etc.",
      "kind": "class",
      "name": "RootEmitter",
      "longname": "RootEmitter",
      "scope": "global",
      "___id": "T000002R000405",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "RootEmitter#events",
      "kind": "member",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000408",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "RootEmitter#emitter",
      "kind": "member",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000410",
      "___s": true
    },
    {
      "comment": "/**\n        Private emit method that broadcasts the event to listeners on this page.\n\n        @private\n        @param {String} event The event name\n        @param {Object} the event payload\n        */",
      "meta": {
        "range": [
          1124,
          1173
        ],
        "filename": "root_emitter.js",
        "lineno": 44,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005229",
          "name": "this._emit",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Private emit method that broadcasts the event to listeners on this page.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "event payload",
          "name": "the"
        }
      ],
      "name": "_emit",
      "longname": "RootEmitter#_emit",
      "kind": "member",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000415",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "RootEmitter#_on",
      "kind": "member",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000416",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n        * @method\n        * @param {String} event The event name\n        * @param {Function} cb The function to run when the event is emitted\n        * @example\n        *\n        * // Get notified whenever someone joins the room\n        * object.on('event', (payload) => {\n        *     console.log('event was fired').\n        * })\n        *\n        * // Get notified of event.a and event.b\n        * object.on('event.*', (payload) => {\n        *     console.log('event.a or event.b was fired').;\n        * })\n        */",
      "meta": {
        "range": [
          2176,
          2354
        ],
        "filename": "root_emitter.js",
        "lineno": 73,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005261",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "RootEmitter#on",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000417",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "RootEmitter#off",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000418",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "RootEmitter#onAny",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000419",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "RootEmitter#once",
      "memberof": "RootEmitter",
      "scope": "instance",
      "___id": "T000002R000420",
      "___s": true
    },
    {
      "kind": "package",
      "longname": "package:undefined",
      "files": [
        "/Users/ian/Development/chat-engine/src/bootstrap.js",
        "/Users/ian/Development/chat-engine/src/components/chat.js",
        "/Users/ian/Development/chat-engine/src/components/event.js",
        "/Users/ian/Development/chat-engine/src/components/me.js",
        "/Users/ian/Development/chat-engine/src/components/search.js",
        "/Users/ian/Development/chat-engine/src/components/session.js",
        "/Users/ian/Development/chat-engine/src/components/user.js",
        "/Users/ian/Development/chat-engine/src/index.js",
        "/Users/ian/Development/chat-engine/src/modules/emitter.js",
        "/Users/ian/Development/chat-engine/src/modules/root_emitter.js",
        "/Users/ian/Development/chat-engine/src/plugins/augment/chat.js",
        "/Users/ian/Development/chat-engine/src/plugins/augment/sender.js",
        "/Users/ian/Development/chat-engine/src/plugins/filter/event.js",
        "/Users/ian/Development/chat-engine/src/plugins/filter/sender.js"
      ],
      "___id": "T000002R000442",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "Chat#plugins",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#plugins",
      "inherited": true,
      "___id": "T000002R000443",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "Chat#_dataset",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#_dataset",
      "inherited": true,
      "___id": "T000002R000444",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "Chat#_emit",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#_emit",
      "inherited": true,
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000445",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "Chat#on",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#on",
      "inherited": true,
      "overrides": "RootEmitter#on",
      "___id": "T000002R000446",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "Chat#plugin",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#plugin",
      "inherited": true,
      "___id": "T000002R000447",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "Chat#trigger",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#trigger",
      "inherited": true,
      "___id": "T000002R000448",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "Chat#runPluginQueue",
      "kind": "function",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "Emitter#runPluginQueue",
      "inherited": true,
      "___id": "T000002R000449",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "Chat#events",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "___id": "T000002R000450",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "Chat#emitter",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "___id": "T000002R000451",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "Chat#_on",
      "kind": "member",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "___id": "T000002R000452",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "Chat#off",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "___id": "T000002R000453",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "Chat#onAny",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "___id": "T000002R000454",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "Chat#once",
      "memberof": "Chat",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "___id": "T000002R000455",
      "___s": true
    },
    {
      "comment": "/**\n         The User's unique identifier, usually a device uuid. This helps ChatEngine identify the user between events. This is public id exposed to the network.\n         Check out [the wikipedia page on UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier).\n\n         @readonly\n         @type String\n         */",
      "meta": {
        "range": [
          1076,
          1103
        ],
        "filename": "user.js",
        "lineno": 29,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004286",
          "name": "this.uuid",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "The User's unique identifier, usually a device uuid. This helps ChatEngine identify the user between events. This is public id exposed to the network.\n         Check out [the wikipedia page on UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier).",
      "readonly": true,
      "type": {
        "names": [
          "String"
        ]
      },
      "name": "uuid",
      "longname": "Me#uuid",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "User#uuid",
      "inherited": true,
      "___id": "T000002R000456",
      "___s": true
    },
    {
      "comment": "/**\n         * Gets the user state. See {@link Me#update} for how to assign state values.\n         * @return {Object} Returns a generic JSON object containing state information.\n         * @example\n         *\n         * // State\n         * let state = user.state;\n         */",
      "meta": {
        "range": [
          1398,
          1416
        ],
        "filename": "user.js",
        "lineno": 39,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004295",
          "name": "this.state",
          "type": "Identifier",
          "value": "state",
          "paramnames": []
        }
      },
      "description": "Gets the user state. See {@link Me#update} for how to assign state values.",
      "returns": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "Returns a generic JSON object containing state information."
        }
      ],
      "examples": [
        "// State\nlet state = user.state;"
      ],
      "name": "state",
      "longname": "Me#state",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "User#state",
      "inherited": true,
      "___id": "T000002R000457",
      "___s": true
    },
    {
      "comment": "/**\n         * Feed is a Chat that only streams things a User does, like\n         * 'startTyping' or 'idle' events for example. Anybody can subscribe\n         * to a User's feed, but only the User can publish to it. Users will\n         * not be able to converse in this channel.\n         *\n         * @type Chat\n         * @example\n         * // me\n         * me.feed.emit('update', 'I may be away from my computer right now');\n         *\n         * // another instance\n         * them.feed.connect();\n         * them.feed.on('update', (payload) => {})\n         */",
      "meta": {
        "range": [
          2158,
          2317
        ],
        "filename": "user.js",
        "lineno": 60,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004307",
          "name": "this.feed",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Feed is a Chat that only streams things a User does, like\n'startTyping' or 'idle' events for example. Anybody can subscribe\nto a User's feed, but only the User can publish to it. Users will\nnot be able to converse in this channel.",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "examples": [
        "// me\nme.feed.emit('update', 'I may be away from my computer right now');\n\n// another instance\nthem.feed.connect();\nthem.feed.on('update', (payload) => {})"
      ],
      "name": "feed",
      "longname": "Me#feed",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "User#feed",
      "inherited": true,
      "___id": "T000002R000458",
      "___s": true
    },
    {
      "comment": "/**\n         * Direct is a private channel that anybody can publish to but only\n         * the user can subscribe to. Great for pushing notifications or\n         * inviting to other chats. Users will not be able to communicate\n         * with one another inside of this chat. Check out the\n         * {@link Chat#invite} method for private chats utilizing\n         * {@link User#direct}.\n         *\n         * @type Chat\n         * @example\n         * // me\n         * me.direct.on('private-message', (payload) -> {\n        *     console.log(payload.sender.uuid, 'sent your a direct message');\n        * });\n         *\n         * // another instance\n         * them.direct.connect();\n         * them.direct.emit('private-message', {secret: 42});\n         */",
      "meta": {
        "range": [
          3094,
          3258
        ],
        "filename": "user.js",
        "lineno": 81,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004342",
          "name": "this.direct",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Direct is a private channel that anybody can publish to but only\nthe user can subscribe to. Great for pushing notifications or\ninviting to other chats. Users will not be able to communicate\nwith one another inside of this chat. Check out the\n{@link Chat#invite} method for private chats utilizing\n{@link User#direct}.",
      "type": {
        "names": [
          "Chat"
        ]
      },
      "examples": [
        "// me\nme.direct.on('private-message', (payload) -> {\n    console.log(payload.sender.uuid, 'sent your a direct message');\n});\n\n// another instance\nthem.direct.connect();\nthem.direct.emit('private-message', {secret: 42});"
      ],
      "name": "direct",
      "longname": "Me#direct",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "User#direct",
      "inherited": true,
      "___id": "T000002R000459",
      "___s": true
    },
    {
      "comment": "/**\n    Get stored user state from remote server.\n    @private\n    */",
      "meta": {
        "range": [
          4087,
          4543
        ],
        "filename": "user.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/components",
        "code": {
          "id": "astnode100004450",
          "name": "User#_getStoredState",
          "type": "MethodDefinition",
          "paramnames": [
            "callback"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Get stored user state from remote server.",
      "access": "private",
      "name": "_getStoredState",
      "longname": "Me#_getStoredState",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "params": [],
      "inherits": "User#_getStoredState",
      "inherited": true,
      "___id": "T000002R000460",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "Me#plugins",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#plugins",
      "inherited": true,
      "___id": "T000002R000461",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "Me#_dataset",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#_dataset",
      "inherited": true,
      "___id": "T000002R000462",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "Me#_emit",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#_emit",
      "inherited": true,
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000463",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "Me#on",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#on",
      "inherited": true,
      "overrides": "RootEmitter#on",
      "___id": "T000002R000464",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "Me#plugin",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#plugin",
      "inherited": true,
      "___id": "T000002R000465",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "Me#trigger",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#trigger",
      "inherited": true,
      "___id": "T000002R000466",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "Me#runPluginQueue",
      "kind": "function",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "Emitter#runPluginQueue",
      "inherited": true,
      "___id": "T000002R000467",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "Me#events",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "___id": "T000002R000468",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "Me#emitter",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "___id": "T000002R000469",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "Me#_on",
      "kind": "member",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "___id": "T000002R000470",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "Me#off",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "___id": "T000002R000471",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "Me#onAny",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "___id": "T000002R000472",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "Me#once",
      "memberof": "Me",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "___id": "T000002R000473",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "User#plugins",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#plugins",
      "inherited": true,
      "___id": "T000002R000474",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "User#_dataset",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#_dataset",
      "inherited": true,
      "___id": "T000002R000475",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "User#_emit",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#_emit",
      "inherited": true,
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000476",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "User#on",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#on",
      "inherited": true,
      "overrides": "RootEmitter#on",
      "___id": "T000002R000477",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "User#plugin",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#plugin",
      "inherited": true,
      "___id": "T000002R000478",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "User#trigger",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#trigger",
      "inherited": true,
      "___id": "T000002R000479",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "User#runPluginQueue",
      "kind": "function",
      "memberof": "User",
      "scope": "instance",
      "inherits": "Emitter#runPluginQueue",
      "inherited": true,
      "___id": "T000002R000480",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "User#events",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "___id": "T000002R000481",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "User#emitter",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "___id": "T000002R000482",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "User#_on",
      "kind": "member",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "___id": "T000002R000483",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "User#off",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "___id": "T000002R000484",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "User#onAny",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "___id": "T000002R000485",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "User#once",
      "memberof": "User",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "___id": "T000002R000486",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "ChatEngine#events",
      "kind": "member",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "___id": "T000002R000487",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "ChatEngine#emitter",
      "kind": "member",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "___id": "T000002R000488",
      "___s": true
    },
    {
      "comment": "/**\n        Private emit method that broadcasts the event to listeners on this page.\n\n        @private\n        @param {String} event The event name\n        @param {Object} the event payload\n        */",
      "meta": {
        "range": [
          1124,
          1173
        ],
        "filename": "root_emitter.js",
        "lineno": 44,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005229",
          "name": "this._emit",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Private emit method that broadcasts the event to listeners on this page.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "event payload",
          "name": "the"
        }
      ],
      "name": "_emit",
      "longname": "ChatEngine#_emit",
      "kind": "member",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#_emit",
      "inherited": true,
      "___id": "T000002R000489",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "ChatEngine#_on",
      "kind": "member",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "___id": "T000002R000490",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n        * @method\n        * @param {String} event The event name\n        * @param {Function} cb The function to run when the event is emitted\n        * @example\n        *\n        * // Get notified whenever someone joins the room\n        * object.on('event', (payload) => {\n        *     console.log('event was fired').\n        * })\n        *\n        * // Get notified of event.a and event.b\n        * object.on('event.*', (payload) => {\n        *     console.log('event.a or event.b was fired').;\n        * })\n        */",
      "meta": {
        "range": [
          2176,
          2354
        ],
        "filename": "root_emitter.js",
        "lineno": 73,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005261",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "ChatEngine#on",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#on",
      "inherited": true,
      "___id": "T000002R000491",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "ChatEngine#off",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "___id": "T000002R000492",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "ChatEngine#onAny",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "___id": "T000002R000493",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "ChatEngine#once",
      "memberof": "ChatEngine",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "___id": "T000002R000494",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "Emitter#events",
      "kind": "member",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "___id": "T000002R000495",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "Emitter#emitter",
      "kind": "member",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "___id": "T000002R000496",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "Emitter#_on",
      "kind": "member",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "___id": "T000002R000497",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "Emitter#off",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "___id": "T000002R000498",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "Emitter#onAny",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "___id": "T000002R000499",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "Emitter#once",
      "memberof": "Emitter",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "___id": "T000002R000500",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "Event#plugins",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#plugins",
      "inherited": true,
      "___id": "T000002R000501",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "Event#_dataset",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#_dataset",
      "inherited": true,
      "___id": "T000002R000502",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "Event#_emit",
      "kind": "function",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#_emit",
      "inherited": true,
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000503",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "Event#on",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#on",
      "inherited": true,
      "overrides": "RootEmitter#on",
      "___id": "T000002R000504",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "Event#plugin",
      "kind": "function",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#plugin",
      "inherited": true,
      "___id": "T000002R000505",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "Event#trigger",
      "kind": "function",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#trigger",
      "inherited": true,
      "___id": "T000002R000506",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "Event#runPluginQueue",
      "kind": "function",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "Emitter#runPluginQueue",
      "inherited": true,
      "___id": "T000002R000507",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "Event#events",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "overrides": "RootEmitter#events",
      "___id": "T000002R000508",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "Event#emitter",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "overrides": "RootEmitter#emitter",
      "___id": "T000002R000509",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "Event#_on",
      "kind": "member",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "overrides": "RootEmitter#_on",
      "___id": "T000002R000510",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "Event#off",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "overrides": "RootEmitter#off",
      "___id": "T000002R000511",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "Event#onAny",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "overrides": "RootEmitter#onAny",
      "___id": "T000002R000512",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "Event#once",
      "memberof": "Event",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "overrides": "RootEmitter#once",
      "___id": "T000002R000513",
      "___s": true
    },
    {
      "comment": "/**\n         Stores a list of plugins bound to this object\n         @private\n         */",
      "meta": {
        "range": [
          605,
          622
        ],
        "filename": "emitter.js",
        "lineno": 26,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004711",
          "name": "this.plugins",
          "type": "ArrayExpression",
          "value": "[]",
          "paramnames": []
        }
      },
      "description": "Stores a list of plugins bound to this object",
      "access": "private",
      "name": "plugins",
      "longname": "Search#plugins",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#plugins",
      "inherited": true,
      "___id": "T000002R000514",
      "___s": true
    },
    {
      "comment": "/**\n         Stores in memory keys and values\n         @private\n         */",
      "meta": {
        "range": [
          717,
          735
        ],
        "filename": "emitter.js",
        "lineno": 32,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004717",
          "name": "this._dataset",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "description": "Stores in memory keys and values",
      "access": "private",
      "name": "_dataset",
      "longname": "Search#_dataset",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#_dataset",
      "inherited": true,
      "___id": "T000002R000515",
      "___s": true
    },
    {
      "comment": "/**\n         Emit events locally.\n\n         @private\n         @param {String} event The event payload object\n         */",
      "meta": {
        "range": [
          924,
          1291
        ],
        "filename": "emitter.js",
        "lineno": 42,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004731",
          "name": "this._emit",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "data"
          ]
        }
      },
      "description": "Emit events locally.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event payload object",
          "name": "event"
        }
      ],
      "name": "_emit",
      "longname": "Search#_emit",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#_emit",
      "inherited": true,
      "overrides": "RootEmitter#_emit",
      "___id": "T000002R000516",
      "___s": true
    },
    {
      "comment": "/**\n         * Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.\n         * @method\n         * @param {String} event The event name\n         * @param {Function} cb The function to run when the event is emitted\n         * @example\n         *\n         * // Get notified whenever someone joins the room\n         * object.on('event', (payload) => {\n         *     console.log('event was fired').\n         * })\n         *\n         * // Get notified of event.a and event.b\n         * object.on('event.*', (payload) => {\n         *     console.log('event.a or event.b was fired').;\n         * })\n         */",
      "meta": {
        "range": [
          1956,
          2251
        ],
        "filename": "emitter.js",
        "lineno": 72,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004763",
          "name": "this.on",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "cb"
          ]
        },
        "vars": {
          "this.events[undefined]": "Emitter#events[undefined]"
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. Supports wildcard matching.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "cb"
        }
      ],
      "examples": [
        "// Get notified whenever someone joins the room\nobject.on('event', (payload) => {\n    console.log('event was fired').\n})\n\n// Get notified of event.a and event.b\nobject.on('event.*', (payload) => {\n    console.log('event.a or event.b was fired').;\n})"
      ],
      "name": "on",
      "longname": "Search#on",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#on",
      "inherited": true,
      "overrides": "RootEmitter#on",
      "___id": "T000002R000517",
      "___s": true
    },
    {
      "comment": "/**\n     Binds a plugin to this object\n     @param {Object} module The plugin module\n     @tutorial using\n     */",
      "meta": {
        "range": [
          3272,
          3980
        ],
        "filename": "emitter.js",
        "lineno": 123,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100004901",
          "name": "Emitter#plugin",
          "type": "MethodDefinition",
          "paramnames": [
            "module"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Binds a plugin to this object",
      "params": [
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The plugin module",
          "name": "module"
        }
      ],
      "tutorials": [
        "using"
      ],
      "name": "plugin",
      "longname": "Search#plugin",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#plugin",
      "inherited": true,
      "___id": "T000002R000518",
      "___s": true
    },
    {
      "comment": "/**\n     Broadcasts an event locally to all listeners.\n     @private\n     @param {String} event The event name\n     @param {Object} payload The event payload object\n     */",
      "meta": {
        "range": [
          4391,
          4872
        ],
        "filename": "emitter.js",
        "lineno": 166,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005012",
          "name": "Emitter#trigger",
          "type": "MethodDefinition",
          "paramnames": [
            "event",
            "payload",
            "done"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Broadcasts an event locally to all listeners.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "Object"
            ]
          },
          "description": "The event payload object",
          "name": "payload"
        }
      ],
      "name": "trigger",
      "longname": "Search#trigger",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#trigger",
      "inherited": true,
      "___id": "T000002R000519",
      "___s": true
    },
    {
      "comment": "/**\n     Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.\n\n     @private\n     @param {String} location Where in the middleeware the event should run (emit, trigger)\n     @param {String} event The event name\n     @param {String} first The first function to run before the plugins have run\n     @param {String} last The last function to run after the plugins have run\n     */",
      "meta": {
        "range": [
          5317,
          6535
        ],
        "filename": "emitter.js",
        "lineno": 196,
        "columnno": 4,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005064",
          "name": "Emitter#runPluginQueue",
          "type": "MethodDefinition",
          "paramnames": [
            "location",
            "event",
            "first",
            "last"
          ]
        },
        "vars": {
          "": null
        }
      },
      "description": "Load plugins and attach a queue of functions to execute before and\n     after events are trigger or received.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "Where in the middleeware the event should run (emit, trigger)",
          "name": "location"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The first function to run before the plugins have run",
          "name": "first"
        },
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The last function to run after the plugins have run",
          "name": "last"
        }
      ],
      "name": "runPluginQueue",
      "longname": "Search#runPluginQueue",
      "kind": "function",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "Emitter#runPluginQueue",
      "inherited": true,
      "___id": "T000002R000520",
      "___s": true
    },
    {
      "comment": "/**\n        * @private\n        */",
      "meta": {
        "range": [
          461,
          477
        ],
        "filename": "root_emitter.js",
        "lineno": 18,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005201",
          "name": "this.events",
          "type": "ObjectExpression",
          "value": "{}",
          "paramnames": []
        }
      },
      "access": "private",
      "name": "events",
      "longname": "Search#events",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#events",
      "inherited": true,
      "overrides": "RootEmitter#events",
      "___id": "T000002R000521",
      "___s": true
    },
    {
      "comment": "/**\n        Create a new EventEmitter2 object for this class.\n\n        @private\n        */",
      "meta": {
        "range": [
          623,
          793
        ],
        "filename": "root_emitter.js",
        "lineno": 27,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005213",
          "name": "this.emitter",
          "type": "NewExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Create a new EventEmitter2 object for this class.",
      "access": "private",
      "name": "emitter",
      "longname": "Search#emitter",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#emitter",
      "inherited": true,
      "overrides": "RootEmitter#emitter",
      "___id": "T000002R000522",
      "___s": true
    },
    {
      "comment": "/**\n        Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.\n\n        @private\n        @param {String} event The event name\n        @param {Function} callback The function to run when the event is emitted\n        */",
      "meta": {
        "range": [
          1482,
          1527
        ],
        "filename": "root_emitter.js",
        "lineno": 54,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005245",
          "name": "this._on",
          "type": "CallExpression",
          "value": "",
          "paramnames": []
        }
      },
      "description": "Listen for a specific event and fire a callback when it's emitted. This is reserved in case ```this.on``` is overwritten.",
      "access": "private",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when the event is emitted",
          "name": "callback"
        }
      ],
      "name": "_on",
      "longname": "Search#_on",
      "kind": "member",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#_on",
      "inherited": true,
      "overrides": "RootEmitter#_on",
      "___id": "T000002R000523",
      "___s": true
    },
    {
      "comment": "/**\n        * Stop a callback from listening to an event.\n        * @method\n        * @param {String} event The event name\n        * @example\n        * let callback = function(payload;) {\n        *    console.log('something happend!');\n        * };\n        * object.on('event', callback);\n        * // ...\n        * object.off('event', callback);\n        */",
      "meta": {
        "range": [
          2731,
          2911
        ],
        "filename": "root_emitter.js",
        "lineno": 94,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005281",
          "name": "this.off",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Stop a callback from listening to an event.",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        }
      ],
      "examples": [
        "let callback = function(payload;) {\n   console.log('something happend!');\n};\nobject.on('event', callback);\n// ...\nobject.off('event', callback);"
      ],
      "name": "off",
      "longname": "Search#off",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#off",
      "inherited": true,
      "overrides": "RootEmitter#off",
      "___id": "T000002R000524",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for any event on this object and fire a callback when it's emitted\n        * @method\n        * @param {Function} callback The function to run when any event is emitted. First parameter is the event name and second is the payload.\n        * @example\n        * object.onAny((event, payload) => {\n        *     console.log('All events trigger this.');\n        * });\n        */",
      "meta": {
        "range": [
          3325,
          3509
        ],
        "filename": "root_emitter.js",
        "lineno": 112,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005301",
          "name": "this.onAny",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for any event on this object and fire a callback when it's emitted",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run when any event is emitted. First parameter is the event name and second is the payload.",
          "name": "callback"
        }
      ],
      "examples": [
        "object.onAny((event, payload) => {\n    console.log('All events trigger this.');\n});"
      ],
      "name": "onAny",
      "longname": "Search#onAny",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#onAny",
      "inherited": true,
      "overrides": "RootEmitter#onAny",
      "___id": "T000002R000525",
      "___s": true
    },
    {
      "comment": "/**\n        * Listen for an event and only fire the callback a single time\n        * @method\n        * @param {String} event The event name\n        * @param {Function} callback The function to run once\n        * @example\n        * object.once('message', => (event, payload) {\n        *     console.log('This is only fired once!');\n        * });\n        */",
      "meta": {
        "range": [
          3884,
          4066
        ],
        "filename": "root_emitter.js",
        "lineno": 131,
        "columnno": 8,
        "path": "/Users/ian/Development/chat-engine/src/modules",
        "code": {
          "id": "astnode100005321",
          "name": "this.once",
          "type": "ArrowFunctionExpression",
          "paramnames": [
            "event",
            "callback"
          ]
        }
      },
      "description": "Listen for an event and only fire the callback a single time",
      "kind": "function",
      "params": [
        {
          "type": {
            "names": [
              "String"
            ]
          },
          "description": "The event name",
          "name": "event"
        },
        {
          "type": {
            "names": [
              "function"
            ]
          },
          "description": "The function to run once",
          "name": "callback"
        }
      ],
      "examples": [
        "object.once('message', => (event, payload) {\n    console.log('This is only fired once!');\n});"
      ],
      "name": "once",
      "longname": "Search#once",
      "memberof": "Search",
      "scope": "instance",
      "inherits": "RootEmitter#once",
      "inherited": true,
      "overrides": "RootEmitter#once",
      "___id": "T000002R000526",
      "___s": true
    }
  ]
}