[
  {
    "__docId__": 0,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/components/HtmlHead.js",
    "memberof": null,
    "longname": "lib/components/HtmlHead.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import React from 'react'\r\nimport reactStamp from 'react-stamp'\r\n\r\nconst { compose } = reactStamp(React)\r\n\r\nlet head = []\r\nconst HtmlHead = compose( { componentWillMount() {\r\n                            head = this.props.children\r\n                          }\r\n                        , componentWillUnmount() {\r\n                            head = []\r\n                          }\r\n                        , render() {\r\n                            return null\r\n                          }\r\n                        } )\r\nexport default HtmlHead\r\n\r\n"
  },
  {
    "__docId__": 1,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "compose",
    "memberof": "lib/components/HtmlHead.js",
    "longname": "lib/components/HtmlHead.js~compose",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/components/HtmlHead.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 2,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "head",
    "memberof": "lib/components/HtmlHead.js",
    "longname": "lib/components/HtmlHead.js~head",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/components/HtmlHead.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 3,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HtmlHead",
    "memberof": "lib/components/HtmlHead.js",
    "longname": "lib/components/HtmlHead.js~HtmlHead",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/components/HtmlHead.js",
    "importStyle": "HtmlHead",
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 4,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/components/modules/react-maximize/index.js",
    "memberof": null,
    "longname": "lib/components/modules/react-maximize/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport * as ReactGateway from 'react-gateway'\r\nimport ReactCSSTransitionGroup from 'react-addons-css-transition-group'\r\nimport shallowCompare from 'react-addons-shallow-compare'\r\nimport reactMaximize from 'react-maximize'\r\nimport styles from './styles.css' // 'react-maximize/lib/styles.css'\r\n\r\nconst { Maximize, Container } = reactMaximize({ React, ReactDOM, ReactGateway, shallowCompare, ReactCSSTransitionGroup }, { styles })\r\nexport { Maximize, Container }\r\n"
  },
  {
    "__docId__": 5,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "Maximize",
    "memberof": "lib/components/modules/react-maximize/index.js",
    "longname": "lib/components/modules/react-maximize/index.js~Maximize",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/components/modules/react-maximize/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 6,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/index.js",
    "memberof": null,
    "longname": "lib/context/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { PropTypes } from 'react'\r\n\r\nexport { getTheme, schemeNames } from './theme'\r\n\r\nexport const gridPropsShape = PropTypes.shape({ xs: PropTypes.number\r\n                                              , sm: PropTypes.number\r\n                                              , md: PropTypes.number\r\n                                              , lg: PropTypes.number\r\n                                              , xsOffset: PropTypes.number\r\n                                              , smOffset: PropTypes.number\r\n                                              , mdOffset: PropTypes.number\r\n                                              , lgOffset: PropTypes.number\r\n                                              })\r\n\r\nconst paletteShape = PropTypes.shape( { scheme: PropTypes.string\r\n                                      , base03: PropTypes.string\r\n                                      , base02: PropTypes.string\r\n                                      , base01: PropTypes.string\r\n                                      , base00: PropTypes.string\r\n                                      , base0:  PropTypes.string\r\n                                      , base1:  PropTypes.string\r\n                                      , base2:  PropTypes.string\r\n                                      , base3:  PropTypes.string\r\n                                      , yellow: PropTypes.string\r\n                                      , orange: PropTypes.string\r\n                                      , red:    PropTypes.string\r\n                                      , magenta: PropTypes.string\r\n                                      , violet: PropTypes.string\r\n                                      , blue:   PropTypes.string\r\n                                      , cyan:   PropTypes.string\r\n                                      , green:  PropTypes.string\r\n                                      } )\r\n\r\nconst colorShape = PropTypes.shape( { primary: PropTypes.string.isRequired\r\n                                    , secondary: PropTypes.string.isRequired\r\n                                    , accent: PropTypes.string.isRequired\r\n                                    } )\r\n\r\nconst brandShape = PropTypes.shape( { default: PropTypes.string.isRequired\r\n                                    , primary: PropTypes.string.isRequired\r\n                                    , info: PropTypes.string.isRequired\r\n                                    , success: PropTypes.string.isRequired\r\n                                    , warning: PropTypes.string.isRequired\r\n                                    , danger: PropTypes.string.isRequired\r\n                                    } )\r\n\r\nconst panelStyleShape = PropTypes.shape({ backgroundColor: PropTypes.string.isRequired\r\n                                        , borderColor: PropTypes.string.isRequired\r\n                                        , borderStyle: PropTypes.string.isRequired\r\n                                        , borderWidth: PropTypes.number.isRequired\r\n                                        , margin: PropTypes.number.isRequired\r\n                                        , borderRadius: PropTypes.number.isRequired\r\n                                        , fontFamily: PropTypes.string.isRequired\r\n                                        , fontWeight: PropTypes.number.isRequired\r\n                                        })\r\n\r\nconst boldShape = PropTypes.shape({ fontWeight: PropTypes.number.isRequired })\r\n\r\nconst inputShape = PropTypes.shape( { color: PropTypes.string.isRequired\r\n                                    , backgroundColor: PropTypes.string.isRequired\r\n                                    , borderColor: PropTypes.string.isRequired\r\n                                    , borderWidth: PropTypes.number.isRequired\r\n                                    , borderStyle: PropTypes.string.isRequired\r\n                                    } )\r\n\r\nconst styleShape = PropTypes.shape( { app: PropTypes.object.isRequired\r\n                                    , footer: PropTypes.object.isRequired\r\n                                    , panel: panelStyleShape\r\n                                    , bold: boldShape\r\n                                    , input: inputShape\r\n                                    } )\r\n\r\nconst themeShape = PropTypes.shape( { palette: paletteShape\r\n                                    , color: colorShape\r\n                                    , brand: brandShape\r\n                                    , style: styleShape\r\n                                    })\r\n\r\nconst contextTypes =  { gridProps: gridPropsShape\r\n                      , theme: themeShape\r\n                      }\r\n\r\nexport default contextTypes\r\n"
  },
  {
    "__docId__": 7,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "gridPropsShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~gridPropsShape",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": "{gridPropsShape}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 8,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "paletteShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~paletteShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 9,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "colorShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~colorShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 34,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 10,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "brandShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~brandShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 39,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 11,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "panelStyleShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~panelStyleShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 47,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 12,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "boldShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~boldShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 57,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 13,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "inputShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~inputShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 59,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 14,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "styleShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~styleShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 66,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 15,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "themeShape",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~themeShape",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 73,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 16,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "contextTypes",
    "memberof": "lib/context/index.js",
    "longname": "lib/context/index.js~contextTypes",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/context/index.js",
    "importStyle": "contextTypes",
    "description": null,
    "lineNumber": 79,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 17,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/theme/index.js",
    "memberof": null,
    "longname": "lib/context/theme/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import classNames from 'classnames'\r\nimport { defaultTheme } from '../../../config'\r\nimport  { flat\r\n        , grayscale\r\n        , railscasts\r\n        , solarized\r\n        , monokai\r\n        } from 'base16'\r\n\r\nimport getOverride from './overrides'\r\n\r\n\r\nconst normalizeScheme = scheme => {\r\n  return  { scheme: scheme.scheme\r\n          , base03: scheme.base00\r\n          , base02: scheme.base01\r\n          , base01: scheme.base02\r\n          , base00: scheme.base03\r\n          , base0: scheme.base04\r\n          , base1: scheme.base05\r\n          , base2: scheme.base06\r\n          , base3: scheme.base07\r\n          , red: scheme.base08\r\n          , orange: scheme.base09\r\n          , yellow: scheme.base0A\r\n          , green: scheme.base0B\r\n          , cyan: scheme.base0C\r\n          , blue: scheme.base0D\r\n          , magenta: scheme.base0E\r\n          , violet: scheme.base0F\r\n          }\r\n}\r\n\r\nfunction getOthers() {\r\n  return  { flat\r\n          , grayscale\r\n          , railscasts\r\n          , solarized\r\n          , monokai\r\n          }\r\n}\r\n\r\nfunction getScheme(name) {\r\n  return normalizeScheme(getOthers()[name])\r\n}\r\n\r\n\r\nconst appClass = classNames('body-content', 'container')\r\n\r\nconst invertPalette = palette => {\r\n  return  { ...palette\r\n          , base03: palette.base3\r\n          , base02: palette.base2\r\n          , base01: palette.base1\r\n          , base00: palette.base0\r\n          , base0:  palette.base00\r\n          , base1:  palette.base01\r\n          , base2:  palette.base02\r\n          , base3:  palette.base03\r\n          }\r\n}\r\n\r\nconst buildTheme = (name, palette, inverted=false) => {\r\n  const p = inverted ? invertPalette(palette) : palette\r\n\r\n  const color = { primary: p['base3']\r\n                , secondary: p['base00']\r\n                , tertiary: p['base1']\r\n                , accent: p['blue']\r\n                , emphasized: p['base01']\r\n                }\r\n\r\n  const brand = { default: p['base2']\r\n                , primary: p['yellow']\r\n                , info: p['cyan']\r\n                , success: p['green']\r\n                , warning: p['orange']\r\n                , danger: p['red']\r\n                }\r\n\r\n  return  { name\r\n          , palette: p\r\n          , color\r\n          , brand\r\n                      /** body styles are set directly on the html (should not be react shorthands) */\r\n          , style:  { app:  { width: '80%'\r\n                              , height: '100%'\r\n                              , color: color.secondary\r\n                              , marginLeft: '10%'\r\n                              }\r\n                      , body: { backgroundColor: p['base3']\r\n                              , padding: 0\r\n                              , margin: 0\r\n                              }\r\n                      , content:  { width: '100%'\r\n                                  , backgroundColor: p['base2']\r\n                                  , float: 'left'\r\n                                  , marginTop: 10\r\n                                  , marginBottom: 30\r\n                                  , paddingTop: 20\r\n                                  , paddingBottom: 20\r\n                                  , borderRadius: 5\r\n                                  , border: `1px solid ${p['base0']}`\r\n                                  }\r\n                      , header: { wrapper:  { display: 'flex'\r\n                                            , flexDirection: 'row'\r\n                                            , flex: '1 0 300px'\r\n                                            , justifyContent: 'space-between'\r\n                                            , alignItems: 'center'\r\n                                            , marginTop: 10\r\n                                            , marginBottom: 10\r\n                                            }\r\n                                , hamburger:  { backgroundColor: '#fff' //p['base01']\r\n                                              , borderRadius: 4\r\n                                              , border: `2px dashed ${color.accent}` //p['base2']}`\r\n                                              , height: 32\r\n                                              , width: 32\r\n                                              , cursor: 'pointer'\r\n                                              }\r\n                                , title:  { fontSize: '1.8em'\r\n                                          , fontFamily: 'Lato'\r\n                                          , fontWeight: 'bold'\r\n                                          , marginLeft: 20\r\n                                          , marginRight: 'auto'\r\n                                          }\r\n                                , subtitle: { fontSize: 9, marginLeft: 10, marginTop: 0, paddingTop: 0 }\r\n                                , anchor: { color: color.accent, textDecoration: 'none' }\r\n                                , banner: { marginRight: 20, marginTop: 3 }\r\n                                , settings: { }\r\n                                , settingsImage: { height: 45, textShadow: '-1px -1px 0 #000' }\r\n                                }\r\n                      , footer: { wrapper:  { display: 'flex'\r\n                                            , flexDirection: 'row'\r\n                                            , flex: '0 1 10px'\r\n                                            , flexWrap: 'nowrap'\r\n                                            , justifyContent: 'space-between'\r\n                                            , alignItems: 'flex-end'\r\n                                            , position: 'fixed'\r\n                                            , bottom: 5\r\n                                            , width: '80%'\r\n                                            }\r\n                                , left: { display: 'flex'\r\n                                        , flexDirection: 'column'\r\n                                        }\r\n                                , right: { display: 'flex'\r\n                                        , flexDirection: 'column'\r\n                                        }\r\n                                , row:  { display: 'flex'\r\n                                        , flexDirection: 'row'\r\n                                        , justifyContent: 'space-between'\r\n                                        , flexWrap: 'nowrap'\r\n                                        }\r\n                                , anchor: { color: color.accent, textDecoration: 'none' }\r\n                                }\r\n                      , panel:  { backgroundColor: brand.default\r\n                                , borderColor: color.tertiary\r\n                                , borderStyle: 'solid'\r\n                                , borderWidth: 1\r\n                                , margin: 20\r\n                                , paddingLeft: 10\r\n                                , paddingRight: 10\r\n                                , borderRadius: 8\r\n                                , fontFamily: 'Lato'\r\n                                , fontWeight: 400\r\n                                }\r\n                      , bold: { fontWeight: 700 }\r\n                      , link: { color: p['blue']\r\n                              , cursor: 'pointer'\r\n                              }\r\n                      , label:  { color: color.secondary\r\n                                , backgroundColor: brand.default\r\n                                , borderColor: color.secondary\r\n                                , borderWidth: 1\r\n                                , borderStyle: 'solid'\r\n                                , borderRadius: 2\r\n                                , margin: 2\r\n                                , padding: 2\r\n                                , paddingLeft: 4\r\n                                , paddingRight: 4\r\n                                , fontSize: 10\r\n                                , fontWeight: 700\r\n                                , fontFamily: [ 'Lato' ]\r\n                                , whiteSpace: 'nowrap'\r\n                                , display: 'inline'\r\n                                , cursor: 'default'\r\n                                }\r\n                      , ul: { marginLeft: '15%'\r\n                            , marginRight: '15%'\r\n                            , paddingTop: 10\r\n                            , paddingBottom: 10\r\n                            , lineHeight: 2\r\n                            }\r\n                      , paragraph:  {\r\n                                    //, margin: 15\r\n                                    padding: 10\r\n                                    }\r\n                      , form: {\r\n                              //, margin: 15\r\n                              padding: 10\r\n                              }\r\n                      , input:  { color: p['base03']\r\n                                , backgroundColor: p['base3']\r\n                                , fontSize: '1.1em'\r\n                                , padding: 10\r\n                                , minWidth: 300\r\n                                , borderColor: color.tertiary\r\n                                , borderRadius: 4\r\n                                , borderWidth: 1\r\n                              , borderStyle: 'solid'\r\n                              }\r\n                    }\r\n         }\r\n}\r\n\r\n\r\nexport const schemeNames =  [ 'flat'\r\n                            , 'grayscale'\r\n                            , 'railscasts'\r\n                            , 'solarized'\r\n                            , 'monokai'\r\n                            ]\r\n\r\nexport const getTheme = (themeName = defaultTheme) => {\r\n  if(!themeName.includes('-'))\r\n    throw new Error(`Incorrect format provided => '${themeName}', must be of format 'scheme-(light|dark)'`)\r\n\r\n  const [ schemeName, lightOrDark ] = themeName.split('-')\r\n  const inverted = lightOrDark === 'dark'\r\n\r\n  const palette = getScheme(schemeName)\r\n  if(!palette)\r\n    throw new Error(`No theme exists for scheme '${schemeName}', options are [${schemeNames.join(',')}]`)\r\n  return buildTheme(`${schemeName}-${inverted ? 'dark' : 'light'}`, palette, inverted)\r\n}\r\n\r\n\r\n\r\nexport const getThemeForUrl = (themeName = defaultTheme, url) => {\r\n  let theme = getTheme(themeName)\r\n  let override = getOverride({ url })\r\n  if(override)\r\n    return { ...theme, ...override(theme), isFallback: true }\r\n  return theme\r\n}\r\n"
  },
  {
    "__docId__": 18,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "normalizeScheme",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~normalizeScheme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 19,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getOthers",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~getOthers",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 34,
    "undocument": true,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 20,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getScheme",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~getScheme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 43,
    "undocument": true,
    "params": [
      {
        "name": "name",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 21,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "appClass",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~appClass",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 48,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 22,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "invertPalette",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~invertPalette",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 50,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 23,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "buildTheme",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~buildTheme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 63,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 24,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "schemeNames",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~schemeNames",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": "{schemeNames}",
    "description": null,
    "lineNumber": 216,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 25,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTheme",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~getTheme",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": "{getTheme}",
    "description": null,
    "lineNumber": 223,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 26,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getThemeForUrl",
    "memberof": "lib/context/theme/index.js",
    "longname": "lib/context/theme/index.js~getThemeForUrl",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/context/theme/index.js",
    "importStyle": "{getThemeForUrl}",
    "description": null,
    "lineNumber": 238,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 27,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/theme/overrides/index.js",
    "memberof": null,
    "longname": "lib/context/theme/overrides/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import cookie from 'react-cookie'\r\nimport { client, IS_DEV } from '../../../../config'\r\nconst { cookieNames } = client\r\n\r\nexport default ({ url }) => {\r\n  /** UNCOMMENT THIS OUT FOR DARK THEME */\r\n  /*\r\n  if(IS_DEV && cookieNames.theme) {\r\n    let cookieTheme = cookie.load(cookieNames.theme)\r\n    if(cookieTheme) return require('./theme').default(cookieTheme)\r\n  }\r\n*/\r\n  switch(url) {\r\n    case '/management/quicksaletouchscreen.asp':\r\n    case '/management/tendertouchscreen.asp':\r\n    case '/management/eventselectiontouchscreen.asp':\r\n    case '/management/actselectiontouchscreen.asp':\r\n      return require('./touchscreen').default\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 28,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cookieNames",
    "memberof": "lib/context/theme/overrides/index.js",
    "longname": "lib/context/theme/overrides/index.js~cookieNames",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/overrides/index.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 29,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/theme/overrides/theme.js",
    "memberof": null,
    "longname": "lib/context/theme/overrides/theme.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "function getSheet(theme) {\r\n  try {\r\n    switch(theme) {\r\n      case 'solarized-dark':\r\n        return () => require('./css/solarized-dark.gcss')\r\n    }\r\n  } catch(err) { console.error(err) }\r\n}\r\n\r\nexport default cookieTheme => {\r\n  const sheet = getSheet(cookieTheme)\r\n  return theme => ({ sheet })\r\n}\r\n"
  },
  {
    "__docId__": 30,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getSheet",
    "memberof": "lib/context/theme/overrides/theme.js",
    "longname": "lib/context/theme/overrides/theme.js~getSheet",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context/theme/overrides/theme.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 1,
    "undocument": true,
    "params": [
      {
        "name": "theme",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 31,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/theme/overrides/touchscreen.js",
    "memberof": null,
    "longname": "lib/context/theme/overrides/touchscreen.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "export default theme => ( { style:  { ...theme.style\r\n                                    , app: { backgroundColor: '#fff' }\r\n                                    , body: { backgroundColor: '#fff', marginTop: '8px' }\r\n                                    }\r\n                          //, sheet: () => require('./touchscreen.gcss')\r\n                          } )\r\n"
  },
  {
    "__docId__": 32,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context/theme/palette.js",
    "memberof": null,
    "longname": "lib/context/theme/palette.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": ""
  },
  {
    "__docId__": 33,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/context-obsolete.js",
    "memberof": null,
    "longname": "lib/context-obsolete.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "//import contextual from 'contextual'\r\nimport React from 'react'\r\nimport contextTypes from './context'\r\nimport { getTheme, schemeNames } from './context/theme'\r\nconsole.warn('CONTEXT TYPES 1', contextTypes)\r\n\r\nconst defaultThemeName = 'solarized-dark'\r\n//const defaultTheme = getTheme(defaultThemeName)\r\n//const defaultTheme = defaultThemeName\r\n//const { contextTypes, defaultTheme, getTheme, schemeNames } = contextual({ defaultThemeName, React })\r\nexport { contextTypes, getTheme, schemeNames /*, defaultTheme*/ } //defaultTheme, getTheme, schemeNames }\r\n"
  },
  {
    "__docId__": 34,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "defaultThemeName",
    "memberof": "lib/context-obsolete.js",
    "longname": "lib/context-obsolete.js~defaultThemeName",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/context-obsolete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 35,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/cors.js",
    "memberof": null,
    "longname": "lib/cors.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { server as serverConfig, origins } from '../config'\r\nimport { devStream } from './stream'\r\n\r\nconst logOriginPass = (origin, pattern) => log.trace(`PASS: origin [${origin}] matches pattern [${pattern}].`)\r\nconst logOriginFail = (origin) => log.trace(`FAIL: origin [${origin}] does not match any patterns.`)\r\nconst logOriginDNE = () => log.trace('DNE: origin header does not exist.')\r\n\r\nconst corsValidator = patterns => {\r\n  return req => (typeof req.headers.origin === 'string'\r\n                ? patterns.filter(x => x.test(req.headers.origin))\r\n                          .map(devStream(x => logOriginPass(req.headers.origin, x))).length > 0\r\n                : true\r\n                )\r\n}\r\n\r\nexport function getCors() {\r\n  const isOriginOk = origins ? corsValidator(origins.map(x => new RegExp(x))) : true\r\n\r\n  const failureStatus = { code: 403\r\n                        , message: '403 Forbidden'\r\n                        }\r\n\r\n  const getError = req => req.headers.origin  ? ({ message: logOriginFail(req.headers.origin), code: 10 })\r\n                                              : ({ message: logOriginDNE(), code: 11 })\r\n\r\n  const getOptionsHeaders = req => ({ 'Access-Control-Allow-Origin': req.headers.origin\r\n                                    , 'Access-Control-Max-Age': 604800 // Specifies how long the preflight response can be cached in seconds\r\n                                    , 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE'\r\n                                    , 'Access-Control-Allow-Headers': 'Content-Type, Authorization'\r\n                                    , 'Access-Control-Allow-Credentials': true\r\n                                    })\r\n\r\n  const handle = (req, res) => {\r\n    const resolvedOrigin = req.headers.origin || req.headers.host\r\n    if(!isOriginOk(req))\r\n      return req.headers.origin ? log.error(`proxy -origin [${resolvedOrigin}], method [${req.method}]`) : log.warn('proxy -host [%s], method [%s]', req.headers.host, req.method)\r\n    log.trace(`proxy +${req.headers.origin ? 'origin' : 'host'} [${resolvedOrigin}], method [${req.method}]`)\r\n    res.setHeader('Access-Control-Allow-Origin', resolvedOrigin)\r\n    res.setHeader('Access-Control-Allow-Credentials', true)\r\n  }\r\n\r\n  const handlePreflight = (req, res) => {\r\n    res.writeHead(200, getOptionsHeaders(req))\r\n    res.end()\r\n  }\r\n\r\n  const handleFailure = (req, res) => {\r\n    res.writeHead(failureStatus.code)\r\n    res.end (JSON.stringify({ message: failureStatus.message\r\n                            , errors: [ getError(req) ]\r\n                            }))\r\n  }\r\n\r\n  return  { isOriginOk : isOriginOk\r\n          , failureStatus: failureStatus\r\n          , getError: getError\r\n          , getOptionsHeaders: getOptionsHeaders\r\n          , handle: handle\r\n          , handlePreflight: handlePreflight\r\n          , handleFailure: handleFailure\r\n          }\r\n}\r\n"
  },
  {
    "__docId__": 36,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "logOriginPass",
    "memberof": "lib/cors.js",
    "longname": "lib/cors.js~logOriginPass",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/cors.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 37,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "logOriginFail",
    "memberof": "lib/cors.js",
    "longname": "lib/cors.js~logOriginFail",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/cors.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 38,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "logOriginDNE",
    "memberof": "lib/cors.js",
    "longname": "lib/cors.js~logOriginDNE",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/cors.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 39,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "corsValidator",
    "memberof": "lib/cors.js",
    "longname": "lib/cors.js~corsValidator",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/cors.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 40,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getCors",
    "memberof": "lib/cors.js",
    "longname": "lib/cors.js~getCors",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/cors.js",
    "importStyle": "{getCors}",
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 41,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/errors/APIError.js",
    "memberof": null,
    "longname": "lib/errors/APIError.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import ExtendableError from './ExtendableError'\r\n\r\nexport default class APIError extends ExtendableError {\r\n  constructor(message, innerError, props = {}) {\r\n    super(message, innerError)\r\n    this.name = 'APIError'\r\n    const { code, input, init, apiName, actionName, inputData, response } = props\r\n    this.code = code\r\n    this.input = input\r\n    this.init = init\r\n    this.apiName = apiName\r\n    this.actionName = actionName\r\n    this.inputData = inputData\r\n    this.response = response\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 42,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "APIError",
    "memberof": "lib/errors/APIError.js",
    "longname": "lib/errors/APIError.js~APIError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/APIError.js",
    "importStyle": "APIError",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "interface": false,
    "extends": [
      "lib/errors/ExtendableError.js~ExtendableError"
    ]
  },
  {
    "__docId__": 43,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#constructor",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "params": [
      {
        "name": "message",
        "types": [
          "*"
        ]
      },
      {
        "name": "innerError",
        "types": [
          "*"
        ]
      },
      {
        "name": "props",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 44,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#name",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 45,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "code",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#code",
    "access": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 46,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "input",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#input",
    "access": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 47,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#init",
    "access": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 48,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "apiName",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#apiName",
    "access": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 49,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "actionName",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#actionName",
    "access": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 50,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "inputData",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#inputData",
    "access": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 51,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "response",
    "memberof": "lib/errors/APIError.js~APIError",
    "longname": "lib/errors/APIError.js~APIError#response",
    "access": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 52,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/errors/DOMError.js",
    "memberof": null,
    "longname": "lib/errors/DOMError.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import ExtendableError from './ExtendableError'\r\n\r\nexport default class DOMError extends ExtendableError {\r\n  constructor(message, innerError) {\r\n    super(message, innerError)\r\n    this.name = 'DOMError'\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 53,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "DOMError",
    "memberof": "lib/errors/DOMError.js",
    "longname": "lib/errors/DOMError.js~DOMError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/DOMError.js",
    "importStyle": "DOMError",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "interface": false,
    "extends": [
      "lib/errors/ExtendableError.js~ExtendableError"
    ]
  },
  {
    "__docId__": 54,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/errors/DOMError.js~DOMError",
    "longname": "lib/errors/DOMError.js~DOMError#constructor",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "params": [
      {
        "name": "message",
        "types": [
          "*"
        ]
      },
      {
        "name": "innerError",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 55,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "lib/errors/DOMError.js~DOMError",
    "longname": "lib/errors/DOMError.js~DOMError#name",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 56,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/errors/ExtendableError.js",
    "memberof": null,
    "longname": "lib/errors/ExtendableError.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "export default class ExtendableError extends Error {\r\n  constructor(message, innerError) {\r\n    super(message)\r\n    this.name = this.constructor.name\r\n    this.message = message\r\n    this.innerError = innerError\r\n    if(Error.captureStackTrace)\r\n      Error.captureStackTrace(this, this.constructor.name)\r\n    else\r\n      this.stack = (new Error()).stack\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 57,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "ExtendableError",
    "memberof": "lib/errors/ExtendableError.js",
    "longname": "lib/errors/ExtendableError.js~ExtendableError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/ExtendableError.js",
    "importStyle": "ExtendableError",
    "description": null,
    "lineNumber": 1,
    "undocument": true,
    "interface": false,
    "extends": [
      "Error"
    ]
  },
  {
    "__docId__": 58,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/errors/ExtendableError.js~ExtendableError",
    "longname": "lib/errors/ExtendableError.js~ExtendableError#constructor",
    "access": null,
    "description": null,
    "lineNumber": 2,
    "undocument": true,
    "params": [
      {
        "name": "message",
        "types": [
          "*"
        ]
      },
      {
        "name": "innerError",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 59,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "lib/errors/ExtendableError.js~ExtendableError",
    "longname": "lib/errors/ExtendableError.js~ExtendableError#name",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 60,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "message",
    "memberof": "lib/errors/ExtendableError.js~ExtendableError",
    "longname": "lib/errors/ExtendableError.js~ExtendableError#message",
    "access": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 61,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "innerError",
    "memberof": "lib/errors/ExtendableError.js~ExtendableError",
    "longname": "lib/errors/ExtendableError.js~ExtendableError#innerError",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 62,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stack",
    "memberof": "lib/errors/ExtendableError.js~ExtendableError",
    "longname": "lib/errors/ExtendableError.js~ExtendableError#stack",
    "access": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 63,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/errors/IdentityError.js",
    "memberof": null,
    "longname": "lib/errors/IdentityError.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import ExtendableError from './ExtendableError'\r\n\r\nexport default class IdentityError extends ExtendableError {\r\n  constructor(message, innerError, props = {}) {\r\n    super(message, innerError)\r\n    this.name = 'IdentityError'\r\n    this.message = message\r\n    this.innerError = innerError\r\n    const { tokens, fingerprint } = props\r\n    this.tokens = tokens\r\n    this.fingerprint = fingerprint\r\n  }\r\n}\r\n\r\n"
  },
  {
    "__docId__": 64,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "IdentityError",
    "memberof": "lib/errors/IdentityError.js",
    "longname": "lib/errors/IdentityError.js~IdentityError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/IdentityError.js",
    "importStyle": "IdentityError",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "interface": false,
    "extends": [
      "lib/errors/ExtendableError.js~ExtendableError"
    ]
  },
  {
    "__docId__": 65,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#constructor",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "params": [
      {
        "name": "message",
        "types": [
          "*"
        ]
      },
      {
        "name": "innerError",
        "types": [
          "*"
        ]
      },
      {
        "name": "props",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 66,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#name",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 67,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "message",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#message",
    "access": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 68,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "innerError",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#innerError",
    "access": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 69,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tokens",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#tokens",
    "access": null,
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 70,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fingerprint",
    "memberof": "lib/errors/IdentityError.js~IdentityError",
    "longname": "lib/errors/IdentityError.js~IdentityError#fingerprint",
    "access": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 71,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/errors/StateError.js",
    "memberof": null,
    "longname": "lib/errors/StateError.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import ExtendableError from './ExtendableError'\r\n\r\nexport const zeroElementsStateError = (prop, ...args) => new StateError(`Cannot remove from state property '${prop}' with zero elements.`, ...args)\r\n\r\nexport default class StateError extends ExtendableError {\r\n  constructor(message, innerError) {\r\n    super(message, innerError)\r\n    this.name = 'StateError'\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 72,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "zeroElementsStateError",
    "memberof": "lib/errors/StateError.js",
    "longname": "lib/errors/StateError.js~zeroElementsStateError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/StateError.js",
    "importStyle": "{zeroElementsStateError}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 73,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "StateError",
    "memberof": "lib/errors/StateError.js",
    "longname": "lib/errors/StateError.js~StateError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/errors/StateError.js",
    "importStyle": "StateError",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "interface": false,
    "extends": [
      "lib/errors/ExtendableError.js~ExtendableError"
    ]
  },
  {
    "__docId__": 74,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "lib/errors/StateError.js~StateError",
    "longname": "lib/errors/StateError.js~StateError#constructor",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "params": [
      {
        "name": "message",
        "types": [
          "*"
        ]
      },
      {
        "name": "innerError",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 75,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "lib/errors/StateError.js~StateError",
    "longname": "lib/errors/StateError.js~StateError#name",
    "access": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 76,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/index.js",
    "memberof": null,
    "longname": "lib/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\nimport { assert } from 'chai'\r\nimport path from 'path'\r\n\r\nimport configureServer from './server'\r\nimport { server, __rootname, resolveRoot } from '../config'\r\n\r\nconst mkdirp = Promise.promisify(require('mkdirp'))\r\n\r\n/** Exports a server map of key (schemes) to server startup functions. */\r\nexport default paths => configureServer({ paths })\r\n/** A function to create paths that are used throughout the server. */\r\nexport const definePaths = ({ NODE_ROOT = __rootname\r\n                            , NODE_MODULES_ROOT = resolveRoot('node_modules')\r\n                            , SERVER_CONFIG_PATH = resolveRoot('config-server.json')\r\n                            , CLIENT_CONFIG_PATH = resolveRoot('config-client.json')\r\n                            , PUBLIC_ROOT = resolveRoot('public')\r\n                            , ASSETS_ROOT = resolveRoot('public/assets')\r\n                            , STATIC_ROOT = resolveRoot('public/static')\r\n                            , IMAGES_ROOT = resolveRoot('public/static/images')\r\n                            , SRC_ROOT = resolveRoot('src')\r\n                            , APP_ROOT = resolveRoot('app')\r\n                            , LIB_ROOT = resolveRoot('lib')\r\n                            , BIN_ROOT = resolveRoot('bin')\r\n                            , LOG_ROOT = resolveRoot('log')\r\n                            , DOC_ROOT = resolveRoot('doc')\r\n                            , MOD_ROOT = path.resolve(server.fs.MOD_ROOT)\r\n                            } = {}) => {\r\n  const paths = { NODE_ROOT, NODE_MODULES_ROOT, SERVER_CONFIG_PATH, CLIENT_CONFIG_PATH, PUBLIC_ROOT, ASSETS_ROOT, STATIC_ROOT, IMAGES_ROOT, SRC_ROOT, APP_ROOT, LIB_ROOT, DOC_ROOT, BIN_ROOT, LOG_ROOT, MOD_ROOT }\r\n\r\n\r\n  Object.keys(paths).forEach(x => assert.typeOf(paths[x], 'string', `path ${x} must be a string`) && assert.isAbove(paths[x].length, 0, `path ${x} must have length greater than 0`))\r\n  return mkdirp(paths.LOG_ROOT)\r\n    .then(() => paths)\r\n    .catch(err => {\r\n      console.error('An error occurred attempting to create log directory.', err)\r\n      process.exit(1)\r\n    })\r\n}\r\n"
  },
  {
    "__docId__": 77,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "mkdirp",
    "memberof": "lib/index.js",
    "longname": "lib/index.js~mkdirp",
    "access": null,
    "export": false,
    "importPath": "gridiron-example",
    "importStyle": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 78,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "definePaths",
    "memberof": "lib/index.js",
    "longname": "lib/index.js~definePaths",
    "access": null,
    "export": true,
    "importPath": "gridiron-example",
    "importStyle": "{definePaths}",
    "description": "A function to create paths that are used throughout the server.",
    "lineNumber": 13,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 79,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/proxy.js",
    "memberof": null,
    "longname": "lib/proxy.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "/***\r\n * Proxy Module\r\n * Responsible for reading proxy config and setting up proxies.\r\n * @module server/proxy\r\n */\r\nimport httpProxy from 'http-proxy'\r\nimport http from 'http'\r\nimport https from 'https'\r\nimport { server as serverConfig, log } from '../config'\r\n\r\nconst proxyListen = ({ name, fromPort, toHost, toPort }) => `proxy ${name} directing from :${fromPort} to ${toHost}:${toPort}`\r\n\r\nexport default function proxy() {\r\n  const cdnBindings = new Map(serverConfig.bindings.cdn)\r\n  const hasHttp = cdnBindings.has('http')\r\n  const hasHttps = cdnBindings.has('https')\r\n  //const cors = getCors()\r\n  const proxyConfigs = Array.isArray(serverConfig.proxies) ? serverConfig.proxies : [ serverConfig.proxies ]\r\n  if(proxyConfigs.length === 0)\r\n    return\r\n\r\n  /*** Iterate proxy configs and start routing */\r\n  proxyConfigs.forEach(config => {\r\n    const options = getProxyOptions(config)\r\n    const proxyServer = httpProxy.createProxyServer(options)\r\n    const listenMessage = proxyListen(config)\r\n\r\n    proxyServer.on('error', (err, req, res) => {\r\n      log.error(err, 'error proxying request')\r\n      res.end()\r\n    })\r\n\r\n    proxyServer.on('proxyReq', (proxyReq, req, res, options) => { /* This event fires on proxy requests */ })\r\n\r\n\r\n    createProxyServer(http.createServer(onProxy))\r\n\r\n    const createProxyServer = server => {\r\n      if (config.allowWebSockets)\r\n        server.on('upgrade', (req, socket, head) => server.ws(req, socket, head))\r\n      server.listen(config.fromPort, () => log.info(listenMessage))\r\n    }\r\n\r\n    const onProxy = (req, res) => {\r\n      //if(!cors.isOk(req))\r\n        //return cors.handleFailure(req, res)\r\n\r\n      if(config.stub && config.stub[req.method])\r\n        return proxyStub(req, res)\r\n\r\n      if(req.method === 'OPTIONS')\r\n        //return cors.handlePreflight(req, res)\r\n\r\n      if (config.latency)\r\n        setTimeout(() => proxyServer.web(req, res), config.latency)\r\n      else\r\n        proxyServer.web(req, res)\r\n    }\r\n\r\n    const proxyStub = (req, res) => {\r\n      var stub = config.stub[req.method]\r\n      res.writeHead(200, stub.headers)\r\n      if (stub.headers['content-length'] === 0) res.end()\r\n      else res.end(JSON.stringify(stub.body))\r\n    }\r\n  })\r\n}\r\n\r\nconst getProxyOptions = config => {\r\n  var opts =  { target: config.target || `${config.toScheme}://${config.toHost}:config.toPort`\r\n              , xfwd: true\r\n              }\r\n  opts.secure = config.secure\r\n  return opts\r\n}\r\n"
  },
  {
    "__docId__": 80,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "proxyListen",
    "memberof": "lib/proxy.js",
    "longname": "lib/proxy.js~proxyListen",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/proxy.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 81,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "proxy",
    "memberof": "lib/proxy.js",
    "longname": "lib/proxy.js~proxy",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/proxy.js",
    "importStyle": "proxy",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 82,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getProxyOptions",
    "memberof": "lib/proxy.js",
    "longname": "lib/proxy.js~getProxyOptions",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/proxy.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 69,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 83,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/actions/api.js",
    "memberof": null,
    "longname": "lib/redux/actions/api.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\nimport 'isomorphic-fetch'\r\nimport { createAction } from 'redux-actions'\r\nimport jwtSimple from 'jwt-simple'\r\n\r\nimport { client, log } from '../../../config'\r\nimport { scheme, hostname, port, host, path } from '../../services/location'\r\nimport persistence from '../../services/persistence'\r\nimport  { CLEAR_DATA\r\n        , FETCH_DATA\r\n        , RECEIVE_DATA\r\n        , KEYED_DATA\r\n        } from '../constants'\r\n\r\nimport { forgetTokens, refreshIdentity } from './identity'\r\nimport APIError from '../../errors/APIError'\r\n\r\nconst { saveState, loadState, removeState } = persistence()\r\nconst getPersisted = () => loadState(['tokens', 'fingerprint'])\r\n\r\nconst { apis, clientId } = client\r\n\r\nconst noop = () => {}\r\n\r\nexport const clearData = createAction(CLEAR_DATA, ([apiName, actionName]) => ({ apiName, actionName }))\r\nconst fetchData = createAction(FETCH_DATA, ([apiName, actionName], inputData) => ({ apiName, actionName, inputData }))\r\nconst receiveData = createAction(RECEIVE_DATA, ([apiName, actionName], data) => ({ apiName, actionName, data }))\r\nconst receiveDataError = createAction(RECEIVE_DATA)\r\nconst keyedData = createAction(KEYED_DATA, ([apiName, actionName], [apiKey, actionKey], data) => ({ apiName, actionName, apiKey, actionKey, data }))\r\nconst keyedDataError = createAction(KEYED_DATA)\r\n\r\n\r\nexport const decodeToken = accessToken => jwtSimple.decode(accessToken, null, true)\r\nexport const isExpired = decodedToken => getExpiresInMS(decodedToken) < 0\r\nconst getExpiresInMS = decodedToken => decodedToken.exp * 1000 - Date.now()\r\n\r\nconst getTixClaimSchema = name => `http://schemas.tix.com/identity/claims/${name}`\r\nconst getClaim = (decodedToken, name) => decodedToken[name]\r\nconst hasTixClaim = (decodedToken, name, value) => hasClaim(decodedToken, getTixClaimSchema(name), value)\r\nconst getTixClaim = (decodedToken, name) => getClaim(decodedToken, getTixClaimSchema(name))\r\nconst hasRole = (decodedToken, roleName) => hasClaim(decodedToken, getTixClaimSchema('role'), roleName)\r\nconst hasClaim = (decodedToken, name, value) => {\r\n  let claim = getClaim(decodedToken, name)\r\n  // if claim exists but value was not specified, return true\r\n  if (claim && !value)\r\n    return true\r\n  if (claim)\r\n    return Array.isArray(claim) ? claim.indexOf(value) !== -1 : claim === value\r\n}\r\n\r\nconst resolveScheme = actionConfig => scheme\r\nconst resolvePort = actionConfig => actionConfig.extra && actionConfig.extra.port ? actionConfig.extra.port : port\r\nconst resolveHostname = actionConfig => actionConfig.extra && actionConfig.extra.hostname ? actionConfig.extra.hostname : hostname\r\n\r\nconst resolveBaseUrl = actionConfig => {\r\n  let resolvedScheme = resolveScheme(actionConfig)\r\n  let resolvedPort = resolvePort(actionConfig)\r\n  let resolvedHostname = resolveHostname(actionConfig)\r\n  if((resolvedScheme === 'https' && resolvedPort === 443) || (resolvedScheme === 'http' && resolvedPort === 80)) { /** NO NEED TO SPECIFY PORT IN HERE */\r\n    if(resolvedScheme === scheme && resolvedHostname === hostname && resolvedPort === port) /** SAME HOSTNAME, PORT, and SCHEME, NO NEED TO SPECIFY BASE URL */\r\n      return ''\r\n    return `${resolvedScheme}://${resolvedHostname}`\r\n  }\r\n  return `${resolvedScheme}://${resolvedHostname}:${resolvedPort}`\r\n}\r\n\r\nconst supportedPropTypes = ['string', 'bool', 'number']\r\nconst checkPropType = (key, prop, propType) => {\r\n  if(typeof prop === 'undefined' || prop === null)\r\n    throw new APIError(`Parameter with key '${key}' was null but API was expecting propType '${propType}'.`)\r\n  const getTypeError = () => new APIError(`Parameter with key '${key}' was not of expected propType '${propType}'.`)\r\n  switch(propType) {\r\n    case 'string':\r\n      if (typeof prop !== 'string')\r\n        throw getTypeError()\r\n      break\r\n    case 'bool':\r\n      if(typeof prop !== 'boolean')\r\n        throw getTypeError()\r\n      break\r\n    case 'number':\r\n      if(typeof prop !== 'number')\r\n        throw getTypeError()\r\n      break\r\n    case 'object':\r\n      if(typeof prop !== 'object')\r\n        throw getTypeError()\r\n      break\r\n    case 'array':\r\n      if(!Array.isArray(prop))\r\n        throw getTypeError()\r\n      break\r\n    case 'func':\r\n    default:\r\n      throw new APIError(`propType ${propType} is not supported for api interpolation. Reconfigure the api to use one of the supported propTypes => [${supportedPropTypes.join(', ')}]`)\r\n  }\r\n}\r\n\r\n\r\nconst resolveQuery = (actionConfig, inputData) => {\r\n  if(!(actionConfig.extra && actionConfig.extra.expects && actionConfig.extra.expects.query))\r\n    return ''\r\n  // TODO: COMPILE QUERY STRING\r\n  return '?'\r\n}\r\n\r\nconst getTemplateRegExp = replacer => new RegExp(`\\\\$\\\\{${replacer}\\\\}`, 'gi')\r\n/**\r\n * PATH = /some/path/looks/like/this/${variableName}/${another}\r\n * replacers = { variableName: 'path_seg_one', another: 'path_seg_two' }\r\n */\r\nconst compileTemplate = (path, replacers) => {\r\n  if(path.includes(' '))\r\n    throw new APIError('Space detected in path. This is not allowed.')\r\n  for(let key of Object.keys(replacers)) {\r\n    let re = getTemplateRegExp(key)\r\n    path = path.replace(re, replacers[key])\r\n  }\r\n  return path\r\n}\r\n\r\nconst resolvePath = (actionConfig, inputData) => {\r\n  // TODO: NEED TO COMPILE DYNAMIC PATHS\r\n  if(!(actionConfig.extra && actionConfig.extra.expects && actionConfig.extra.expects.route))\r\n    return actionConfig.path\r\n\r\n  const { route } = actionConfig.extra.expects\r\n  let possibleVariables = Object.keys(route)\r\n  let matchedVariables = Object.keys(inputData).filter(x => typeof inputData[x] !== 'undefined' && possibleVariables.includes(x))\r\n\r\n  if(__DEV__) {\r\n    //** VALIDATE REQUIRED VARIABLES */\r\n    let requiredVariables = possibleVariables.filter(x => route[x].isRequired)\r\n    let missedVariables = requiredVariables.filter(x => matchedVariables.includes(x) === false)\r\n    if(missedVariables.length > 0)\r\n      throw new APIError(`Route with path ${actionConfig.path} requires the following missing route variables => [${missedVariables.join(', ')}]`)\r\n\r\n    //** VALIDATE TYPED VARIABLES */\r\n    let typedVariables = matchedVariables.filter(x => route[x].propType)\r\n    typedVariables.forEach(x => checkPropType(x, inputData[x], route[x].propType))\r\n  }\r\n\r\n  /** Reduce to an object with key value map of things to be replaced. */\r\n  let replacers = matchedVariables.reduce((obj, key) => Object.assign({}, obj, { [key]: inputData[key].toString() }), {})\r\n  return compileTemplate(actionConfig.path, replacers)\r\n}\r\n\r\nconst resolveBody = (actionConfig, inputData) => {\r\n  if(!(actionConfig.extra && actionConfig.extra.expects && actionConfig.extra.expects.body))\r\n    return noop()\r\n\r\n  const { body } = actionConfig.extra.expects\r\n  let possibleVariables = Object.keys(body)\r\n  let matchedVariables = Object.keys(inputData).filter(x => typeof inputData[x] !== 'undefined' && possibleVariables.includes(x))\r\n\r\n  if(__DEV__) {\r\n    //** VALIDATE REQUIRED VARIABLES */\r\n    let requiredVariables = possibleVariables.filter(x => body[x].isRequired)\r\n    let missedVariables = requiredVariables.filter(x => matchedVariables.includes(x) === false)\r\n    if(missedVariables.length > 0)\r\n      throw new APIError(`Route with path ${actionConfig.path} requires the following missing body variables => [${missedVariables.join(', ')}], passed => [${JSON.stringify(inputData)}]`)\r\n\r\n    //** VALIDATE TYPED VARIABLES */\r\n    let typedVariables = matchedVariables.filter(x => body[x].propType)\r\n    typedVariables.forEach(x => checkPropType(x, inputData[x], body[x].propType))\r\n  }\r\n  let resolvedBody = matchedVariables.reduce((obj, key) => Object.assign({}, obj, { [key]: inputData[key] }), {})\r\n  return JSON.stringify(resolvedBody)\r\n}\r\n\r\nconst resolveInput = (actionConfig, inputData) => `${resolveBaseUrl(actionConfig)}${resolvePath(actionConfig, inputData)}${resolveQuery(actionConfig, inputData)}`\r\n\r\nconst resolveInit = (actionConfig, inputData) => {\r\n  /** TODO: NEED TO COMPILE ROUTES PATHS AND TEST IF THERE ARE REQUIRED DATA */\r\n  let body = resolveBody(actionConfig, inputData)\r\n  return Object.assign({}, actionConfig.init, { body })\r\n}\r\n\r\nconst getErrorCode = response => {\r\n  switch(response.statusText) {\r\n    default:\r\n      return 'API_UNCLASSIFIED'\r\n  }\r\n}\r\n\r\nconst getAPIError = (info, response) => {\r\n  const code = getErrorCode(response)\r\n  switch(response.status) {\r\n    default:\r\n      return new APIError(`An API error occurred => ${response.statusText}`, null, { ...info, response, code })\r\n  }\r\n}\r\n\r\nlet activeRequests = new Map()\r\nfunction executeFetch (input, init, transform, { apiName, actionName, inputData }) {\r\n  return (dispatch, getState) => {\r\n    const info = { input, init, apiName, actionName, inputData }\r\n    const key = JSON.stringify({ ...info, transform })\r\n    let request = activeRequests.get(key)\r\n    if(!request) {\r\n      dispatch(fetchData([apiName, actionName], inputData))\r\n      request = fetch(input, init)\r\n                  .then(response => {\r\n                    if(!response.ok) {\r\n                      if(response.status === 401)\r\n                        dispatch(forgetTokens())\r\n                      throw getAPIError(info, response)\r\n                    }\r\n                    return response.json()\r\n                  })\r\n                  .then(json => {\r\n                    let data = json\r\n                    if(transform)\r\n                      data = Array.isArray(json) ? json.map(transform) : transform(json)\r\n                    activeRequests.delete(key)\r\n                    dispatch(receiveData([apiName, actionName], data))\r\n                    return data\r\n                  })\r\n                  .catch(err => {\r\n                    activeRequests.delete(key)\r\n                    dispatch(receiveDataError(err))\r\n                    throw err\r\n                  })\r\n      activeRequests.set(key, request)\r\n    } else\r\n      log.info({ apiName, actionName }, 'request already processing, continuing on enqueued response.')\r\n    return request\r\n  }\r\n}\r\n\r\n\r\nconst resolveInputData = args => {\r\n  if(args.length > 0 && typeof args[0] !== 'function')\r\n    return args[0]\r\n}\r\n\r\nconst resolveTransform = args => {\r\n  if(args.length > 0) {\r\n    let lastArg = args[args.length - 1]\r\n    if(typeof lastArg === 'function')\r\n      return lastArg\r\n  }\r\n}\r\n\r\nconst getDecodedToken = accessToken => jwtSimple.decode(accessToken, null, true)\r\n\r\nconst getCookieData = () => {\r\n  const { tokens } = getPersisted()\r\n  const [accessToken, refreshToken] = tokens || []\r\n  const decodedToken = getDecodedToken(accessToken)\r\n  const fingerprint = getTixClaim(decodedToken, 'fingerprint')\r\n  const subject = getClaim(decodedToken, 'sub')\r\n  return { accessToken, refreshToken, fingerprint, subject }\r\n}\r\n\r\nconst authorizeInit = init => {\r\n  const { accessToken } = getCookieData()\r\n  let headers = Object.assign({}, init.headers, { Authorization: `Bearer ${accessToken}`})\r\n  return Object.assign({}, init, { headers })\r\n}\r\n\r\n\r\nexport function apiAction([apiName, actionName], ...args) {\r\n  const inputData = resolveInputData(args)\r\n  const transform = resolveTransform(args)\r\n  return (dispatch, getState) => {\r\n    try {\r\n      let apiConfig = apis[apiName]\r\n      if(!apiConfig) {\r\n        let err = new APIError(`Specified api does not exist, ensure api '${apiName}' exists in api config.`, null, { apiName, actionName, inputData })\r\n        dispatch(receiveDataError(err))\r\n        return Promise.reject(err)\r\n      }\r\n      let actionConfig = apiConfig[actionName]\r\n      if(!actionConfig) {\r\n        let err = new APIError(`Specified api action does not exist, ensure api '${apiName}' has an action definition for ${actionName}`, null, { apiName, actionName, inputData })\r\n        dispatch(receiveDataError(err))\r\n        return Promise.reject(err)\r\n      }\r\n\r\n      let info = { apiName, actionName, inputData }\r\n      let input = resolveInput(actionConfig, inputData)\r\n      let init = resolveInit(actionConfig, inputData)\r\n      const isAuthorized = actionConfig.extra && actionConfig.extra.isAuthorized\r\n      return dispatch(executeFetch(input, isAuthorized ? authorizeInit(init) : init, transform, info))\r\n    } catch(innerError) {\r\n      let err = new APIError('Unexpected error occurred during data fetch.', innerError, { apiName, actionName })\r\n      dispatch(receiveDataError(err))\r\n      return Promise.reject(err)\r\n    }\r\n  }\r\n}\r\n\r\nexport function keyedApiAction([apiName, actionName], [apiKey, actionKey], ...args) {\r\n  return (dispatch, getState) => {\r\n    try {\r\n      dispatch(apiAction([apiName, actionName], ...args))\r\n        .then(data => {\r\n          dispatch(keyedData([apiName, actionName], [apiKey, actionKey], data))\r\n          return data\r\n        })\r\n    } catch(innerError) {\r\n      let err = new APIError('Unexpected error occurred during keyed api fetch.', innerError, { apiName, actionName, actionKey })\r\n      dispatch(keyedDataError(err))\r\n    }\r\n  }\r\n}\r\n\r\n\r\nexport const logAccess = (path, query, title) => dispatch => dispatch(apiAction(['log', 'access'], { path, query, title }))\r\n"
  },
  {
    "__docId__": 84,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "saveState",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~saveState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 85,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getPersisted",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getPersisted",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 86,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "apis",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~apis",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 87,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "noop",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~noop",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 88,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "clearData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~clearData",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{clearData}",
    "description": null,
    "lineNumber": 25,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 89,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "fetchData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~fetchData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 26,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 90,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "receiveData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~receiveData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 27,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 91,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "receiveDataError",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~receiveDataError",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 28,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 92,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "keyedData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~keyedData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 29,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 93,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "keyedDataError",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~keyedDataError",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 30,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 94,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "decodeToken",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~decodeToken",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{decodeToken}",
    "description": null,
    "lineNumber": 33,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 95,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isExpired",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~isExpired",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{isExpired}",
    "description": null,
    "lineNumber": 34,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 96,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getExpiresInMS",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getExpiresInMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 35,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 97,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTixClaimSchema",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getTixClaimSchema",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 37,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 98,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getClaim",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 38,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 99,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasTixClaim",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~hasTixClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 39,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 100,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTixClaim",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getTixClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 40,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 101,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasRole",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~hasRole",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 41,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 102,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasClaim",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~hasClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 42,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 103,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveScheme",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveScheme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 51,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 104,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolvePort",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolvePort",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 52,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 105,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveHostname",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveHostname",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 53,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 106,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveBaseUrl",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveBaseUrl",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 55,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 107,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "supportedPropTypes",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~supportedPropTypes",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 67,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 108,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "checkPropType",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~checkPropType",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 68,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 109,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveQuery",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveQuery",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 100,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 110,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTemplateRegExp",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getTemplateRegExp",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 107,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 111,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "compileTemplate",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~compileTemplate",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": "PATH = /some/path/looks/like/this/${variableName}/${another}\nreplacers = { variableName: 'path_seg_one', another: 'path_seg_two' }",
    "lineNumber": 112,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 112,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolvePath",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolvePath",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 122,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 113,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveBody",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveBody",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 148,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 114,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveInput",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveInput",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 171,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 115,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveInit",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveInit",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 173,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 116,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getErrorCode",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getErrorCode",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 179,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 117,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getAPIError",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getAPIError",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 186,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 118,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "activeRequests",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~activeRequests",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 194,
    "undocument": true,
    "type": {
      "types": [
        "Map"
      ]
    }
  },
  {
    "__docId__": 119,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "executeFetch",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~executeFetch",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 195,
    "undocument": true,
    "params": [
      {
        "name": "input",
        "types": [
          "*"
        ]
      },
      {
        "name": "init",
        "types": [
          "*"
        ]
      },
      {
        "name": "transform",
        "types": [
          "*"
        ]
      },
      {
        "name": "objectPattern3",
        "types": [
          "{\"apiName\": *, \"actionName\": *, \"inputData\": *}"
        ],
        "defaultRaw": {
          "apiName": null,
          "actionName": null,
          "inputData": null
        },
        "defaultValue": "{\"apiName\":null,\"actionName\":null,\"inputData\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 120,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveInputData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveInputData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 232,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 121,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "resolveTransform",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~resolveTransform",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 237,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 122,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getDecodedToken",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getDecodedToken",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 245,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 123,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getCookieData",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~getCookieData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 247,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 124,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "authorizeInit",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~authorizeInit",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 256,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 125,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "apiAction",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~apiAction",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{apiAction}",
    "description": null,
    "lineNumber": 263,
    "undocument": true,
    "params": [
      {},
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 126,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "keyedApiAction",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~keyedApiAction",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{keyedApiAction}",
    "description": null,
    "lineNumber": 294,
    "undocument": true,
    "params": [
      {},
      {},
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 127,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "logAccess",
    "memberof": "lib/redux/actions/api.js",
    "longname": "lib/redux/actions/api.js~logAccess",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/api.js",
    "importStyle": "{logAccess}",
    "description": null,
    "lineNumber": 310,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 128,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/actions/autocomplete.js",
    "memberof": null,
    "longname": "lib/redux/actions/autocomplete.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { createAction } from 'redux-actions'\r\nimport { apiAction } from './api'\r\nimport  { UPDATE_INPUT_VALUE\r\n        , CLEAR_SUGGESTIONS\r\n        , FETCH_SUGGESTIONS\r\n        , FILTER_SUGGESTIONS\r\n        } from '../constants'\r\n\r\nexport const updateInputValue = createAction(UPDATE_INPUT_VALUE, ([apiName, actionName], value) => ({ apiName, actionName, value }))\r\nexport const clearSuggestions = createAction(CLEAR_SUGGESTIONS, ([apiName, actionName]) => ({ apiName, actionName }))\r\nexport const fetchSuggestions = createAction(FETCH_SUGGESTIONS, ([apiName, actionName]) => ({ apiName, actionName }))\r\nexport const filterSuggestions = createAction(FILTER_SUGGESTIONS, ([apiName, actionName], suggestions, value) => ({ apiName, actionName, suggestions, value }))\r\nexport const filterSuggestionsError = createAction(FILTER_SUGGESTIONS)\r\n\r\nexport function loadSuggestions([apiName, actionName], value) {\r\n  return (dispatch, getState) => {\r\n    let { api } = getState()\r\n    let suggestions = api.entities.getIn([apiName, actionName])\r\n    if(suggestions)\r\n      return Promise.resolve(dispatch(filterSuggestions([apiName, actionName], suggestions, value)))\r\n    dispatch(fetchSuggestions([apiName, actionName]))\r\n    return dispatch(apiAction([apiName, actionName]))\r\n      .then(data => dispatch(filterSuggestions([apiName, actionName], data, value)))\r\n      .catch(err => dispatch(filterSuggestionsError(err)))\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "__docId__": 129,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "updateInputValue",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~updateInputValue",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{updateInputValue}",
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 130,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "clearSuggestions",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~clearSuggestions",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{clearSuggestions}",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 131,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "fetchSuggestions",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~fetchSuggestions",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{fetchSuggestions}",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 132,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "filterSuggestions",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~filterSuggestions",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{filterSuggestions}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 133,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "filterSuggestionsError",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~filterSuggestionsError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{filterSuggestionsError}",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 134,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "loadSuggestions",
    "memberof": "lib/redux/actions/autocomplete.js",
    "longname": "lib/redux/actions/autocomplete.js~loadSuggestions",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/autocomplete.js",
    "importStyle": "{loadSuggestions}",
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "params": [
      {},
      {
        "name": "value",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 135,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/actions/errors.js",
    "memberof": null,
    "longname": "lib/redux/actions/errors.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { createAction } from 'redux-actions'\r\nimport  { ADD_ERROR\r\n        , DISMISS_ERROR\r\n        , CLEAR_ERRORS\r\n        } from '../constants'\r\n\r\n/** TODO: DECIDE BETWEEN THIS STYLE GENERIC OR ERRORS CROSS CUTTING EVENTS FROM ALL CATEGORIES */\r\n//export const addError = createAction(ADD_ERROR, (err, category, event) => ({ err, category, event }))\r\nexport const dismissError = createAction(DISMISS_ERROR, (category, id) => ({ category, id }))\r\nexport const clearErrors = createAction(CLEAR_ERRORS)\r\n"
  },
  {
    "__docId__": 136,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "dismissError",
    "memberof": "lib/redux/actions/errors.js",
    "longname": "lib/redux/actions/errors.js~dismissError",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/errors.js",
    "importStyle": "{dismissError}",
    "description": "TODO: DECIDE BETWEEN THIS STYLE GENERIC OR ERRORS CROSS CUTTING EVENTS FROM ALL CATEGORIES",
    "lineNumber": 9,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 137,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "clearErrors",
    "memberof": "lib/redux/actions/errors.js",
    "longname": "lib/redux/actions/errors.js~clearErrors",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/errors.js",
    "importStyle": "{clearErrors}",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 138,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/actions/identity.js",
    "memberof": null,
    "longname": "lib/redux/actions/identity.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { assert } from 'chai'\r\nimport { createAction } from 'redux-actions'\r\nimport { push } from 'react-router-redux'\r\nimport jwtSimple from 'jwt-simple'\r\nimport  { FORGET_TOKENS\r\n        , FORGOTTEN_TOKENS\r\n        , FORGET_FINGERPRINT\r\n        , FORGOTTEN_FINGERPRINT\r\n        , FETCH_IDENTITY\r\n        , SET_IDENTITY\r\n        , PERSISTED_TOKENS\r\n        , PERSISTED_FINGERPRINT\r\n        , POST_AUTHORIZE\r\n        , POST_AUTHORIZE_ADMIN\r\n        , IDENTITY_INVALID\r\n        , IDENTITY_EXPIRED\r\n        , RECEIVE_COOKIES\r\n        } from '../constants'\r\n\r\nimport { client, log, noop, IS_DEV } from '../../../config'\r\nimport { apiAction } from './api'\r\nimport IdentityError from '../../errors/IdentityError'\r\nimport persistence from '../../services/persistence'\r\nimport { goToPath } from '../../services/location'\r\nimport { getClaim, getTixClaim } from '../../services/claims'\r\n\r\nconst { saveState, loadState, removeState } = persistence()\r\nconst getPersisted = () => loadState(['tokens', 'fingerprint'])\r\n\r\n\r\nconst { clientId } = client\r\n\r\nexport const fetchIdentity = createAction(FETCH_IDENTITY)\r\nexport const setIdentity = createAction(SET_IDENTITY)\r\nexport const forgetTokens = createAction(FORGET_TOKENS)\r\n\r\nexport const authorized = (accessToken, refreshToken, decodedToken) => (dispatch, getState) => {\r\n  const state = getState()\r\n  if(!state.identity.isAuthorized || (state.identity.tokens.access !== accessToken && state.identity.tokens.refresh !== refreshToken)) {\r\n    dispatch(setIdentity({ tokens: { access: accessToken, refresh: refreshToken }, decodedToken }))\r\n  }\r\n}\r\n\r\nconst getDecodedToken = accessToken => jwtSimple.decode(accessToken, null, true)\r\n\r\nconst getCookieData = () => {\r\n  const { tokens, fingerprint } = getPersisted()\r\n  const [accessToken, refreshToken] = tokens || []\r\n  //TODO: THIS MAY HAVE ISSUES IF FINGERPRINT ISNT GETTING SYNCED QUICKLY\r\n  //const decodedToken = getDecodedToken(accessToken)\r\n  //const fingerprint = getTixClaim(decodedToken, 'fingerprint')\r\n  return  { accessToken\r\n          , refreshToken\r\n          , fingerprint\r\n          , subject: accessToken ? getClaim(getDecodedToken(accessToken), 'sub') : noop()\r\n          }\r\n}\r\n\r\nconst identityApi = (apiPath, args, {  genericError, successRedirect } = {}) => {\r\n  if(IS_DEV) {\r\n    assert.ok(apiPath, 'apiPath is required')\r\n    assert.isArray(apiPath)\r\n    assert.lengthOf(apiPath, 2)\r\n    assert.ok(args, 'args are required')\r\n    assert.typeOf(args, 'object')\r\n  }\r\n  return (dispatch, getState) => {\r\n    return dispatch(apiAction(apiPath, args))\r\n      .then(response => {\r\n        if(response.error)\r\n          throw new IdentityError(`Unable to authorize => ${JSON.stringify(response)}`)\r\n        if(typeof response === 'string' && response.includes('AllowOneTime')) {\r\n          const code = response.split('|')[1]\r\n          return dispatch(push(`/identity/maintenance/migrate/${code}`))\r\n        }\r\n        if(successRedirect) {\r\n          let newState = getState()\r\n          if(newState.identity.isAuthorized) {\r\n            if(typeof successRedirect === 'function') {\r\n              const redirectPath = successRedirect(newState)\r\n              if(typeof redirectPath === 'string')\r\n                goToPath(redirectPath, true)\r\n            } else if(typeof successRedirect === 'string')\r\n              goToPath(successRedirect, true)\r\n          }\r\n        }\r\n      })\r\n      .catch(err => {\r\n        if(genericError)\r\n          dispatch(setIdentity(new IdentityError(typeof genericError === 'function' ? genericError(err) : genericError, err)))\r\n      })\r\n  }\r\n}\r\n\r\nexport const authorizeIdentity = ({username, password, rememberMe = false}, successRedirect) => {\r\n  if(IS_DEV) {\r\n    assert.ok(username, 'username is required')\r\n    assert.ok(password, 'password is required')\r\n  }\r\n  return (dispatch, getState) => {\r\n    const { fingerprint } = getCookieData()\r\n    const args = { username, password, rememberMe, clientId, fingerprint }\r\n    const continuation = { successRedirect, genericError: 'Username and password were incorrect.' }\r\n    return dispatch(identityApi(['identity', 'authorize'], args, continuation))\r\n  }\r\n}\r\n\r\n\r\nexport const refreshIdentity = () => {\r\n  return (dispatch, getState) => {\r\n    const { accessToken, refreshToken, fingerprint, subject } = getCookieData()\r\n    if(IS_DEV) assert.ok(refreshToken, 'refreshToken is required')\r\n    const args =  { refreshToken, fingerprint, subject, clientId }\r\n    const continuation = { genericError: 'Error occurred while refreshing identity.' }\r\n    return dispatch(identityApi(['identity', 'refresh'], args, continuation))\r\n  }\r\n}\r\n\r\nexport const impersonateIdentity = ({ organizationId, userId }) => {\r\n  if(IS_DEV) assert.ok(organizationId || userId, 'must specify organizationId or userId to impersonate')\r\n  return (dispatch, getState) => {\r\n    const { accessToken, refreshToken, fingerprint, subject } = getCookieData()\r\n    if(IS_DEV) {\r\n      assert.ok(refreshToken, 'refreshToken is required for impersonate')\r\n      assert.ok(subject, 'subject is required for impersonate')\r\n    }\r\n    const args = { organizationId, userId, fingerprint, subject, refreshToken, clientId }\r\n    const continuation = { genericError: 'Error occurred while impersonating identity.' }\r\n    return dispatch(identityApi(['identity', 'impersonate'], args, continuation))\r\n  }\r\n}\r\n\r\n\r\n/** Creates an action that auto refreshes JWT tokens using a refresh token and randomized jitter offset time. */\r\nexport const createAutoRefresh = ({ getPersisted, jitterMaxMS = 30000 }) => (dispatch, getState) => {\r\n  let { identity } = getState()\r\n  if(!identity.refreshAtMS)\r\n    return (dispatch, getState) => {}\r\n  const jitterMS = Math.floor(Math.random() * jitterMaxMS)\r\n  const refreshMS = (identity.refreshAtMS - jitterMS) - Date.now()\r\n\r\n  log.info(`AUTOREFRESH IN ${refreshMS} MS, (JITTER => ${jitterMS})`)\r\n  if(refreshMS < 0) {\r\n    dispatch(refreshIdentity())\r\n    return (dispatch, getState) => {}\r\n  }\r\n  const timeoutID = setTimeout(() => dispatch(refreshIdentity()), refreshMS)\r\n  return (dispatch, getState) => {\r\n    clearTimeout(timeoutID)\r\n    log.debug('AUTOREFRESH CANCELLED')\r\n  }\r\n}\r\n\r\n/** Creates an action that synchronizes authorization information across multiple tabs. */\r\nexport const createAuthSync = ({ getPersisted, tokenResolver, pollFrequency = 1000 }) => (dispatch, getState) => {\r\n  let intervalID = setInterval(() => {\r\n    const { identity } = getState()\r\n    const stateTokens = identity.tokens\r\n\r\n    const cookieTokens = tokenResolver()\r\n    if(!stateTokens) { /** TAB IS NOT AUTHORIZED */\r\n      if(cookieTokens[0]) { /** ANOTHER TAB IS LOGGED IN */\r\n        log.warn({ cookieTokens }, 'DETECTED OTHER TAB AUTHORIZE... SYNCING')\r\n        dispatch(authorized(...cookieTokens))\r\n      }\r\n    } else { // TAB IS AUTHORIZED\r\n      if(!cookieTokens[0] || !cookieTokens[1]) { /** ANOTHER TAB LOGGED OUT */\r\n        log.warn('DETECTED OTHER TAB LOGOUT... FORGETTING')\r\n        dispatch(forgetTokens())\r\n      } else {\r\n        const latest = tokenResolver([stateTokens.access, stateTokens.refresh])\r\n        if(stateTokens.access !== latest[0] || stateTokens.refresh !== latest[1]) {\r\n          log.warn('DETECTED OTHER TAB TOKEN CHANGE WITH NEWER TOKEN... SYNCING')\r\n          dispatch(authorized(...latest))\r\n        }\r\n      }\r\n    }\r\n  }, pollFrequency)\r\n  return () => clearInterval(intervalID)\r\n}\r\n"
  },
  {
    "__docId__": 139,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "saveState",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~saveState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 27,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 140,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getPersisted",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~getPersisted",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 28,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 141,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "clientId",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~clientId",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 31,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 142,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "fetchIdentity",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~fetchIdentity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{fetchIdentity}",
    "description": null,
    "lineNumber": 33,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 143,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "setIdentity",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~setIdentity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{setIdentity}",
    "description": null,
    "lineNumber": 34,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 144,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "forgetTokens",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~forgetTokens",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{forgetTokens}",
    "description": null,
    "lineNumber": 35,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 145,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "authorized",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~authorized",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{authorized}",
    "description": null,
    "lineNumber": 37,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 146,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getDecodedToken",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~getDecodedToken",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 44,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 147,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getCookieData",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~getCookieData",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 46,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 148,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "identityApi",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~identityApi",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 59,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 149,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "authorizeIdentity",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~authorizeIdentity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{authorizeIdentity}",
    "description": null,
    "lineNumber": 95,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 150,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "refreshIdentity",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~refreshIdentity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{refreshIdentity}",
    "description": null,
    "lineNumber": 109,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 151,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "impersonateIdentity",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~impersonateIdentity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{impersonateIdentity}",
    "description": null,
    "lineNumber": 119,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 152,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createAutoRefresh",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~createAutoRefresh",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{createAutoRefresh}",
    "description": "Creates an action that auto refreshes JWT tokens using a refresh token and randomized jitter offset time.",
    "lineNumber": 135,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 153,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createAuthSync",
    "memberof": "lib/redux/actions/identity.js",
    "longname": "lib/redux/actions/identity.js~createAuthSync",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/identity.js",
    "importStyle": "{createAuthSync}",
    "description": "Creates an action that synchronizes authorization information across multiple tabs.",
    "lineNumber": 155,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 154,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/actions/visual.js",
    "memberof": null,
    "longname": "lib/redux/actions/visual.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { createAction } from 'redux-actions'\r\nimport  { TOGGLE_VISIBILITY\r\n        , SET_VISIBILITY\r\n        , SET_THEME\r\n        , TOGGLE_EXPANDER\r\n        , SET_EXPANDER\r\n        , SET_TEXT\r\n        , REGISTER_TOOLTIP\r\n        , DISPOSE_TOOLTIP\r\n        } from '../constants'\r\n\r\nexport const toggleVisibility = createAction(TOGGLE_VISIBILITY, (componentID, value = true, options = [false, true]) => ({ componentID, value, options }))\r\nexport const setVisibility = createAction(SET_VISIBILITY, (componentID, value, options = [false, true]) => ({ componentID, value, options }))\r\nexport const setTheme = createAction(SET_THEME, name => ({ name }))\r\nexport const setText = createAction(SET_TEXT)\r\n\r\nexport const setExpander = createAction(SET_EXPANDER, (componentID, value) => ({ componentID, value }))\r\nexport const toggleExpander = createAction(TOGGLE_EXPANDER, (componentID, initialValue = false) => ({ componentID, initialValue }))\r\n\r\n\r\nexport const registerTooltip = createAction(REGISTER_TOOLTIP, (componentID, props) => ({ componentID, props }))\r\nexport const disposeTooltip = createAction(DISPOSE_TOOLTIP, componentID => ({ componentID }))\r\n"
  },
  {
    "__docId__": 155,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "toggleVisibility",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~toggleVisibility",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{toggleVisibility}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 156,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "setVisibility",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~setVisibility",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{setVisibility}",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 157,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "setTheme",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~setTheme",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{setTheme}",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 158,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "setText",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~setText",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{setText}",
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 159,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "setExpander",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~setExpander",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{setExpander}",
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 160,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "toggleExpander",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~toggleExpander",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{toggleExpander}",
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 161,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "registerTooltip",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~registerTooltip",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{registerTooltip}",
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 162,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "disposeTooltip",
    "memberof": "lib/redux/actions/visual.js",
    "longname": "lib/redux/actions/visual.js~disposeTooltip",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/actions/visual.js",
    "importStyle": "{disposeTooltip}",
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 163,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/constants.js",
    "memberof": null,
    "longname": "lib/redux/constants.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "\r\n/** DATA */\r\nexport const CLEAR_DATA = 'CLEAR_DATA'\r\nexport const FETCH_DATA = 'FETCH_DATA'\r\nexport const RECEIVE_DATA = 'RECEIVE_DATA'\r\nexport const KEYED_DATA = 'KEYED_DATA'\r\n\r\n/** IDENTITY */\r\nexport const FORGET_TOKENS = 'FORGET_TOKENS'\r\nexport const FORGOTTEN_TOKENS = 'FORGOTTEN_TOKENS'\r\nexport const FORGET_FINGERPRINT = 'FORGET_FINGERPRINT'\r\nexport const FORGOTTEN_FINGERPRINT = 'FORGOTTEN_FINGERPRINT'\r\nexport const HYDRATE_TOKENS = 'HYDRATE_TOKENS'\r\nexport const PERSISTED_TOKENS = 'PERSISTED_TOKENS'\r\nexport const HYDRATE_FINGERPRINT = 'HYDRATE_FINGERPRINT'\r\nexport const PERSISTED_FINGERPRINT = 'PERSISTED_FINGERPRINT'\r\nexport const HYDRATE_IDENTITY = 'HYDRATE_IDENTITY'\r\nexport const FETCH_AUTHORIZE_IDENTITY = 'FETCH_AUTHORIZE_IDENTITY'\r\nexport const RECEIVE_AUTHORIZE_IDENTITY = 'RECEIVE_AUTHORIZE_IDENTITY'\r\nexport const FETCH_REFRESH_IDENTITY = 'FETCH_REFRESH_IDENTITY'\r\nexport const RECEIVE_REFRESH_IDENTITY = 'RECEIVE_REFRESH_IDENTITY'\r\nexport const FETCH_IMPERSONATE_IDENTITY = 'FETCH_IMPERSONATE_IDENTITY'\r\nexport const RECEIVE_IMPERSONATE_IDENTITY = 'RECEIVE_IMPERSONATE_IDENTITY'\r\nexport const FETCH_MONIKERS = 'FETCH_MONIKERS'\r\nexport const RECEIVE_MONIKERS = 'RECEIVE_MONIKERS'\r\nexport const IDENTITY_INVALID = 'IDENTITY_INVALID'\r\nexport const IDENTITY_EXPIRED = 'IDENTITY_EXPIRED'\r\n\r\nexport const FETCH_IDENTITY = 'FETCH_IDENTITY'\r\nexport const SET_IDENTITY = 'SET_IDENTITY'\r\n\r\n/** EVENTS */\r\nexport const AUTHORIZE_MIDDLEWARE = 'AUTHORIZE_MIDDLEWARE'\r\nexport const POST_AUTHORIZE = 'POST_AUTHORIZE'\r\nexport const POST_AUTHORIZE_ADMIN = 'POST_AUTHORIZE_ADMIN'\r\n\r\n/** CROSS CUTTING */\r\nexport const ADD_ERROR = 'ADD_ERROR'\r\nexport const DISMISS_ERROR = 'DISMISS_ERROR'\r\nexport const CLEAR_ERRORS = 'CLEAR_ERRORS'\r\n\r\n/** TIMEOUT */\r\nexport const ACTIVE_SESSION = 'ACTIVE_SESSION'\r\nexport const INACTIVE_SESSION = 'INACTIVE_SESSION'\r\nexport const EXPIRED_SESSION = 'EXPIRED_SESSION'\r\nexport const SET_SESSION_TIMEOUTS = 'SET_SESSION_TIMEOUTS'\r\n\r\n/** SUGGESTIONS */\r\nexport const UPDATE_INPUT_VALUE = 'UPDATE_INPUT_VALUE'\r\nexport const CLEAR_SUGGESTIONS = 'CLEAR_SUGGESTIONS'\r\nexport const FETCH_SUGGESTIONS = 'FETCH_SUGGESTIONS'\r\nexport const FILTER_SUGGESTIONS = 'FILTER_SUGGESTIONS'\r\n\r\n/** VISUAL */\r\nexport const TOGGLE_VISIBILITY = 'TOGGLE_VISIBILITY'\r\nexport const SET_VISIBILITY = 'SET_VISIBILITY'\r\nexport const SET_THEME = 'SET_THEME'\r\nexport const TOGGLE_EXPANDER = 'TOGGLE_EXPANDER'\r\nexport const SET_EXPANDER = 'SET_EXPANDER'\r\nexport const SET_TEXT = 'SET_TEXT'\r\nexport const REGISTER_TOOLTIP = 'REGISTER_TOOLTIP'\r\nexport const DISPOSE_TOOLTIP = 'DISPOSE_TOOLTIP'\r\n\r\n\r\n/** VALIDATION */\r\nexport const SET_VALIDATED = 'SET_VALIDATED'\r\nexport const CLEAR_VALIDATED = 'CLEAR_VALIDATED'\r\n"
  },
  {
    "__docId__": 164,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CLEAR_DATA",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~CLEAR_DATA",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{CLEAR_DATA}",
    "description": "DATA",
    "lineNumber": 3,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 165,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_DATA",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_DATA",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_DATA}",
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 166,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "RECEIVE_DATA",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~RECEIVE_DATA",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{RECEIVE_DATA}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 167,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "KEYED_DATA",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~KEYED_DATA",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{KEYED_DATA}",
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 168,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FORGET_TOKENS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FORGET_TOKENS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FORGET_TOKENS}",
    "description": "IDENTITY",
    "lineNumber": 9,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 169,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FORGOTTEN_TOKENS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FORGOTTEN_TOKENS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FORGOTTEN_TOKENS}",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 170,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FORGET_FINGERPRINT",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FORGET_FINGERPRINT",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FORGET_FINGERPRINT}",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 171,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FORGOTTEN_FINGERPRINT",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FORGOTTEN_FINGERPRINT",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FORGOTTEN_FINGERPRINT}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 172,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HYDRATE_TOKENS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~HYDRATE_TOKENS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{HYDRATE_TOKENS}",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 173,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "PERSISTED_TOKENS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~PERSISTED_TOKENS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{PERSISTED_TOKENS}",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 174,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HYDRATE_FINGERPRINT",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~HYDRATE_FINGERPRINT",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{HYDRATE_FINGERPRINT}",
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 175,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "PERSISTED_FINGERPRINT",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~PERSISTED_FINGERPRINT",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{PERSISTED_FINGERPRINT}",
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 176,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HYDRATE_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~HYDRATE_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{HYDRATE_IDENTITY}",
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 177,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_AUTHORIZE_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_AUTHORIZE_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_AUTHORIZE_IDENTITY}",
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 178,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "RECEIVE_AUTHORIZE_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~RECEIVE_AUTHORIZE_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{RECEIVE_AUTHORIZE_IDENTITY}",
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 179,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_REFRESH_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_REFRESH_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_REFRESH_IDENTITY}",
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 180,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "RECEIVE_REFRESH_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~RECEIVE_REFRESH_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{RECEIVE_REFRESH_IDENTITY}",
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 181,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_IMPERSONATE_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_IMPERSONATE_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_IMPERSONATE_IDENTITY}",
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 182,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "RECEIVE_IMPERSONATE_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~RECEIVE_IMPERSONATE_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{RECEIVE_IMPERSONATE_IDENTITY}",
    "description": null,
    "lineNumber": 23,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 183,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_MONIKERS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_MONIKERS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_MONIKERS}",
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 184,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "RECEIVE_MONIKERS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~RECEIVE_MONIKERS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{RECEIVE_MONIKERS}",
    "description": null,
    "lineNumber": 25,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 185,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "IDENTITY_INVALID",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~IDENTITY_INVALID",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{IDENTITY_INVALID}",
    "description": null,
    "lineNumber": 26,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 186,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "IDENTITY_EXPIRED",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~IDENTITY_EXPIRED",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{IDENTITY_EXPIRED}",
    "description": null,
    "lineNumber": 27,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 187,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_IDENTITY}",
    "description": null,
    "lineNumber": 29,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 188,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_IDENTITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_IDENTITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_IDENTITY}",
    "description": null,
    "lineNumber": 30,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 189,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "AUTHORIZE_MIDDLEWARE",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~AUTHORIZE_MIDDLEWARE",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{AUTHORIZE_MIDDLEWARE}",
    "description": "EVENTS",
    "lineNumber": 33,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 190,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "POST_AUTHORIZE",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~POST_AUTHORIZE",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{POST_AUTHORIZE}",
    "description": null,
    "lineNumber": 34,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 191,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "POST_AUTHORIZE_ADMIN",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~POST_AUTHORIZE_ADMIN",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{POST_AUTHORIZE_ADMIN}",
    "description": null,
    "lineNumber": 35,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 192,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "ADD_ERROR",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~ADD_ERROR",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{ADD_ERROR}",
    "description": "CROSS CUTTING",
    "lineNumber": 38,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 193,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "DISMISS_ERROR",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~DISMISS_ERROR",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{DISMISS_ERROR}",
    "description": null,
    "lineNumber": 39,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 194,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CLEAR_ERRORS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~CLEAR_ERRORS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{CLEAR_ERRORS}",
    "description": null,
    "lineNumber": 40,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 195,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "ACTIVE_SESSION",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~ACTIVE_SESSION",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{ACTIVE_SESSION}",
    "description": "TIMEOUT",
    "lineNumber": 43,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 196,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "INACTIVE_SESSION",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~INACTIVE_SESSION",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{INACTIVE_SESSION}",
    "description": null,
    "lineNumber": 44,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 197,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "EXPIRED_SESSION",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~EXPIRED_SESSION",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{EXPIRED_SESSION}",
    "description": null,
    "lineNumber": 45,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 198,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_SESSION_TIMEOUTS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_SESSION_TIMEOUTS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_SESSION_TIMEOUTS}",
    "description": null,
    "lineNumber": 46,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 199,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "UPDATE_INPUT_VALUE",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~UPDATE_INPUT_VALUE",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{UPDATE_INPUT_VALUE}",
    "description": "SUGGESTIONS",
    "lineNumber": 49,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 200,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CLEAR_SUGGESTIONS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~CLEAR_SUGGESTIONS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{CLEAR_SUGGESTIONS}",
    "description": null,
    "lineNumber": 50,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 201,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FETCH_SUGGESTIONS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FETCH_SUGGESTIONS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FETCH_SUGGESTIONS}",
    "description": null,
    "lineNumber": 51,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 202,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FILTER_SUGGESTIONS",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~FILTER_SUGGESTIONS",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{FILTER_SUGGESTIONS}",
    "description": null,
    "lineNumber": 52,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 203,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "TOGGLE_VISIBILITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~TOGGLE_VISIBILITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{TOGGLE_VISIBILITY}",
    "description": "VISUAL",
    "lineNumber": 55,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 204,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_VISIBILITY",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_VISIBILITY",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_VISIBILITY}",
    "description": null,
    "lineNumber": 56,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 205,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_THEME",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_THEME",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_THEME}",
    "description": null,
    "lineNumber": 57,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 206,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "TOGGLE_EXPANDER",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~TOGGLE_EXPANDER",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{TOGGLE_EXPANDER}",
    "description": null,
    "lineNumber": 58,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 207,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_EXPANDER",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_EXPANDER",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_EXPANDER}",
    "description": null,
    "lineNumber": 59,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 208,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_TEXT",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_TEXT",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_TEXT}",
    "description": null,
    "lineNumber": 60,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 209,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "REGISTER_TOOLTIP",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~REGISTER_TOOLTIP",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{REGISTER_TOOLTIP}",
    "description": null,
    "lineNumber": 61,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 210,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "DISPOSE_TOOLTIP",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~DISPOSE_TOOLTIP",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{DISPOSE_TOOLTIP}",
    "description": null,
    "lineNumber": 62,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 211,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SET_VALIDATED",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~SET_VALIDATED",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{SET_VALIDATED}",
    "description": "VALIDATION",
    "lineNumber": 66,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 212,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CLEAR_VALIDATED",
    "memberof": "lib/redux/constants.js",
    "longname": "lib/redux/constants.js~CLEAR_VALIDATED",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/constants.js",
    "importStyle": "{CLEAR_VALIDATED}",
    "description": null,
    "lineNumber": 67,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 213,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/DevTools.js",
    "memberof": null,
    "longname": "lib/redux/DevTools.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import React from 'react'\r\n\r\nimport { createDevTools, ActionCreators } from 'redux-devtools'\r\n//import LogMonitor from 'redux-devtools-log-monitor'\r\nimport { createGridMonitor } from 'redux-devtools-grid-monitor'\r\nimport DockMonitor from 'redux-devtools-dock-monitor'\r\nimport MultipleMonitors from 'redux-devtools-multiple-monitors'\r\n\r\nconst GridMonitor = createGridMonitor({ React, ActionCreators })\r\n\r\nexport default createDevTools(\r\n  <DockMonitor toggleVisibilityKey=\"ctrl-h\" changePositionKey=\"ctrl-q\" defaultIsVisible={false}>\r\n    <GridMonitor />\r\n  {/*\r\n    <MultipleMonitors>\r\n      <LogMonitor />\r\n      <GridMonitor />\r\n    </MultipleMonitors>\r\n  */}\r\n  </DockMonitor>\r\n)\r\n"
  },
  {
    "__docId__": 214,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "GridMonitor",
    "memberof": "lib/redux/DevTools.js",
    "longname": "lib/redux/DevTools.js~GridMonitor",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/DevTools.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 215,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/modules/redux-idle-monitor.js",
    "memberof": null,
    "longname": "lib/redux/modules/redux-idle-monitor.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import configure  from 'redux-idle-monitor'\r\nimport { push } from 'react-router-redux'\r\n\r\nimport { packageName, title, subtitle, IS_BROWSER } from '../../../config'\r\nimport { setText } from '../actions/visual'\r\n\r\nexport const IDLESTATUS_INACTIVE = 'INACTIVE'\r\n\r\nexport const IDLE_STATUSES =  [ IDLESTATUS_INACTIVE\r\n                              ]\r\n\r\n\r\nexport const idleStatusDelay = idleStatus => (dispatch, getState) => 30000\r\n\r\n\r\nexport const activeStatusAction = (dispatch, getState) =>  {\r\n  dispatch(setText({ subtitle }))\r\n}\r\n\r\nexport const idleStatusAction = idleStatus => (dispatch, getState) => {\r\n  dispatch(setText({ subtitle }))\r\n}\r\n\r\nconst opts = { appName: title, IDLE_STATUSES, idleStatusDelay, activeStatusAction, idleStatusAction }\r\n\r\nconst { reducer, actions, middleware } = configure(opts)\r\nconst { start, stop, gotoIdleStatus } = actions\r\nexport default reducer\r\nexport { actions, middleware }\r\nexport { start, stop, gotoIdleStatus }\r\n"
  },
  {
    "__docId__": 216,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "IDLESTATUS_INACTIVE",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~IDLESTATUS_INACTIVE",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": "{IDLESTATUS_INACTIVE}",
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 217,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "IDLE_STATUSES",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~IDLE_STATUSES",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": "{IDLE_STATUSES}",
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 218,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "idleStatusDelay",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~idleStatusDelay",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": "{idleStatusDelay}",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 219,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "activeStatusAction",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~activeStatusAction",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": "{activeStatusAction}",
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 220,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "idleStatusAction",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~idleStatusAction",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": "{idleStatusAction}",
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 221,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "opts",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~opts",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 222,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "reducer",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~reducer",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 26,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 223,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "start",
    "memberof": "lib/redux/modules/redux-idle-monitor.js",
    "longname": "lib/redux/modules/redux-idle-monitor.js~start",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/modules/redux-idle-monitor.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 27,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 224,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/api.js",
    "memberof": null,
    "longname": "lib/redux/reducers/api.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Immutable from 'immutable'\r\nimport  { CLEAR_DATA\r\n        , FETCH_DATA\r\n        , RECEIVE_DATA\r\n        , KEYED_DATA\r\n        , AUTHORIZE_MIDDLEWARE\r\n        , RECEIVE_AUTHORIZE_IDENTITY\r\n        , RECEIVE_REFRESH_IDENTITY\r\n        , RECEIVE_IMPERSONATE_IDENTITY\r\n        } from '../constants'\r\n\r\nfunction entities(state = Immutable.Map(), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error || !payload)\r\n    return state\r\n  const { apiName, actionName, actionKey, data } = payload\r\n  switch(type) {\r\n    case KEYED_DATA:\r\n      return state.setIn([apiName, actionKey], data)\r\n    case RECEIVE_DATA:\r\n      return state.setIn([apiName, actionName], data)\r\n    case CLEAR_DATA:\r\n      return state.deleteIn([apiName, actionName])\r\n  }\r\n  return state\r\n}\r\n\r\nfunction isFetching(state = Immutable.Map(), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(!type || !payload)\r\n    return state\r\n  const { apiName, actionName, actionKey, inputData, data } = payload\r\n  switch(type) {\r\n    case FETCH_DATA:\r\n      return state.setIn([apiName, actionName], !error)\r\n    case RECEIVE_DATA:\r\n    case CLEAR_DATA:\r\n      return state.setIn([apiName, actionName], false)\r\n    case KEYED_DATA:\r\n      return state.setIn([apiName, actionKey], false)\r\n  }\r\n  return state\r\n}\r\n\r\nexport const initialState = { entities: entities()\r\n                            , isFetching: isFetching()\r\n                            }\r\n\r\nexport default function api(state = initialState, action) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FETCH_DATA:\r\n      return Object.assign({}, state, { isFetching: isFetching(state.isFetching, action) })\r\n    case RECEIVE_DATA:\r\n    case KEYED_DATA:\r\n    case CLEAR_DATA:\r\n      return Object.assign({}, state, { entities: entities(state.entities, action)\r\n                                      , isFetching: isFetching(state.isFetching, action)\r\n                                      })\r\n  }\r\n  return state\r\n}\r\n"
  },
  {
    "__docId__": 225,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "entities",
    "memberof": "lib/redux/reducers/api.js",
    "longname": "lib/redux/reducers/api.js~entities",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 226,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "isFetching",
    "memberof": "lib/redux/reducers/api.js",
    "longname": "lib/redux/reducers/api.js~isFetching",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/api.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 28,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 227,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialState",
    "memberof": "lib/redux/reducers/api.js",
    "longname": "lib/redux/reducers/api.js~initialState",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/api.js",
    "importStyle": "{initialState}",
    "description": null,
    "lineNumber": 45,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 228,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "api",
    "memberof": "lib/redux/reducers/api.js",
    "longname": "lib/redux/reducers/api.js~api",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/api.js",
    "importStyle": "api",
    "description": null,
    "lineNumber": 49,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "initialState",
        "defaultValue": "initialState"
      },
      {
        "name": "action",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 229,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/autocomplete.js",
    "memberof": null,
    "longname": "lib/redux/reducers/autocomplete.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import  { UPDATE_INPUT_VALUE\r\n        , CLEAR_SUGGESTIONS\r\n        , FETCH_SUGGESTIONS\r\n        , FILTER_SUGGESTIONS\r\n        } from '../constants'\r\n\r\n\r\nconst digitsRE = /\\(?\\d+\\)?/g\r\nconst wordsRE = /[\\w\\(\\)]+/ig\r\n\r\nconst idFilter = (id, value) => {\r\n  let inputDigits = value.match(digitsRE)\r\n  if(!inputDigits)\r\n    return false\r\n  return inputDigits.some(x => `(${id})`.includes(x))\r\n}\r\n\r\nconst nameFilter = (name, value) => {\r\n  let inputWords = value.match(wordsRE)\r\n  if(!inputWords)\r\n    return false\r\n  return inputWords.some(x => name.toLowerCase().includes(x.toLowerCase()))\r\n}\r\n\r\nconst monikerFilter = (moniker, value) => {\r\n  if(!value)\r\n    return false\r\n  return nameFilter(moniker.name, value) || idFilter(moniker.id, value)\r\n}\r\n\r\nfunction value(state = '', action = {}) {\r\n  const { type, payload, error } = action\r\n  switch (type) {\r\n    case UPDATE_INPUT_VALUE:\r\n      const { value } = payload\r\n      return value\r\n  }\r\n  return state\r\n}\r\n\r\nfunction suggestions(state = [], action = {}) {\r\n  const { type, payload, error } = action\r\n  switch (type) {\r\n    case CLEAR_SUGGESTIONS:\r\n      return []\r\n    case FILTER_SUGGESTIONS:\r\n      if(state.value === payload.value)\r\n        return payload.suggestions\r\n      return payload.suggestions.filter(moniker => monikerFilter(moniker, payload.value)).sort((a, b) => (a.id - b.id)).slice(0, 12)\r\n  }\r\n  return state\r\n}\r\n\r\nfunction isLoading(state = false, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch (type) {\r\n    case FETCH_SUGGESTIONS:\r\n      return true\r\n    case FILTER_SUGGESTIONS:\r\n      return false\r\n  }\r\n  return state\r\n}\r\n\r\nconst initialState =  { value: value()\r\n                      , suggestions: suggestions()\r\n                      , isLoading: isLoading()\r\n                      }\r\n\r\nexport default function autocomplete(state = initialState, action) {\r\n  const { type, payload, error } = action\r\n  switch (type) {\r\n    case UPDATE_INPUT_VALUE:\r\n    case CLEAR_SUGGESTIONS:\r\n    case FETCH_SUGGESTIONS:\r\n    case FILTER_SUGGESTIONS:\r\n      return Object.assign({}, state, { value: value(state.value, action)\r\n                                      , suggestions: suggestions(state.suggestions, action)\r\n                                      , isLoading: isLoading(state.isLoading, action)\r\n                                      })\r\n  }\r\n  return state\r\n}\r\n"
  },
  {
    "__docId__": 230,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "digitsRE",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~digitsRE",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "object"
      ]
    }
  },
  {
    "__docId__": 231,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "wordsRE",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~wordsRE",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "object"
      ]
    }
  },
  {
    "__docId__": 232,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "idFilter",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~idFilter",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 233,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "nameFilter",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~nameFilter",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 234,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "monikerFilter",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~monikerFilter",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 25,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 235,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "value",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~value",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 31,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "string"
        ],
        "defaultRaw": "",
        "defaultValue": ""
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 236,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "suggestions",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~suggestions",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 41,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*[]"
        ],
        "defaultRaw": [],
        "defaultValue": "[]"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 237,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "isLoading",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~isLoading",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 54,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "boolean"
        ],
        "defaultRaw": false,
        "defaultValue": "false"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 238,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialState",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~initialState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 65,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 239,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "autocomplete",
    "memberof": "lib/redux/reducers/autocomplete.js",
    "longname": "lib/redux/reducers/autocomplete.js~autocomplete",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/autocomplete.js",
    "importStyle": "autocomplete",
    "description": null,
    "lineNumber": 70,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "initialState",
        "defaultValue": "initialState"
      },
      {
        "name": "action",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 240,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/errors.js",
    "memberof": null,
    "longname": "lib/redux/reducers/errors.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Immutable from 'immutable'\r\nimport  { CLEAR_ERRORS\r\n        , DISMISS_ERROR\r\n        , FETCH_DATA\r\n        , RECEIVE_DATA\r\n        , KEYED_DATA\r\n        , CLEAR_DATA\r\n        , AUTHORIZE_MIDDLEWARE\r\n        , RECEIVE_AUTHORIZE_IDENTITY\r\n        , RECEIVE_REFRESH_IDENTITY\r\n        , RECEIVE_IMPERSONATE_IDENTITY\r\n        , FETCH_IDENTITY\r\n        , SET_IDENTITY\r\n        , FORGET_TOKENS\r\n        , FORGET_FINGERPRINT\r\n        , IDENTITY_INVALID\r\n        , IDENTITY_EXPIRED\r\n        } from '../constants'\r\n\r\nexport default function errors(state = Immutable.fromJS({ api: [], identity: [] }), action = {}) {\r\n  const { type, payload, error } = action\r\n\r\n  // HANDLE NON ERRORS\r\n  if(!error) {\r\n    switch(type) {\r\n      case DISMISS_ERROR:\r\n        const { category, id } = payload\r\n        return state.deleteIn([category, id])\r\n      case CLEAR_ERRORS:\r\n      case RECEIVE_AUTHORIZE_IDENTITY:\r\n      case RECEIVE_REFRESH_IDENTITY:\r\n      case RECEIVE_IMPERSONATE_IDENTITY:\r\n      case SET_IDENTITY:\r\n        return Immutable.fromJS({ api: [], identity: [] })\r\n      case FETCH_DATA:\r\n        return state.set('identity', Immutable.List())\r\n    }\r\n    return state\r\n  }\r\n\r\n  const err = payload ? payload : new Error('Unknown Error')\r\n\r\n  // HANDLE ERRORS\r\n  switch(type) {\r\n    case AUTHORIZE_MIDDLEWARE:\r\n    case DISMISS_ERROR:\r\n    case RECEIVE_AUTHORIZE_IDENTITY:\r\n    case RECEIVE_REFRESH_IDENTITY:\r\n    case RECEIVE_IMPERSONATE_IDENTITY:\r\n    case FETCH_DATA:\r\n    case RECEIVE_DATA:\r\n    case KEYED_DATA:\r\n    case CLEAR_DATA:\r\n      return state.update('api', x => x.unshift(err))\r\n    case FETCH_IDENTITY:\r\n    case SET_IDENTITY:\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    case IDENTITY_EXPIRED:\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return state.update('identity', x => x.unshift(err))\r\n  }\r\n  return state\r\n}\r\n"
  },
  {
    "__docId__": 241,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "errors",
    "memberof": "lib/redux/reducers/errors.js",
    "longname": "lib/redux/reducers/errors.js~errors",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/errors.js",
    "importStyle": "errors",
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 242,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/identity.js",
    "memberof": null,
    "longname": "lib/redux/reducers/identity.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Immutable from 'immutable'\r\nimport  { FORGET_TOKENS\r\n        , FORGET_FINGERPRINT\r\n        , FETCH_IDENTITY\r\n        , SET_IDENTITY\r\n        , POST_AUTHORIZE\r\n        , POST_AUTHORIZE_ADMIN\r\n        , IDENTITY_INVALID\r\n        , IDENTITY_EXPIRED\r\n        , AUTHORIZE_MIDDLEWARE\r\n        } from '../constants'\r\n\r\nconst getTixClaimSchema = name => `http://schemas.tix.com/identity/claims/${name}`\r\nconst getClaim = (decodedToken, name) => decodedToken[name]\r\nconst hasTixClaim = (decodedToken, name, value) => hasClaim(decodedToken, getTixClaimSchema(name), value)\r\nconst getTixClaim = (decodedToken, name) => getClaim(decodedToken, getTixClaimSchema(name))\r\nconst hasRole = (decodedToken, roleName) => hasClaim(decodedToken, getTixClaimSchema('role'), roleName)\r\nconst hasClaim = (decodedToken, name, value) => {\r\n  let claim = getClaim(decodedToken, name)\r\n  // if claim exists but value was not specified, return true\r\n  if (claim && !value)\r\n    return true\r\n  if (claim)\r\n    return Array.isArray(claim) ? claim.indexOf(value) !== -1 : claim === value\r\n}\r\n\r\n\r\nfunction tokens(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case SET_IDENTITY:\r\n      if(error || !payload.tokens)\r\n        return null\r\n      return payload.tokens\r\n    case FORGET_TOKENS:\r\n    case IDENTITY_INVALID:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n  }\r\n  return state\r\n}\r\n\r\nfunction fingerprint(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_FINGERPRINT:\r\n      return null\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return state\r\n      const { decodedToken } = payload\r\n      return getTixClaim(decodedToken, 'fingerprint')\r\n  }\r\n  return state\r\n}\r\n\r\n\r\nfunction isFetching(state = false, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FETCH_IDENTITY:\r\n      return true\r\n    case SET_IDENTITY:\r\n      return false\r\n  }\r\n  return state\r\n}\r\n\r\nfunction isAuthorized(state = false, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return false\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? false : state\r\n    case SET_IDENTITY:\r\n      return error ? false : true\r\n  }\r\n  return state\r\n}\r\n\r\nfunction isAdmin(state = false, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return false\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? false : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return false\r\n      const { decodedToken } = payload\r\n      const id = getTixClaim(decodedToken, 'actualorganizationid')\r\n      return id === 1\r\n  }\r\n  return state\r\n}\r\n\r\nfunction subject(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error)\r\n    return state\r\n  switch(type) {\r\n    case SET_IDENTITY:\r\n      const { decodedToken } = payload\r\n      return getClaim(decodedToken, 'sub')\r\n  }\r\n  return state\r\n}\r\n\r\nfunction user(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      let fullName = getTixClaim(decodedToken, 'username') // userfullname\r\n      /** Probably should switch this parsing around to return 'userfirstname' and 'userlastname' */\r\n      let sanitizedFullName = fullName ? fullName.trim() : 'Unknown Name'\r\n      let nameParts = sanitizedFullName.split(' ').map(x => x.trim()).filter(x => x && x.length > 0)\r\n      let [ firstName, ...lastNames ] = nameParts\r\n      return  { username: getClaim(decodedToken, 'sub')\r\n              , id: getTixClaim(decodedToken, 'userid')\r\n              , fullName\r\n              , firstName\r\n              , lastName: lastNames.join(' ')\r\n              }\r\n  }\r\n  return state\r\n}\r\n\r\nfunction actualUser(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      return  { username: getTixClaim(decodedToken, 'actualusername') || 'No Actual Username' // 'implement?'\r\n              , id: getTixClaim(decodedToken, 'actualuserid') || 'No Actual User Id'\r\n              , fullName: getTixClaim(decodedToken, 'actualfullName') || 'No Full Name' // 'implement?'\r\n              , firstName: getTixClaim(decodedToken, 'actualfirstname') // 'implement?'\r\n              , lastName: getTixClaim(decodedToken, 'actuallastname') // 'implement?'\r\n              }\r\n  }\r\n  return state\r\n}\r\n\r\nfunction organization(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      return  { id: getTixClaim(decodedToken, 'organizationid')\r\n              , name: getTixClaim(decodedToken, 'organization') // organizationname\r\n              }\r\n  }\r\n  return state\r\n}\r\n\r\nfunction actualOrganization(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      let id = getTixClaim(decodedToken, 'actualorganizationid')\r\n      return  { id\r\n              , name: id === 1 ? 'Tix' : getTixClaim(decodedToken, 'organization') // actualorganizationname\r\n              }\r\n  }\r\n  return state\r\n}\r\n\r\nconst getTimeoutMS = timeoutMinutes => timeoutMinutes * 60000\r\nconst defaultTimeoutMS = getTimeoutMS(120)\r\n/** Sliding session timeout from any point in time */\r\nfunction timeoutMS(state = defaultTimeoutMS, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return defaultTimeoutMS\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? defaultTimeoutMS : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return defaultTimeoutMS\r\n      const { decodedToken } = payload\r\n      return getTimeoutMS(getTixClaim(decodedToken, 'timeout'))\r\n  }\r\n  return state\r\n}\r\n\r\nconst inactiveWindowMS = 30000\r\nconst getInactiveMS = timeoutMinutes => timeoutMinutes * 60000 - inactiveWindowMS\r\nconst defaultInactiveMS = getInactiveMS(120)\r\n/** Sliding session inactive from any point in time */\r\nfunction inactiveMS(state = defaultInactiveMS, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return defaultInactiveMS\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? defaultInactiveMS : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return defaultInactiveMS\r\n      const { decodedToken } = payload\r\n      return getInactiveMS(getTixClaim(decodedToken, 'timeout'))\r\n  }\r\n  return state\r\n}\r\n\r\n/** What time (epoch) does token expire at */\r\nfunction expiresAtMS(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      return decodedToken.exp * 1000\r\n  }\r\n  return state\r\n}\r\n\r\n/** How long of a window prior to expiration should refresh occur */\r\nconst refreshWindowMS = 40000\r\n/** What time (epoch) should refresh occur at */\r\nfunction refreshAtMS(state = null, action = {}) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    //case IDENTITY_EXPIRED:\r\n      return null\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return error ? null : state\r\n    case SET_IDENTITY:\r\n      if(error)\r\n        return null\r\n      const { decodedToken } = payload\r\n      return decodedToken.exp * 1000 - refreshWindowMS\r\n  }\r\n  return state\r\n}\r\n\r\nconst initialState =  { isFetching: isFetching()\r\n                      , isAuthorized: isAuthorized()\r\n                      , isAdmin: isAdmin()\r\n                      , subject: subject()\r\n                      , user: user()\r\n                      , actualUser: actualUser()\r\n                      , organization: organization()\r\n                      , actualOrganization: actualOrganization()\r\n                      , timeoutMS: timeoutMS()\r\n                      , inactiveMS: inactiveMS()\r\n                      , expiresAtMS: expiresAtMS()\r\n                      , refreshAtMS: refreshAtMS()\r\n                      , tokens: tokens()\r\n                      , fingerprint: fingerprint()\r\n                      //, errors: errors()\r\n                      }\r\n\r\n\r\nexport default function identity(state = initialState, action) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case FETCH_IDENTITY:\r\n    case SET_IDENTITY:\r\n    case FORGET_TOKENS:\r\n    case FORGET_FINGERPRINT:\r\n    case IDENTITY_INVALID:\r\n    case IDENTITY_EXPIRED:\r\n    case AUTHORIZE_MIDDLEWARE:\r\n      return Object.assign({}, state, { isFetching: isFetching(state.isFetching, action)\r\n                                      , isAuthorized: isAuthorized(state.isAuthorized, action)\r\n                                      , isAdmin: isAdmin(state.isAdmin, action)\r\n                                      , subject: subject(state.subject, action)\r\n                                      , user: user(state.user, action)\r\n                                      , actualUser: actualUser(state.actualUser, action)\r\n                                      , organization: organization(state.organization, action)\r\n                                      , actualOrganization: actualOrganization(state.actualOrganization, action)\r\n                                      , timeoutMS: timeoutMS(state.timeoutMS, action)\r\n                                      , inactiveMS: inactiveMS(state.inactiveMS, action)\r\n                                      , expiresAtMS: expiresAtMS(state.expiresAtMS, action)\r\n                                      , refreshAtMS: refreshAtMS(state.refreshAtMS, action)\r\n                                      , tokens: tokens(state.tokens, action)\r\n                                      , fingerprint: fingerprint(state.fingerprint, action)\r\n                                      //, errors: errors(state.errors, action)\r\n                                      })\r\n  }\r\n  return state\r\n}\r\n"
  },
  {
    "__docId__": 243,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTixClaimSchema",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~getTixClaimSchema",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 244,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getClaim",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~getClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 245,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasTixClaim",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~hasTixClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 246,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTixClaim",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~getTixClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 247,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasRole",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~hasRole",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 248,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasClaim",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~hasClaim",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 249,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "tokens",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~tokens",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 28,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 250,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "fingerprint",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~fingerprint",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 44,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 251,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "isFetching",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~isFetching",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 59,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "boolean"
        ],
        "defaultRaw": false,
        "defaultValue": "false"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 252,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "isAuthorized",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~isAuthorized",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 70,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "boolean"
        ],
        "defaultRaw": false,
        "defaultValue": "false"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 253,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "isAdmin",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~isAdmin",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 86,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "boolean"
        ],
        "defaultRaw": false,
        "defaultValue": "false"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 254,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "subject",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~subject",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 106,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 255,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "user",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~user",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 118,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 256,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "actualUser",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~actualUser",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 148,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 257,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "organization",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~organization",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 172,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 258,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "actualOrganization",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~actualOrganization",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 193,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 259,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getTimeoutMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~getTimeoutMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 215,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 260,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "defaultTimeoutMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~defaultTimeoutMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 216,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 261,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "timeoutMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~timeoutMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": "Sliding session timeout from any point in time",
    "lineNumber": 218,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "defaultTimeoutMS",
        "defaultValue": "defaultTimeoutMS"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 262,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "inactiveWindowMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~inactiveWindowMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 237,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 263,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getInactiveMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~getInactiveMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 238,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 264,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "defaultInactiveMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~defaultInactiveMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 239,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 265,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "inactiveMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~inactiveMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": "Sliding session inactive from any point in time",
    "lineNumber": 241,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "defaultInactiveMS",
        "defaultValue": "defaultInactiveMS"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 266,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "expiresAtMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~expiresAtMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": "What time (epoch) does token expire at",
    "lineNumber": 261,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 267,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "refreshWindowMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~refreshWindowMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": "How long of a window prior to expiration should refresh occur",
    "lineNumber": 281,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 268,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "refreshAtMS",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~refreshAtMS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": "What time (epoch) should refresh occur at",
    "lineNumber": 283,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": null,
        "defaultValue": "null"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 269,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialState",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~initialState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 302,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 270,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "identity",
    "memberof": "lib/redux/reducers/identity.js",
    "longname": "lib/redux/reducers/identity.js~identity",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/identity.js",
    "importStyle": "identity",
    "description": null,
    "lineNumber": 320,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "initialState",
        "defaultValue": "initialState"
      },
      {
        "name": "action",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 271,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/index.js",
    "memberof": null,
    "longname": "lib/redux/reducers/index.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import identity from './identity'\r\nimport api from './api'\r\nimport autocomplete from './autocomplete'\r\nimport visual from './visual'\r\nimport errors from './errors'\r\nimport { reducer as form } from 'redux-form'\r\nimport { routerReducer as routing } from 'react-router-redux'\r\nimport idle from '../modules/redux-idle-monitor'\r\n\r\nexport  { identity\r\n        , api\r\n        , autocomplete\r\n        , visual\r\n        , errors\r\n        , form\r\n        , idle\r\n        , routing\r\n        }\r\n"
  },
  {
    "__docId__": 272,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/reducers/visual.js",
    "memberof": null,
    "longname": "lib/redux/reducers/visual.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Immutable from 'immutable'\r\nimport { title, subtitle, defaultThemeName, packageName } from '../../../config'\r\nimport  { TOGGLE_VISIBILITY\r\n        , SET_VISIBILITY\r\n        , SET_THEME\r\n        , TOGGLE_EXPANDER\r\n        , SET_EXPANDER\r\n        , REGISTER_TOOLTIP\r\n        , DISPOSE_TOOLTIP\r\n        , SET_TEXT\r\n       } from '../constants'\r\n\r\nconst REDUX_FORM_CHANGE = 'redux-form/CHANGE'\r\n\r\nconst nextValue = current => {\r\n  let value = current.get('value')\r\n  let options = current.get('options')\r\n  let nextIndex = options.indexOf(value) + 1\r\n  return nextIndex >= options.size ? options.first() : options.get(nextIndex)\r\n}\r\n\r\nfunction visibility(state = Immutable.Map(), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error || !payload)\r\n    return state\r\n  const { componentID, value, options } = payload\r\n  switch(type) {\r\n    case TOGGLE_VISIBILITY:\r\n      const current = state.get(componentID)\r\n      if(current) {\r\n        const next = nextValue(current)\r\n        return state.setIn([ componentID, 'value' ], next)\r\n      }\r\n      return state.set(componentID, Immutable.fromJS({ options, value }))\r\n    case SET_VISIBILITY:\r\n      if(state.has(componentID))\r\n        return state.setIn([ componentID, 'value' ], value)\r\n      return state.set(componentID, Immutable.fromJS({ options, value }))\r\n  }\r\n  return state\r\n}\r\n\r\nfunction expanders(state = Immutable.Map(), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error || !payload)\r\n    return state\r\n  const { componentID, value, initialExpanders } = payload\r\n  switch(type) {\r\n    case SET_EXPANDER:\r\n      return state.set(componentID, value)\r\n    case TOGGLE_EXPANDER:\r\n      return state.update(componentID, initialExpanders, x => !x )\r\n  }\r\n  return state\r\n}\r\n\r\nfunction tooltip(state = Immutable.Map(), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error || !payload)\r\n    return state\r\n  const { componentID, props } = payload\r\n  switch(type) {\r\n    case REGISTER_TOOLTIP:\r\n      state.set(componentID, props)\r\n    case DISPOSE_TOOLTIP:\r\n      state.remove(componentID)\r\n  }\r\n  return state\r\n}\r\n\r\nconst initialText = { }\r\nfunction text(state = Immutable.Map({ title, subtitle, packageName }), action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error)\r\n    return state\r\n  switch(type) {\r\n    case SET_TEXT:\r\n      return state.merge(payload)\r\n    case REDUX_FORM_CHANGE:\r\n      const { field, value, form } = action\r\n      if(form !== 'page')\r\n        return state\r\n      return state.set(field, value)\r\n  }\r\n  return state\r\n}\r\n\r\nconst initialTheme = defaultThemeName\r\nfunction theme(state = initialTheme, action = {}) {\r\n  const { type, payload, error } = action\r\n  if(error || !payload)\r\n    return state\r\n  switch(type) {\r\n    case SET_THEME:\r\n      return payload.name\r\n  }\r\n  return state\r\n}\r\n\r\nconst initialState = { visibility: visibility(), theme: theme(), expanders: expanders(), tooltip: tooltip(), text: text() }\r\n\r\nexport default function visual(state = initialState, action) {\r\n  const { type, payload, error } = action\r\n  switch(type) {\r\n    case TOGGLE_VISIBILITY:\r\n    case SET_VISIBILITY:\r\n      return Object.assign({}, state, { visibility: visibility(state.visibility, action) })\r\n    case SET_THEME:\r\n      return Object.assign({}, state, { theme: theme(state.theme, action)})\r\n    case TOGGLE_EXPANDER:\r\n    case SET_EXPANDER:\r\n      return Object.assign({}, state, { expanders: expanders(state.expanders, action)})\r\n    case REGISTER_TOOLTIP:\r\n    case DISPOSE_TOOLTIP:\r\n      return Object.assign({}, state, { tooltip: tooltip(state.tooltip, action)})\r\n    case SET_TEXT:\r\n    case REDUX_FORM_CHANGE:\r\n      return Object.assign({}, state, { text: text(state.text, action) })\r\n  }\r\n  return state\r\n}\r\n"
  },
  {
    "__docId__": 273,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "REDUX_FORM_CHANGE",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~REDUX_FORM_CHANGE",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 274,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "nextValue",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~nextValue",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 275,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "visibility",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~visibility",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 22,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 276,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "expanders",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~expanders",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 43,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 277,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "tooltip",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~tooltip",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 57,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 278,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialText",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~initialText",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 71,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 279,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "text",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~text",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 72,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ]
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 280,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialTheme",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~initialTheme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 88,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 281,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "theme",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~theme",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 89,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "initialTheme",
        "defaultValue": "initialTheme"
      },
      {
        "name": "action",
        "optional": true,
        "types": [
          "{}"
        ],
        "defaultRaw": {},
        "defaultValue": "{}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 282,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "initialState",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~initialState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 100,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 283,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "visual",
    "memberof": "lib/redux/reducers/visual.js",
    "longname": "lib/redux/reducers/visual.js~visual",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/reducers/visual.js",
    "importStyle": "visual",
    "description": null,
    "lineNumber": 102,
    "undocument": true,
    "params": [
      {
        "name": "state",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "initialState",
        "defaultValue": "initialState"
      },
      {
        "name": "action",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 284,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/store/configureStore.dev.js",
    "memberof": null,
    "longname": "lib/redux/store/configureStore.dev.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { createStore, applyMiddleware, compose } from 'redux'\r\nimport { routerMiddleware } from 'react-router-redux'\r\nimport { combineReducers } from 'redux'\r\nimport { thunk, createLogger } from 'redux-middleware'\r\n\r\nimport { log, IS_BROWSER } from '../../../config'\r\nimport DevTools from '../DevTools'\r\nimport { middleware as idle, actions as idleActions } from '../modules/redux-idle-monitor'\r\nimport subscribeStore from './subscribeStore'\r\nimport * as reducers from '../reducers'\r\n\r\nconst getDevToolsEnhancer = () => IS_BROWSER && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : f => f\r\n\r\nexport default function configureStore(history, initialState) {\r\n  const reducer = combineReducers(reducers)\r\n  const middlewares = [ thunk\r\n                      , routerMiddleware(history)\r\n                      , idle\r\n                      , createLogger({ logger: IS_BROWSER ? console : log })\r\n                      ]\r\n  const enhancer = compose( applyMiddleware(...middlewares)\r\n                          , DevTools.instrument()\r\n                          //, getDevToolsEnhancer()\r\n                          )\r\n  const store = createStore(reducer, initialState, enhancer)\r\n  const unsubscribe = subscribeStore(store)\r\n  /*\r\n  if(IS_BROWSER)\r\n    store.dispatch(idleActions.start())\r\n  */\r\n  if(module.hot)\r\n    module.hot.accept('../reducers', () => store.replaceReducer(require('../reducers').default))\r\n  return store\r\n}\r\n"
  },
  {
    "__docId__": 285,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getDevToolsEnhancer",
    "memberof": "lib/redux/store/configureStore.dev.js",
    "longname": "lib/redux/store/configureStore.dev.js~getDevToolsEnhancer",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/store/configureStore.dev.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 286,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureStore",
    "memberof": "lib/redux/store/configureStore.dev.js",
    "longname": "lib/redux/store/configureStore.dev.js~configureStore",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/store/configureStore.dev.js",
    "importStyle": "configureStore",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "params": [
      {
        "name": "history",
        "types": [
          "*"
        ]
      },
      {
        "name": "initialState",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 287,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/store/configureStore.js",
    "memberof": null,
    "longname": "lib/redux/store/configureStore.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "if (process.env.NODE_ENV === 'production')\r\n  module.exports = require('./configureStore.prod')\r\nelse\r\n  module.exports = require('./configureStore.dev')\r\n"
  },
  {
    "__docId__": 288,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/store/configureStore.prod.js",
    "memberof": null,
    "longname": "lib/redux/store/configureStore.prod.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { createStore, applyMiddleware } from 'redux'\r\nimport { routerMiddleware } from 'react-router-redux'\r\nimport { combineReducers } from 'redux'\r\nimport { thunk } from 'redux-middleware'\r\n\r\nimport { middleware as idle, actions as idleActions } from '../modules/redux-idle-monitor'\r\nimport subscribeStore from './subscribeStore'\r\nimport * as reducers from '../reducers'\r\n\r\nexport default function configureStore(history, initialState) {\r\n  const reducer = combineReducers(reducers)\r\n  const middlewares = [ thunk\r\n                      , routerMiddleware(history)\r\n                      , idle\r\n                      ]\r\n  const enhancer = applyMiddleware(...middlewares)\r\n  const store = createStore(reducer, initialState, enhancer)\r\n  const unsubscribe = subscribeStore(store)\r\n  /*\r\n  if(IS_BROWSER)\r\n    store.dispatch(idleActions.start())\r\n  */\r\n  return store\r\n}\r\n"
  },
  {
    "__docId__": 289,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureStore",
    "memberof": "lib/redux/store/configureStore.prod.js",
    "longname": "lib/redux/store/configureStore.prod.js~configureStore",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/store/configureStore.prod.js",
    "importStyle": "configureStore",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "params": [
      {
        "name": "history",
        "types": [
          "*"
        ]
      },
      {
        "name": "initialState",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 290,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/redux/store/subscribeStore.js",
    "memberof": null,
    "longname": "lib/redux/store/subscribeStore.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { actions as idleActions } from '../modules/redux-idle-monitor'\r\nimport { createAutoRefresh } from '../actions/identity'\r\nimport persistence from '../../services/persistence'\r\n\r\nconst selectIsAuthorized = state => state.identity ? state.identity.isAuthorized : false\r\nconst selectIsAdmin = state => state.identity ? state.identity.isAdmin : false\r\n\r\n\r\nexport const createPostAuthorizeSubscriber = ({ getPersisted }) => store => {\r\n  const { dispatch, getState } = store\r\n\r\n  let currentIsAuthorized = null\r\n  let currentIsAdmin = null\r\n\r\n  let autoRefresh = createAutoRefresh({ getPersisted })\r\n  let cancelAutoRefresh = (dispatch, getState) => {}\r\n\r\n  return store.subscribe(() => {\r\n    let previousIsAuthorized = currentIsAuthorized\r\n    let previousIsAdmin = currentIsAdmin\r\n    let state = store.getState()\r\n    currentIsAuthorized = selectIsAuthorized(state)\r\n    currentIsAdmin = selectIsAdmin(state)\r\n\r\n    if(currentIsAuthorized !== previousIsAuthorized) {\r\n      dispatch(cancelAutoRefresh)\r\n      if(currentIsAuthorized) {\r\n        cancelAutoRefresh = dispatch(autoRefresh)\r\n        dispatch(idleActions.start())\r\n      } else {\r\n        dispatch(idleActions.stop())\r\n      }\r\n    }\r\n  })\r\n}\r\n\r\nexport default function subscribeStore(store) {\r\n  /*\r\n  const { getPersisted } = persistence()\r\n  const subscribePostAuthorize = createPostAuthorizeSubscriber({ getPersisted })\r\n  const unsubscribePostAuthorize = subscribePostAuthorize(store)\r\n  return () => unsubscribePostAuthorize()\r\n  */\r\n  return () => {}\r\n}\r\n"
  },
  {
    "__docId__": 291,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "selectIsAuthorized",
    "memberof": "lib/redux/store/subscribeStore.js",
    "longname": "lib/redux/store/subscribeStore.js~selectIsAuthorized",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/store/subscribeStore.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 292,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "selectIsAdmin",
    "memberof": "lib/redux/store/subscribeStore.js",
    "longname": "lib/redux/store/subscribeStore.js~selectIsAdmin",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/redux/store/subscribeStore.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 293,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createPostAuthorizeSubscriber",
    "memberof": "lib/redux/store/subscribeStore.js",
    "longname": "lib/redux/store/subscribeStore.js~createPostAuthorizeSubscriber",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/store/subscribeStore.js",
    "importStyle": "{createPostAuthorizeSubscriber}",
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 294,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "subscribeStore",
    "memberof": "lib/redux/store/subscribeStore.js",
    "longname": "lib/redux/store/subscribeStore.js~subscribeStore",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/redux/store/subscribeStore.js",
    "importStyle": "subscribeStore",
    "description": null,
    "lineNumber": 37,
    "undocument": true,
    "params": [
      {
        "name": "store",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 295,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/router/configureApiRouter.js",
    "memberof": null,
    "longname": "lib/router/configureApiRouter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\nimport express from 'express'\r\nimport fs from 'fs'\r\nimport { client as staticConfig, log } from '../../config'\r\nimport { getCors } from '../cors'\r\n\r\nconst requireQ = path => {\r\n  return new Promise((resolve, reject) => {\r\n    fs.readFile(path, 'utf8', (err, data) => {\r\n      if (err)\r\n        return reject(err)\r\n      resolve(JSON.parse(data))\r\n    })\r\n  })\r\n}\r\n\r\n/**\r\n * API Router\r\n * Exposes apis for the application.\r\n */\r\nexport default function configureApiRouter() {\r\n  let router = express.Router()\r\n  const cors = getCors()\r\n  staticConfig.STATIC = true\r\n\r\n  //CORS middleware\r\n  const allowCrossDomain = (req, res, next) => {\r\n    if(req.method === 'OPTIONS') {\r\n      cors.handlePreflight(req, res)\r\n    } else {\r\n      cors.handle(req, res)\r\n      next()\r\n    }\r\n  }\r\n\r\n  router.use(allowCrossDomain)\r\n  router.get('/env', (req, res) => res.json({ NODE_ENV: process.env.NODE_ENV }))\r\n  router.get('/client-config', (req, res) => {\r\n    requireQ(router.locals.CLIENT_CONFIG_PATH)\r\n      .then(clientConfig => {\r\n        if (req.query.pretty === '' || req.query.pretty)\r\n          return res.send(`<html><head><title>tix client config</title></head><body><pre>${JSON.stringify(clientConfig, null, 4)}</pre></body></html>`)\r\n        res.json(clientConfig)\r\n      }, err => {\r\n        log.error(err, 'error occurred during client-config')\r\n        res.json(staticConfig)\r\n      })\r\n  })\r\n  return router\r\n}\r\n"
  },
  {
    "__docId__": 296,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "requireQ",
    "memberof": "lib/router/configureApiRouter.js",
    "longname": "lib/router/configureApiRouter.js~requireQ",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureApiRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 297,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureApiRouter",
    "memberof": "lib/router/configureApiRouter.js",
    "longname": "lib/router/configureApiRouter.js~configureApiRouter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/router/configureApiRouter.js",
    "importStyle": "configureApiRouter",
    "description": "API Router\nExposes apis for the application.",
    "lineNumber": 21,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 298,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/router/configureAppRouter.js",
    "memberof": null,
    "longname": "lib/router/configureAppRouter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'promise'\r\nimport Immutable from 'immutable'\r\nimport Router from 'router'\r\nimport serveFile from 'serve-file'\r\nimport serveStatic from 'serve-static'\r\nimport path from 'path'\r\nimport React from 'react'\r\nimport reactStamp from 'react-stamp'\r\nimport HtmlHead from '../components/HtmlHead'\r\nimport { renderToString, renderToStaticMarkup } from 'react-dom/server'\r\nimport { createMemoryHistory, match, RouterContext } from 'react-router'\r\nimport { Provider } from 'react-redux'\r\nimport { syncHistoryWithStore } from 'react-router-redux'\r\nimport cookieParser from 'cookie-parser'\r\nimport cookie from 'react-cookie'\r\n\r\nimport { serialize, createInitialState } from 'fire-hydrant'\r\n\r\nimport { getThemeForUrl } from '../context/theme'\r\nimport { defaultTheme, getTheme } from '../context'\r\nimport { server, packageName, packageKey, faviconUrl, log, IS_HOT, IS_DEV, noop, resolveRoot, initialState } from '../../config'\r\nimport { deauthorized, hydrateIdentity } from '../redux/actions/identity'\r\nimport minify from '../services/minify'\r\nimport logging from '../services/logging'\r\nimport { removeLegacyCookies } from '../services/persistence'\r\nimport configureStore from '../redux/store/configureStore'\r\nimport routes from '../app/routes'\r\nimport util from 'util'\r\nimport { reactStyles, serializeStyles, RoutingError } from 'universal-styles'\r\n\r\nimport postcss from 'postcss'\r\nimport postcssUrl from 'postcss-url'\r\nimport postcssCssnext from 'postcss-cssnext'\r\nimport cssnano from 'cssnano'\r\n\r\nconst cssProcessor = postcss([ postcssUrl({ url: 'inline'\r\n                                          , assetsPath: '../images'\r\n                                          })\r\n                            , postcssCssnext()\r\n                            , cssnano()\r\n                            ])\r\nfunction processCSS(css) {\r\n  return cssProcessor.process(css).then(x => x.css)\r\n}\r\n\r\nconst BodyInit = ({ theme }) => {\r\n  const { style } = theme\r\n  const { backgroundColor, margin, padding } = style.body\r\n  const __html = minify(`\r\n  /*\r\n  document.body.style.backgroundColor = '${backgroundColor}'\r\n  document.body.style.margin = '${margin}'\r\n  document.body.style.padding = '${padding}'\r\n  console.groupCollapsed('${packageName} => init')\r\n  if(!window.google_tag_manager) console.info(\"GTM BLOCKED => consider disabling ad block so we can see how much usage we're getting\")\r\n  console.groupEnd()\r\n  */\r\n`)\r\n  return <script dangerouslySetInnerHTML={{ __html }}/>\r\n}\r\n\r\nconst InitialState = createInitialState({ React, Immutable })\r\n\r\nconst MiddlewareError = ({ error }) => {\r\n  return (\r\n    <div>\r\n      <h2>An Error Occurred Rendering the Application</h2>\r\n      {IS_DEV ? <pre><code>{error.message || error}{error.stack ? `\\n${error.stack}` : null}</code></pre> : null}\r\n    </div>\r\n  )\r\n}\r\n\r\n\r\nexport default function configureAppRouter({ cors, paths }) {\r\n  const { SRC_ROOT, APP_ROOT, LIB_ROOT, STATIC_ROOT, ASSETS_ROOT } = paths\r\n  const universalMiddleware = reactStyles(React, { processCSS })\r\n\r\n  return universalMiddleware(req => new Promise((resolve, reject) => {\r\n    const memoryHistory = createMemoryHistory(req.path)\r\n    let store = configureStore(memoryHistory)\r\n    const history = syncHistoryWithStore(memoryHistory, store)\r\n    match({ history\r\n          , routes\r\n          , location: req.url\r\n          }, (error, redirectLocation, renderProps) => {\r\n      const renderBody = () => {\r\n        if (error) {\r\n          return reject(new RoutingError( { status: 500\r\n                                          , statusMessage: 'Body rendering error occurred.'\r\n                                          , error\r\n                                          } ))\r\n        } else if (redirectLocation) {\r\n          return reject(new RoutingError( { status: 302\r\n                                          , redirect: redirectLocation.pathname + redirectLocation.search\r\n                                          } ))\r\n        } else if (renderProps) {\r\n          const state = store.getState()\r\n          const theme = getThemeForUrl(state.visual.theme, req.url)\r\n          const appMarkup = server.flags.render ? renderToString(<Provider store={store}><RouterContext {...renderProps} /></Provider>)\r\n                                                : null\r\n          return (\r\n            <body>\r\n              {server.flags.render ? <InitialState globalKey={packageKey} state={state} serialize={serialize} /> : null}\r\n              {server.flags.render ? <div id=\"root\" dangerouslySetInnerHTML={{ __html: appMarkup }}/> : <div id=\"root\" />}\r\n              <script src=\"/assets/app.js\" />\r\n            </body>\r\n          )\r\n        } else {\r\n          reject(false)\r\n        }\r\n      }\r\n\r\n      const renderHead = styles => {\r\n        const title = `gridiron-example${IS_HOT ? ' is so hot right now...' : (IS_DEV ? ' is so dev right now...' : '')}`\r\n        const items = [ <meta charSet=\"utf-8\" />\r\n                      , <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n                      , <title>{title}</title>\r\n                      , <link rel=\"icon\" href={faviconUrl} type=\"image/x-icon\" />\r\n                      , ...styles\r\n                      , <link rel=\"stylesheet\" href=\"/assets/app.css\" type=\"text/css\" />\r\n                      , <script dangerouslySetInnerHTML={{ __html: `(function(d) {\r\n                          var config = { kitId: 'xsj1dhs', scriptTimeout: 3000, async: true },\r\n                          h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\\bwf-loading\\b/g,\"\")+\" wf-inactive\";},config.scriptTimeout),tk=d.createElement(\"script\"),f=false,s=d.getElementsByTagName(\"script\")[0],a;h.className+=\" wf-loading\";tk.src='https://use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!=\"complete\"&&a!=\"loaded\")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s)\r\n                          })(document)\r\n                          ` }} />\r\n                      , <script src=\"/assets/polyfill.js\" />\r\n                      , <script src=\"/assets/vendor.js\" />\r\n                      , <script src=\"/assets/commons.js\" />\r\n                      ]\r\n        return <head>{items.map((x, key) => React.cloneElement(x, { key }))}</head>\r\n      }\r\n\r\n      const renderPage = ({ head, body }) => `<!doctype html>\\n${renderToStaticMarkup(<html>{head}{body}</html>)}`\r\n      return resolve({ renderBody, renderHead, renderPage })\r\n    })\r\n  }), (promise, res, next) => {\r\n        return promise\r\n          .then(page => res.send(page))\r\n          .catch(err => {\r\n            if(err === false) {\r\n              console.warn('appRouter: next triggered via false')\r\n              return next()\r\n            }\r\n            if(err instanceof RoutingError) {\r\n              console.warn('appRouter: RoutingError getting handled')\r\n              const { status, statusMessage, redirect, innerError } = err\r\n              if(status === 302)\r\n                return res.redirect(302, redirect)\r\n              return res.status(status).send(statusMessage)\r\n            } else {\r\n              return res.status(500).send(`An unknown error occurred: ${err.message || err}`)\r\n            }\r\n          })\r\n  })\r\n}\r\n"
  },
  {
    "__docId__": 299,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cssProcessor",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~cssProcessor",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 36,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 300,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "processCSS",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~processCSS",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 42,
    "undocument": true,
    "params": [
      {
        "name": "css",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 301,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "BodyInit",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~BodyInit",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 46,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 302,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "InitialState",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~InitialState",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 62,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 303,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MiddlewareError",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~MiddlewareError",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 64,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 304,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureAppRouter",
    "memberof": "lib/router/configureAppRouter.js",
    "longname": "lib/router/configureAppRouter.js~configureAppRouter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/router/configureAppRouter.js",
    "importStyle": "configureAppRouter",
    "description": null,
    "lineNumber": 74,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"cors\": *, \"paths\": *}"
        ],
        "defaultRaw": {
          "cors": null,
          "paths": null
        },
        "defaultValue": "{\"cors\":null,\"paths\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 305,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/router/configureRouter.js",
    "memberof": null,
    "longname": "lib/router/configureRouter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import express from 'express'\r\nimport { assert } from 'chai'\r\nimport { join } from 'path'\r\nimport favicon from 'serve-favicon'\r\n\r\nimport { server, log, faviconPath } from '../../config'\r\nimport { getCors } from '../cors'\r\nimport configureUnsupportedRouter from './configureUnsupportedRouter'\r\nimport configureSecureRouter from './configureSecureRouter'\r\nimport configureApiRouter from './configureApiRouter'\r\nimport configureAppRouter from './configureAppRouter'\r\n\r\nconst cors = getCors()\r\n\r\nconst gzipExtensionFilter = /^(js|css|html|json|ico|eot|otf|ttf)$/\r\n\r\nconst contentTypeMap =  { 'js': 'text/javascript'\r\n                        , 'json': 'application/json'\r\n                        , 'css': 'text/css'\r\n                        , 'html': 'text/html'\r\n                        , 'xml': 'text/xml'\r\n                        , 'ico': 'image/x-icon'\r\n                        , 'woff': 'application/x-font-woff'\r\n                        , 'woff2': 'application/font-woff2'\r\n                        , 'ttf': 'application/x-font-ttf'\r\n                        , 'otf': 'application/x-font-otf'\r\n                        , 'eot': 'application/vnd.ms-fontobject'\r\n                        , 'svg': 'image/svg+xml'\r\n                        , 'png': 'image/png'\r\n                        , 'jpg': 'image/jpeg'\r\n                        , 'jpeg': 'image/jpeg'\r\n                        , 'gif': 'image/gif'\r\n                        , 'tiff': 'image/tiff'\r\n                        }\r\n\r\n\r\n/**\r\n * configureRouter\r\n * Constructs a router for the application.\r\n * @module server/lib/routers/configureRouter\r\n */\r\nexport default function configureRouter({ isSecure, paths }) {\r\n  const { PUBLIC_ROOT\r\n        , STATIC_ROOT\r\n        , ASSETS_ROOT\r\n        , APP_ROOT\r\n        , NODE_MODULES_ROOT\r\n        , DOC_ROOT\r\n        } = paths\r\n\r\n\r\n  const router = express.Router()\r\n\r\n\r\n  /** REDIRECT TO HTTPS ROUTE */\r\n  const SECURE_REDIRECTS = []\r\n  if(!isSecure)\r\n    router.use(configureSecureRouter(SECURE_REDIRECTS))\r\n\r\n  router.use(favicon(faviconPath))\r\n  router.use('/img', express.static(join(PUBLIC_ROOT, 'img')))\r\n\r\n  router.use(configureUnsupportedRouter())\r\n  if(process.env.NODE_ENV !== 'production')\r\n    router.use('/doc', express.static(DOC_ROOT))\r\n  router.use('/assets', express.static(ASSETS_ROOT))\r\n  router.use('/static', express.static(STATIC_ROOT))\r\n  router.use(configureAppRouter({ paths, cors }))\r\n  return router\r\n}\r\n"
  },
  {
    "__docId__": 306,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cors",
    "memberof": "lib/router/configureRouter.js",
    "longname": "lib/router/configureRouter.js~cors",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 307,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "gzipExtensionFilter",
    "memberof": "lib/router/configureRouter.js",
    "longname": "lib/router/configureRouter.js~gzipExtensionFilter",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "object"
      ]
    }
  },
  {
    "__docId__": 308,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "contentTypeMap",
    "memberof": "lib/router/configureRouter.js",
    "longname": "lib/router/configureRouter.js~contentTypeMap",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 309,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureRouter",
    "memberof": "lib/router/configureRouter.js",
    "longname": "lib/router/configureRouter.js~configureRouter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/router/configureRouter.js",
    "importStyle": "configureRouter",
    "description": "configureRouter\nConstructs a router for the application.",
    "lineNumber": 42,
    "unknown": [
      {
        "tagName": "@module",
        "tagValue": "server/lib/routers/configureRouter"
      }
    ],
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"isSecure\": *, \"paths\": *}"
        ],
        "defaultRaw": {
          "isSecure": null,
          "paths": null
        },
        "defaultValue": "{\"isSecure\":null,\"paths\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 310,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/router/configureSecureRouter.js",
    "memberof": null,
    "longname": "lib/router/configureSecureRouter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import express from 'express'\r\n\r\nexport default function configureSecureRouter(paths) {\r\n  let router = express.Router()\r\n  router.use((req, res, next) => {\r\n    if(paths.some(x => req.url.startsWith(x)))\r\n      return res.redirect(`https://${req.get('Host')}${req.url}`)\r\n    next()\r\n  })\r\n  return router\r\n}\r\n"
  },
  {
    "__docId__": 311,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureSecureRouter",
    "memberof": "lib/router/configureSecureRouter.js",
    "longname": "lib/router/configureSecureRouter.js~configureSecureRouter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/router/configureSecureRouter.js",
    "importStyle": "configureSecureRouter",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "params": [
      {
        "name": "paths",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 312,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/router/configureUnsupportedRouter.js",
    "memberof": null,
    "longname": "lib/router/configureUnsupportedRouter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import React from 'react'\r\nimport { renderToString } from 'react-dom/server'\r\nimport Router from 'router'\r\nimport { log } from '../../config'\r\nimport { detectBrowser } from 'browser-detective'\r\n\r\nconst HTML = ({ name, title, version, emulatedVersion, platform, platformVersion }) => (\r\n  <html lang=\"en\">\r\n  <head>\r\n    <meta httpEquiv=\"X-UA-Compatible\" content=\"IE=Edge\" />\r\n    <meta charSet=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <base href=\"/\" />\r\n    <title>Unsupported</title>\r\n    <link rel=\"icon\" href=\"/favicon.ico\" type=\"image/x-icon\" />\r\n  </head>\r\n  <body>\r\n    <h1>Unsupported Browser Detected</h1>\r\n    <div>Use a modern browser instead.</div>\r\n  </body>\r\n  </html>\r\n)\r\n\r\nconst getHTML = props => {\r\n  return `<!doctype html>\r\n${renderToString(<HTML {...props} />)}`\r\n}\r\n\r\n\r\n\r\nexport default function configureUnsupportedRouter() {\r\n  let router = Router()\r\n  router.use((req, res, next) => {\r\n    const userAgent = req.headers['user-agent']\r\n    if(!userAgent)\r\n      next()\r\n    const browser = detectBrowser(userAgent)\r\n    const { name, title, version, emulatedVersion, platform, platformVersion } = browser\r\n\r\n    if(name !== 'ie')\r\n      return next()\r\n\r\n    if(version >= 10) {\r\n      log.debug(`supported IE version => Actual[${version}] Emulated[${emulatedVersion}]`)\r\n      return next()\r\n    }\r\n    log.debug(`unsupported IE version => Actual[${version}] Emulated[${emulatedVersion}]`)\r\n    res.send(getHTML(browser))\r\n  })\r\n  return router\r\n}\r\n"
  },
  {
    "__docId__": 313,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HTML",
    "memberof": "lib/router/configureUnsupportedRouter.js",
    "longname": "lib/router/configureUnsupportedRouter.js~HTML",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureUnsupportedRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 314,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getHTML",
    "memberof": "lib/router/configureUnsupportedRouter.js",
    "longname": "lib/router/configureUnsupportedRouter.js~getHTML",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/router/configureUnsupportedRouter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 24,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 315,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "configureUnsupportedRouter",
    "memberof": "lib/router/configureUnsupportedRouter.js",
    "longname": "lib/router/configureUnsupportedRouter.js~configureUnsupportedRouter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/router/configureUnsupportedRouter.js",
    "importStyle": "configureUnsupportedRouter",
    "description": null,
    "lineNumber": 31,
    "undocument": true,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 316,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/server.js",
    "memberof": null,
    "longname": "lib/server.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\nimport express from 'express'\r\nimport { server, log } from '../config'\r\nimport http from 'http'\r\nimport https from 'https'\r\nimport proxy from './proxy'\r\nimport configureRouter from './router/configureRouter'\r\n//import { readPfx } from './tls'\r\nimport { assert } from 'chai'\r\nimport webpackConfig from '../webpack.config'\r\n\r\nconst start = ({ app, scheme, binding, opts }) => new Promise((resolve, reject) => {\r\n  assert.ok(binding, 'bindings must be specified')\r\n  assert.typeOf(binding.port, 'number', 'binding port must be a valid port number')\r\n  assert.ok(scheme, 'must specify scheme')\r\n  assert(scheme === 'http', 'only http scheme supported at this time')\r\n  const { port } = binding\r\n  const s = http.createServer(app)\r\n  s.listen(binding.port, err => {\r\n    if(err) return reject(err)\r\n    log.info(`STARTED @ http://:::${port}`)\r\n  })\r\n  resolve(() => new Promise((resolve, reject) => s.close(err => {\r\n    if(err)\r\n      return reject(err)\r\n    log.info(`STOPPED @ http://:::${port}`)\r\n    resolve()\r\n  })))\r\n})\r\n\r\nconst getCdnBinding = () => new Map(server.bindings.cdn)\r\n\r\n/** Which config name to use when hot reloading */\r\nconst hotConfigName = 'app'\r\nconst configureServer = ({ paths }) => {\r\n  let serverMap = new Map()\r\n  for(let [ scheme, binding ] of getCdnBinding().entries()) {\r\n    let app = Object.assign(express(), { settings: server, locals: paths })\r\n\r\n    /** Enable proxying */\r\n    app.set('trust proxy', true)\r\n\r\n    if (process.env.NODE_ENV === 'hot') {\r\n      log.info('SERVER STARTING HOT')\r\n      let hotConfig = Array.isArray(webpackConfig) ? webpackConfig.filter(x => x.name === hotConfigName)[0] : webpackConfig\r\n\r\n      let compiler = require('webpack')(hotConfig)\r\n      log.info(hotConfig, 'HOT CONFIG')\r\n      const { output } = hotConfig\r\n      app.use(require('webpack-dev-middleware')(compiler, { noInfo: true\r\n                                                          , publicPath: output.publicPath\r\n                                                          //, quiet: false\r\n                                                          //, headers: { 'Access-Control-Allow-Origin': '*' }\r\n                                                          //, stats: { colors: true }\r\n                                                          }))\r\n      app.use(require('webpack-hot-middleware')(compiler))\r\n    } else {\r\n      log.info('SERVER STARTING COLD')\r\n    }\r\n\r\n    const isSecure = scheme === 'https'\r\n    app.use(configureRouter({ isSecure, paths }))\r\n\r\n    let environment = { NODE_ENV: process.env.NODE_ENV }\r\n    log.info({ environment }, 'ENVIRONMENT')\r\n\r\n    serverMap.set(scheme, { app\r\n                          , start: () => start({ app, scheme, binding })\r\n                          })\r\n  }\r\n  //proxy()\r\n  return serverMap\r\n}\r\n\r\nexport default configureServer\r\n"
  },
  {
    "__docId__": 317,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "start",
    "memberof": "lib/server.js",
    "longname": "lib/server.js~start",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/server.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 318,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getCdnBinding",
    "memberof": "lib/server.js",
    "longname": "lib/server.js~getCdnBinding",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/server.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 31,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 319,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hotConfigName",
    "memberof": "lib/server.js",
    "longname": "lib/server.js~hotConfigName",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/server.js",
    "importStyle": null,
    "description": "Which config name to use when hot reloading",
    "lineNumber": 34,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 320,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "configureServer",
    "memberof": "lib/server.js",
    "longname": "lib/server.js~configureServer",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/server.js",
    "importStyle": "configureServer",
    "description": null,
    "lineNumber": 35,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 321,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/claims.js",
    "memberof": null,
    "longname": "lib/services/claims.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "export const getClaim = (decodedToken, name) => decodedToken[name]\r\nexport const hasClaim = (decodedToken, name, value) => {\r\n  let claim = getClaim(decodedToken, name)\r\n  // if claim exists but value was not specified, return true\r\n  if (claim && !value)\r\n    return true\r\n  if (claim)\r\n    return Array.isArray(claim) ? claim.indexOf(value) !== -1 : claim === value\r\n}\r\n"
  },
  {
    "__docId__": 322,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getClaim",
    "memberof": "lib/services/claims.js",
    "longname": "lib/services/claims.js~getClaim",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/claims.js",
    "importStyle": "{getClaim}",
    "description": null,
    "lineNumber": 1,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 323,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasClaim",
    "memberof": "lib/services/claims.js",
    "longname": "lib/services/claims.js~hasClaim",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/claims.js",
    "importStyle": "{hasClaim}",
    "description": null,
    "lineNumber": 2,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 324,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/location.js",
    "memberof": null,
    "longname": "lib/services/location.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { IS_BROWSER } from '../../config'\r\n\r\nexport const scheme = IS_BROWSER ? window.location.protocol.slice(0, -1) : 'https'\r\nexport const protocol = IS_BROWSER ? window.location.protocol : `${scheme}:`\r\nexport const hostname = IS_BROWSER ? window.location.hostname : 'SERVERNAME'\r\nexport const port = IS_BROWSER ? parseInt(window.location.port) : 443\r\nexport const host = IS_BROWSER ? window.location.host : 'SERVER'\r\nexport const path = IS_BROWSER ? window.location.pathname : '/SERVER'\r\nexport const query = IS_BROWSER ? window.location.search.replace('?', '') : '?SERVER=true'\r\nexport const title = IS_BROWSER ? window.document.title : 'SERVER'\r\nexport const cleanUrl = `${protocol}//${host}${path}`\r\nexport const goToUrl = (newUrl, doPostback) => {\r\n  if(!IS_BROWSER)\r\n    return\r\n  if(!doPostback)\r\n    window.history.pushState({ url: newUrl }, null, newUrl)\r\n  else\r\n    window.location.replace(newUrl)\r\n}\r\nexport const goToPath = (newPath, doPostback) => goToUrl(`${protocol}//${host}${newPath}`, doPostback)\r\nexport const goToCleanUrl = doPostback => goToUrl(cleanUrl, doPostback)\r\n"
  },
  {
    "__docId__": 325,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "scheme",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~scheme",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{scheme}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 326,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "protocol",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~protocol",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{protocol}",
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 327,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hostname",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~hostname",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{hostname}",
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 328,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "port",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~port",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{port}",
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 329,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "host",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~host",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{host}",
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 330,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "path",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~path",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{path}",
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 331,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "query",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~query",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{query}",
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 332,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "title",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~title",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{title}",
    "description": null,
    "lineNumber": 10,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 333,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cleanUrl",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~cleanUrl",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{cleanUrl}",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 334,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "goToUrl",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~goToUrl",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{goToUrl}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 335,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "goToPath",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~goToPath",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{goToPath}",
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 336,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "goToCleanUrl",
    "memberof": "lib/services/location.js",
    "longname": "lib/services/location.js~goToCleanUrl",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/location.js",
    "importStyle": "{goToCleanUrl}",
    "description": null,
    "lineNumber": 21,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 337,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/logging.js",
    "memberof": null,
    "longname": "lib/services/logging.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\nimport path from 'path'\r\nconst mkdirp = Promise.promisify(require('mkdirp'))\r\nconst writeFile = Promise.promisify(require('fs').writeFile)\r\n\r\nimport { log, resolveRoot } from '../../config'\r\n\r\nexport default ({ logDirectory = resolveRoot('log') } = {}) => {\r\n  return mkdirp(logDirectory)\r\n    .then(() => {\r\n      const logFile = (name, content) => {\r\n        const filePath = path.join(logDirectory, name)\r\n        return writeFile(filePath, content, 'utf8')\r\n          .then(() => log.debug(`logging => ${name} written to log directory`))\r\n      }\r\n      return { logFile }\r\n    })\r\n}\r\n"
  },
  {
    "__docId__": 338,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "mkdirp",
    "memberof": "lib/services/logging.js",
    "longname": "lib/services/logging.js~mkdirp",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/logging.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 339,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "writeFile",
    "memberof": "lib/services/logging.js",
    "longname": "lib/services/logging.js~writeFile",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/logging.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 340,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/minify.js",
    "memberof": null,
    "longname": "lib/services/minify.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { minify } from 'uglify-js'\r\nexport default content => minify(content, { fromString: true }).code\r\n"
  },
  {
    "__docId__": 341,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/musical.browser.js",
    "memberof": null,
    "longname": "lib/services/musical.browser.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "window.navigator.getUserMedia = ( window.navigator.getUserMedia ||\r\n                                  window.navigator.webkitGetUserMedia ||\r\n                                  window.navigator.mozGetUserMedia ||\r\n                                  window.navigator.msGetUserMedia\r\n                                )\r\n\r\nexport const audioCtx = new (window.AudioContext || window.webkitAudioContext)() // define audio context\r\n// Webkit/blink browsers need prefix, Safari won't work without window.\r\n\r\n\r\nexport const analyser = audioCtx.createAnalyser()\r\nexport const distortion = audioCtx.createWaveShaper()\r\nexport const gainNode = audioCtx.createGain()\r\nexport const biquadFilter = audioCtx.createBiquadFilter()\r\n\r\nexport const makeDistortionCurve = amount => { // function to make curve shape for distortion/wave shaper node to use\r\n  let k = typeof amount === 'number' ? amount : 50\r\n  let n_samples = 44100\r\n  let curve = new Float32Array(n_samples)\r\n  let deg = Math.PI / 180\r\n  let x = null\r\n  for(let i = 0; i < n_samples; ++i) {\r\n    x = i*2/n_samples - 1\r\n    curve[i] = (3+k) * x * 20 * deg / (Math.PI + k*Math.abs(x))\r\n  }\r\n  return curve\r\n}\r\n\r\nexport const start = ({ voiceSetting, visualSetting, mute, visualizer }) => {\r\n\r\n  window.navigator.getUserMedia({ audio: true } // constraints - only audio needed for this app\r\n                                , stream => { // Success callback\r\n                                    let source = audioCtx.createMediaStreamSource(stream)\r\n                                    source.connect(analyser)\r\n                                    analyser.connect(distortion)\r\n                                    distortion.connect(biquadFilter)\r\n                                    biquadFilter.connect(gainNode)\r\n                                    gainNode.connect(audioCtx.destination) // connecting the different audio graph nodes together\r\n                                    visualize(stream, visualSetting)\r\n                                    voiceChange(voiceSetting)\r\n                                  }\r\n                                , err => console.log('The following error occured: ' + err)\r\n                              )\r\n}\r\n\r\nvar drawVisual = null\r\nexport const visualize = (stream, visualSetting) => {\r\n  let WIDTH = canvas.width\r\n  let HEIGHT = canvas.height\r\n  if(visualSetting == 'sinewave') {\r\n    analyser.fftSize = 2048\r\n    let bufferLength = analyser.frequencyBinCount // half the FFT value\r\n    let dataArray = new Uint8Array(bufferLength) // create an array to store the data\r\n    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT)\r\n    const draw = () => {\r\n      let drawVisual = requestAnimationFrame(draw)\r\n      analyser.getByteTimeDomainData(dataArray) // get waveform data and put it into the array created above\r\n      canvasCtx.fillStyle = 'rgb(200, 200, 200)' // draw wave with canvas\r\n      canvasCtx.fillRect(0, 0, WIDTH, HEIGHT)\r\n      canvasCtx.lineWidth = 2\r\n      canvasCtx.strokeStyle = 'rgb(0, 0, 0)'\r\n      canvasCtx.beginPath()\r\n      var sliceWidth = WIDTH * 1.0 / bufferLength\r\n      var x = 0\r\n      for(var i = 0; i < bufferLength; i++) {\r\n        var v = dataArray[i] / 128.0\r\n        var y = v * HEIGHT/2\r\n        if(i === 0)\r\n          canvasCtx.moveTo(x, y)\r\n        else\r\n          canvasCtx.lineTo(x, y)\r\n        x += sliceWidth\r\n      }\r\n      canvasCtx.lineTo(canvas.width, canvas.height/2)\r\n      canvasCtx.stroke()\r\n      return drawVisual\r\n    }\r\n    return draw()\r\n  } else if(visualSetting == \"off\") {\r\n    canvasCtx.clearRect(0, 0, WIDTH, HEIGHT)\r\n    canvasCtx.fillStyle = \"red\"\r\n    canvasCtx.fillRect(0, 0, WIDTH, HEIGHT)\r\n  }\r\n}\r\n\r\nexport const voiceChange = voiceSetting => {\r\n  distortion.curve = new Float32Array\r\n  biquadFilter.gain.value = 0 // reset the effects each time the voiceChange function is run\r\n  console.log(voiceSetting)\r\n  if(voiceSetting == \"distortion\")\r\n    distortion.curve = makeDistortionCurve(400) // apply distortion to sound using waveshaper node\r\n  else if(voiceSetting == \"biquad\") {\r\n    biquadFilter.type = \"lowshelf\"\r\n    biquadFilter.frequency.value = 1000\r\n    biquadFilter.gain.value = 25 // apply lowshelf filter to sounds using biquad\r\n  } else if(voiceSetting == \"off\")\r\n    console.log(\"Voice settings turned off\") // do nothing, as off option was chosen\r\n}\r\n\r\n\r\nmute.onclick = voiceMute\r\n\r\nexport const voiceMute = () => { // toggle to mute and unmute sound\r\n  if(mute.id === '') {\r\n    gainNode.gain.value = 0 // gain set to 0 to mute sound\r\n    mute.id = \"activated\"\r\n    mute.innerHTML = \"Unmute\"\r\n  } else {\r\n    gainNode.gain.value = 1 // gain set to 1 to unmute sound\r\n    mute.id = \"\"\r\n    mute.innerHTML = \"Mute\"\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 342,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "audioCtx",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~audioCtx",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{audioCtx}",
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 343,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "analyser",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~analyser",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{analyser}",
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 344,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "distortion",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~distortion",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{distortion}",
    "description": null,
    "lineNumber": 12,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 345,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "gainNode",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~gainNode",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{gainNode}",
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 346,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "biquadFilter",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~biquadFilter",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{biquadFilter}",
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 347,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "makeDistortionCurve",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~makeDistortionCurve",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{makeDistortionCurve}",
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 348,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "start",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~start",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{start}",
    "description": null,
    "lineNumber": 29,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 349,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "drawVisual",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~drawVisual",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 46,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 350,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "visualize",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~visualize",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{visualize}",
    "description": null,
    "lineNumber": 47,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 351,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "voiceChange",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~voiceChange",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{voiceChange}",
    "description": null,
    "lineNumber": 86,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 352,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "voiceMute",
    "memberof": "lib/services/musical.browser.js",
    "longname": "lib/services/musical.browser.js~voiceMute",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/musical.browser.js",
    "importStyle": "{voiceMute}",
    "description": null,
    "lineNumber": 103,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 353,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/musical.js",
    "memberof": null,
    "longname": "lib/services/musical.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { IS_BROWSER } from '../../config'\r\nmodule.exports = IS_BROWSER ? require('./musical.browser') : {}\r\n"
  },
  {
    "__docId__": 354,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/persistence.js",
    "memberof": null,
    "longname": "lib/services/persistence.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import cookie from 'react-cookie'\r\nimport { client, log, noop } from '../../config'\r\nconst { state } = client\r\n\r\nconst keyNames = Object.keys(state.meta)\r\nconst separator = ':'\r\nconst stateSerializers =  { json: state => JSON.stringify(state)\r\n                          , concat: state => state.join(separator)\r\n                          , base64: state => new Buffer(state).toString('base64')\r\n                          }\r\nconst stateDeserializers =  { json: serialized => JSON.parse(serialized)\r\n                            , concat: serialized => serialized.split(separator)\r\n                            , base64: serialized => new Buffer(serialized, 'base64').toString('ascii')\r\n                            }\r\n\r\n\r\n\r\nfunction getStateMeta(key) {\r\n  let stateMeta = state.meta[key]\r\n  if(!stateMeta)\r\n    throw new Error(`Unsupported state => '${stateKey}'. Supported states: ['${JSON.stringify([...keyNames])}']`)\r\n  return stateMeta\r\n}\r\n\r\nfunction getStores(stateKeys = keyNames) {\r\n  let stores = {}\r\n  for(let stateKey of stateKeys) {\r\n    let stateMeta = getStateMeta(stateKey)\r\n    let serialize = getSerializer(stateMeta)\r\n    let deserialize = getDeserializer(stateMeta)\r\n    stores[stateKey] = getPersistMedium({ persist: stateMeta.persist\r\n                                        , serialize\r\n                                        , deserialize\r\n                                        })\r\n  }\r\n  return stores\r\n}\r\n\r\n\r\nfunction getSerializer({ jsonProps, concatProps, base64Props }) {\r\n  if(jsonProps && concatProps)\r\n    throw new Error('Cannot serialize using jsonProps and concatProps (concatProps should only be used on array state).')\r\n\r\n  let serializers = []\r\n  if(jsonProps)\r\n    serializers.push(stateSerializers.json)\r\n  if(concatProps)\r\n    serializers.push(stateSerializers.concat)\r\n  if(base64Props)\r\n    serializers.push(stateSerializers.base64)\r\n\r\n  return state => {\r\n    //log.warn({ state }, 'SERIALIZER')\r\n    return serializers.reduce((mutated, serialize) => serialize(mutated), state)\r\n  }\r\n}\r\n\r\nfunction getDeserializer({ jsonProps, concatProps, base64Props, defaultProps = noop() }) {\r\n  if(jsonProps && concatProps)\r\n    throw new Error('Cannot serialize using jsonProps and concatProps (concatProps should only be used on array state).')\r\n\r\n  let deserializers = []\r\n  if(base64Props)\r\n    deserializers.push(stateDeserializers.base64)\r\n  if(concatProps)\r\n    deserializers.push(stateDeserializers.concat)\r\n  if(jsonProps)\r\n    deserializers.push(stateDeserializers.json)\r\n\r\n  return serialized => {\r\n    //log.warn({ serialized }, 'DESERIALIZER')\r\n    return typeof serialized === 'undefined' ? defaultProps : deserializers.reduce((mutated, deserialize) => deserialize(mutated), serialized)\r\n  }\r\n}\r\n\r\n\r\nfunction getPersistMedium({ persist, serialize, deserialize }) {\r\n  switch(persist.type) {\r\n    case 'cookie':\r\n      return  { load: () => deserialize(cookie.load(persist.name))\r\n              , save: state => cookie.save(persist.name, serialize(state), cookieOpts(persist))\r\n              , remove: () => cookie.save(persist.name, noop(), cookieOpts({...persist, days: -1}))\r\n              }\r\n    case 'local':\r\n      return  { load: () => deserialize(localStorage.getItem(persist.name))\r\n              , save: state => localStorage.setItem(persist.name, serialize(state))\r\n              , remove: () => localStorage.removeItem(persist.name)\r\n              }\r\n    case 'session':\r\n      return  { load: () => deserialize(sessionStorage.getItem(persist.name))\r\n              , save: state => sessionStorage.setItem(persist.name, serialize(state))\r\n              , remove: () => sessionStorage.removeItem(persist.name)\r\n              }\r\n  }\r\n}\r\n\r\nconst cookieOpts = persist => ( { path: '/'\r\n                                , expires: getFutureDate(persist.days || 1)\r\n                                , secure: persist.setSecureCookie || false\r\n                                , httpOnly: persist.httpOnly || false\r\n                                } )\r\n\r\nfunction getFutureDate(days) {\r\n  let futureDate = new Date()\r\n  futureDate.setDate(futureDate.getDate()+days)\r\n  return futureDate\r\n}\r\n\r\n\r\nexport default (stores = getStores()) => {\r\n  const loadState = (stateKeys = keyNames) => {\r\n    let state = {}\r\n    for(let stateKey of stateKeys)\r\n      state[stateKey] = stores[stateKey].load()\r\n    return state\r\n  }\r\n\r\n  const saveState = partialState => {\r\n    //log.warn({ partialState }, 'saveState')\r\n    let fullState = {}\r\n    for(let stateKey of Object.keys(partialState)) {\r\n      stores[stateKey].save(partialState[stateKey])\r\n      fullState[stateKey] = state\r\n    }\r\n    return fullState\r\n  }\r\n\r\n  const removeState = stateKeys => {\r\n    //log.warn({ stateKeys }, 'removeState')\r\n    if(!stateKeys)\r\n      throw new Error('Must supply stateKeys to remove from state.')\r\n    let fullState = loadState()\r\n    for(let stateKey of stateKeys) {\r\n      stores[stateKey].remove()\r\n      fullState[stateKey] = noop()\r\n    }\r\n    return fullState\r\n  }\r\n\r\n  /** Loads all the common cookie details */\r\n  const getPersisted = () => loadState(['tokens', 'fingerprint'])\r\n  return { loadState, saveState, removeState, getPersisted }\r\n}\r\n"
  },
  {
    "__docId__": 355,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "state",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~state",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 356,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "keyNames",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~keyNames",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 357,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "separator",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~separator",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 358,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "stateSerializers",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~stateSerializers",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 359,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "stateDeserializers",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~stateDeserializers",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 11,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 360,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getStateMeta",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getStateMeta",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "params": [
      {
        "name": "key",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 361,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getStores",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getStores",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 25,
    "undocument": true,
    "params": [
      {
        "name": "stateKeys",
        "optional": true,
        "types": [
          "*"
        ],
        "defaultRaw": "keyNames",
        "defaultValue": "keyNames"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 362,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getSerializer",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getSerializer",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 40,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"jsonProps\": *, \"concatProps\": *, \"base64Props\": *}"
        ],
        "defaultRaw": {
          "jsonProps": null,
          "concatProps": null,
          "base64Props": null
        },
        "defaultValue": "{\"jsonProps\":null,\"concatProps\":null,\"base64Props\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 363,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getDeserializer",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getDeserializer",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 58,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"jsonProps\": *, \"concatProps\": *, \"base64Props\": *, \"defaultProps\": *}"
        ],
        "defaultRaw": {
          "jsonProps": null,
          "concatProps": null,
          "base64Props": null,
          "defaultProps": null
        },
        "defaultValue": "{\"jsonProps\":null,\"concatProps\":null,\"base64Props\":null,\"defaultProps\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 364,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getPersistMedium",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getPersistMedium",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 77,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"persist\": *, \"serialize\": *, \"deserialize\": *}"
        ],
        "defaultRaw": {
          "persist": null,
          "serialize": null,
          "deserialize": null
        },
        "defaultValue": "{\"persist\":null,\"serialize\":null,\"deserialize\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 365,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cookieOpts",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~cookieOpts",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 97,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 366,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "getFutureDate",
    "memberof": "lib/services/persistence.js",
    "longname": "lib/services/persistence.js~getFutureDate",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/services/persistence.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 103,
    "undocument": true,
    "params": [
      {
        "name": "days",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 367,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/services/promise.js",
    "memberof": null,
    "longname": "lib/services/promise.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import Promise from 'bluebird'\r\n\r\nexport const makeCancelable = promise => {\r\n  let hasCanceled_ = false\r\n  return {\r\n    promise: new Promise(\r\n      (resolve, reject) => promise\r\n        .then(r => hasCanceled_\r\n          ? reject({isCanceled: true})\r\n          : resolve(r)\r\n        )\r\n    ),\r\n    cancel() {\r\n      hasCanceled_ = true\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "__docId__": 368,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "makeCancelable",
    "memberof": "lib/services/promise.js",
    "longname": "lib/services/promise.js~makeCancelable",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/services/promise.js",
    "importStyle": "{makeCancelable}",
    "description": null,
    "lineNumber": 3,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 369,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/stream.js",
    "memberof": null,
    "longname": "lib/stream.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "\r\n/** MAP ON TO CALL A FUNCTION ONLY IN DEV AND PASS THROUGH, DOES NOT MUTATE THE INPUT */\r\nexport const devStream = devFn => x => voidStream(() => process.env.NODE_ENV === 'production' ? {} : devFn(x))\r\n\r\n/** MAP ON TO CALL A VOID FUNCTION AND PASS THROUGH */\r\nexport const voidStream = voidFn => data => {\r\n  voidFn(data)\r\n  return data\r\n}\r\n"
  },
  {
    "__docId__": 370,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "devStream",
    "memberof": "lib/stream.js",
    "longname": "lib/stream.js~devStream",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/stream.js",
    "importStyle": "{devStream}",
    "description": "MAP ON TO CALL A FUNCTION ONLY IN DEV AND PASS THROUGH, DOES NOT MUTATE THE INPUT",
    "lineNumber": 3,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 371,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "voidStream",
    "memberof": "lib/stream.js",
    "longname": "lib/stream.js~voidStream",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/stream.js",
    "importStyle": "{voidStream}",
    "description": "MAP ON TO CALL A VOID FUNCTION AND PASS THROUGH",
    "lineNumber": 6,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 372,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "lib/tls.js",
    "memberof": null,
    "longname": "lib/tls.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import { log } from '../config'\r\nimport { readFile } from 'graceful-fs'\r\nimport path from 'path'\r\nimport { assert } from 'chai'\r\n\r\nconst getDefaultCertificateRoot = path.resolve(__dirname, '..', 'etc', 'certificates')\r\n\r\nexport function readCertificate({ certificateRoot = getDefaultCertificateRoot(), filename }) {\r\n  let certificatePath = path.resolve(certificateRoot, filename)\r\n  return new Promise((resolve, reject) => {\r\n    readFile(certificatePath, (err, certificate) => {\r\n      if (err)\r\n        return reject(err)\r\n      resolve(certificate)\r\n    })\r\n  })\r\n}\r\n\r\nexport function readPfx({ certificateRoot = getDefaultCertificateRoot(), filename, passphrase }) {\r\n  assert.typeOf(filename, 'string', 'filename for pfx must be specified')\r\n  assert.isAbove(filename.length, 0, 'filename must not be empty')\r\n  assert.typeOf(passphrase, 'string', 'passphrase must be a string')\r\n  assert.isAbove(passphrase.length, 0, 'passphrase must not be empty')\r\n  return readCertificate({ certificateRoot, filename }).then(pfx => ({ pfx, passphrase }))\r\n}\r\n"
  },
  {
    "__docId__": 373,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getDefaultCertificateRoot",
    "memberof": "lib/tls.js",
    "longname": "lib/tls.js~getDefaultCertificateRoot",
    "access": null,
    "export": false,
    "importPath": "gridiron-example/lib/tls.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 374,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "readCertificate",
    "memberof": "lib/tls.js",
    "longname": "lib/tls.js~readCertificate",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/tls.js",
    "importStyle": "{readCertificate}",
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"certificateRoot\": *, \"filename\": *}"
        ],
        "defaultRaw": {
          "certificateRoot": null,
          "filename": null
        },
        "defaultValue": "{\"certificateRoot\":null,\"filename\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 375,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "readPfx",
    "memberof": "lib/tls.js",
    "longname": "lib/tls.js~readPfx",
    "access": null,
    "export": true,
    "importPath": "gridiron-example/lib/tls.js",
    "importStyle": "{readPfx}",
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "params": [
      {
        "name": "objectPattern",
        "types": [
          "{\"certificateRoot\": *, \"filename\": *, \"passphrase\": *}"
        ],
        "defaultRaw": {
          "certificateRoot": null,
          "filename": null,
          "passphrase": null
        },
        "defaultValue": "{\"certificateRoot\":null,\"filename\":null,\"passphrase\":null}"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 377,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Infinity",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 378,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~NaN",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 379,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~undefined",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 380,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~null",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 381,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 382,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 383,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 384,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 385,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 386,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 387,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Symbol",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 388,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Error",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 389,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~EvalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 390,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~InternalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 391,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RangeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 392,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ReferenceError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 393,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~SyntaxError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 394,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~TypeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 395,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~URIError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 396,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 397,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 398,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Date",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 399,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~String",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 400,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~string",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 401,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RegExp",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 402,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 403,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 404,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 405,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8ClampedArray",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 406,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 407,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 408,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 409,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 410,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 411,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float64Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 412,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Map",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 413,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Set",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 414,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakMap",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 415,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakSet",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 416,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ArrayBuffer",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 417,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~DataView",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 418,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~JSON",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 419,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Promise",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 420,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Generator",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 421,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~GeneratorFunction",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 422,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Reflect",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 423,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Proxy",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 425,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "CanvasRenderingContext2D",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~CanvasRenderingContext2D",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 426,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DocumentFragment",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~DocumentFragment",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 427,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Element",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Element",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Element",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 428,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Event",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Event",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Event",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 429,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Node",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Node",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Node",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 430,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NodeList",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/NodeList",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~NodeList",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 431,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "XMLHttpRequest",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~XMLHttpRequest",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 432,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "AudioContext",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/AudioContext",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~AudioContext",
    "access": null,
    "description": "",
    "builtinExternal": true
  }
]