{"version":3,"file":"meBoot.js","sources":["../../../../../node_modules/preact/src/vnode.js","../../../../../node_modules/preact/src/options.js","../../../../../node_modules/preact/src/h.js","../../../../../node_modules/preact/src/util.js","../../../../../node_modules/preact/src/clone-element.js","../../../../../node_modules/preact/src/constants.js","../../../../../node_modules/preact/src/render-queue.js","../../../../../node_modules/preact/src/vdom/index.js","../../../../../node_modules/preact/src/dom/index.js","../../../../../node_modules/preact/src/vdom/diff.js","../../../../../node_modules/preact/src/vdom/component-recycler.js","../../../../../node_modules/preact/src/vdom/component.js","../../../../../node_modules/preact/src/component.js","../../../../../node_modules/tslib/tslib.es6.js","../../../../../node_modules/symbol-observable/es/ponyfill.js","../../../../../node_modules/symbol-observable/es/index.js","../../../../../node_modules/redux/es/redux.js","../../../../../node_modules/classcat/src/index.js","../../lib/src/src/core/connect.tsx","../../lib/src/src/core/RenderAsync.tsx","../../lib/src/src/utilities/url.polyfill.ts","../../lib/src/src/utilities/url.ts","../../lib/src/src/utilities/oauth.ts","../../lib/src/src/api/iframe.ts","../../lib/src/src/utilities/types.ts","../../lib/src/src/utilities/string.ts","../../lib/src/src/utilities/pick.ts","../../lib/src/src/utilities/find.ts","../../lib/src/src/utilities/accounts.ts","../../lib/src/src/utilities/announcer.ts","../../lib/src/src/utilities/browser.ts","../../lib/src/src/utilities/cookie.ts","../../lib/src/src/utilities/debounce.ts","../../lib/src/src/utilities/dom.ts","../../lib/src/src/utilities/onLoadUntilUrgent.ts","../../lib/src/src/utilities/loadCore.ts","../../lib/src/src/utilities/merge.ts","../../lib/src/src/utilities/syntheticEvent.ts","../../lib/src/src/utilities/telemetry.ts","../../lib/src/src/utilities/theme.ts","../../lib/src/src/actions/pictureActions.ts","../../../../../node_modules/promise-polyfill/src/finally.js","../../../../../node_modules/promise-polyfill/src/index.js","../../lib/src/src/actions/cacheActions.ts","../../lib/src/src/components/ProfilePicture.tsx","../../lib/src/src/core/toChildArray.ts","../../lib/src/src/components/Tooltip.tsx","../../lib/src/src/components/TruncateTag.tsx","../../lib/src/src/components/TruncateText.tsx","../../lib/src/src/components/PresenceAsync.tsx","../../lib/src/src/components/Header.tsx","../../lib/src/src/components/LinkButton.tsx","../../lib/src/src/components/FocusVisible.tsx","../../lib/src/src/components/Breakpoint.tsx","../../lib/src/src/components/ScreenReaderText.tsx","../../lib/src/api/auth/src/api/auth/providers/partnerManaged.ts","../../lib/src/api/src/api/auth/selectors.ts","../../lib/src/api/auth/src/api/auth/providers/urlHelpers.ts","../../lib/src/api/auth/src/api/auth/providers/webAccountProviders.ts","../../lib/src/api/auth/src/api/auth/providers/operationHelpers.ts","../../lib/src/api/auth/src/api/auth/providers/navProviders.ts","../../lib/src/api/auth/src/api/auth/providers/webDualStackProvider.ts","../../lib/src/api/auth/src/api/auth/providers/webMsaOnlyProvider.ts","../../lib/src/api/auth/src/api/auth/providers/webAadOnlyProvider.ts","../../lib/src/api/auth/src/api/auth/providers/webAadWithMsaFedProvider.ts","../../lib/src/api/auth/src/api/auth/providers/adaljsProvider.ts","../../lib/src/api/auth/src/api/auth/providers/v1AuthProvider.ts","../../lib/src/api/auth/src/api/auth/providers/msaljsProvider.ts","../../lib/src/api/auth/src/api/auth/providers/webMsaWithAadProxy.ts","../../lib/src/api/auth/src/api/auth/providers/webAadWithMsaProxy.ts","../../lib/src/api/src/api/auth/index.ts","../../lib/src/src/actions/authActions.ts","../../lib/src/src/components/Root.tsx","../../../../../node_modules/redux-thunk/es/index.js","../../lib/src/reducers/src/reducers/accounts/byId.ts","../../lib/src/reducers/src/reducers/accounts/allIds.ts","../../lib/src/reducers/src/reducers/accounts/currentId.ts","../../lib/src/reducers/src/reducers/accounts/index.ts","../../lib/src/src/reducers/commands.ts","../../lib/src/reducers/src/reducers/displayMode/current.ts","../../lib/src/reducers/src/reducers/displayMode/breakpoint.ts","../../lib/src/reducers/src/reducers/displayMode/index.ts","../../lib/src/src/reducers/picturesStatus.ts","../../lib/src/src/reducers/theme.ts","../../lib/src/src/reducers/presenceConfig.ts","../../lib/src/src/reducers/headerTheme.ts","../../lib/src/src/reducers/index.ts","../../lib/src/src/store/errorHandling.ts","../../lib/src/src/store/telemetryLayer.ts","../../lib/src/src/store/configureStore.ts","../../lib/src/src/core/Provider.tsx","../../lib/src/src/actions/initOptions.ts","../../lib/src/src/actions/publicApiActions.ts","../../lib/src/src/actions/presenceActions.ts","../../lib/src/publicApiController.ts","../../lib/src/src/components/ProfilePictureOverlay.tsx","../../lib/src/src/components/AuthAppUpsell.tsx","../../lib/src/index.tsx"],"sourcesContent":["/**\n * Virtual DOM Node\n * @typedef VNode\n * @property {string | function} nodeName The string of the DOM node to create or Component constructor to render\n * @property {Array} children The children of node\n * @property {string | number | undefined} key The key used to identify this VNode in a list\n * @property {object} attributes The properties of this VNode\n */\nexport const VNode = function VNode() {};\n","/**\n * @typedef {import('./component').Component} Component\n * @typedef {import('./vnode').VNode} VNode\n */\n\n/**\n * Global options\n * @public\n * @typedef Options\n * @property {boolean} [syncComponentUpdates] If `true`, `prop` changes trigger synchronous component updates. Defaults to true.\n * @property {(vnode: VNode) => void} [vnode] Processes all created VNodes.\n * @property {(component: Component) => void} [afterMount] Hook invoked after a component is mounted.\n * @property {(component: Component) => void} [afterUpdate] Hook invoked after the DOM is updated with a component's latest render.\n * @property {(component: Component) => void} [beforeUnmount] Hook invoked immediately before a component is unmounted.\n * @property {(rerender: function) => void} [debounceRendering] Hook invoked whenever a rerender is requested. Can be used to debounce rerenders.\n * @property {(event: Event) => Event | void} [event] Hook invoked before any Preact event listeners. The return value (if any) replaces the native browser event given to event listeners\n */\n\n/** @type {Options} */\nconst options = {};\n\nexport default options;\n","import { VNode } from './vnode';\nimport options from './options';\n\n\nconst stack = [];\n\nconst EMPTY_CHILDREN = [];\n\n/**\n * JSX/hyperscript reviver.\n * @see http://jasonformat.com/wtf-is-jsx\n * Benchmarks: https://esbench.com/bench/57ee8f8e330ab09900a1a1a0\n *\n * Note: this is exported as both `h()` and `createElement()` for compatibility\n * reasons.\n *\n * Creates a VNode (virtual DOM element). A tree of VNodes can be used as a\n * lightweight representation of the structure of a DOM tree. This structure can\n * be realized by recursively comparing it against the current _actual_ DOM\n * structure, and applying only the differences.\n *\n * `h()`/`createElement()` accepts an element name, a list of attributes/props,\n * and optionally children to append to the element.\n *\n * @example The following DOM tree\n *\n * `
Hello!
`\n *\n * can be constructed using this function as:\n *\n * `h('div', { id: 'foo', name : 'bar' }, 'Hello!');`\n *\n * @param {string | function} nodeName An element name. Ex: `div`, `a`, `span`, etc.\n * @param {object | null} attributes Any attributes/props to set on the created element.\n * @param {VNode[]} [rest] Additional arguments are taken to be children to\n * append. Can be infinitely nested Arrays.\n *\n * @public\n */\nexport function h(nodeName, attributes) {\n\tlet children=EMPTY_CHILDREN, lastSimple, child, simple, i;\n\tfor (i=arguments.length; i-- > 2; ) {\n\t\tstack.push(arguments[i]);\n\t}\n\tif (attributes && attributes.children!=null) {\n\t\tif (!stack.length) stack.push(attributes.children);\n\t\tdelete attributes.children;\n\t}\n\twhile (stack.length) {\n\t\tif ((child = stack.pop()) && child.pop!==undefined) {\n\t\t\tfor (i=child.length; i--; ) stack.push(child[i]);\n\t\t}\n\t\telse {\n\t\t\tif (typeof child==='boolean') child = null;\n\n\t\t\tif ((simple = typeof nodeName!=='function')) {\n\t\t\t\tif (child==null) child = '';\n\t\t\t\telse if (typeof child==='number') child = String(child);\n\t\t\t\telse if (typeof child!=='string') simple = false;\n\t\t\t}\n\n\t\t\tif (simple && lastSimple) {\n\t\t\t\tchildren[children.length-1] += child;\n\t\t\t}\n\t\t\telse if (children===EMPTY_CHILDREN) {\n\t\t\t\tchildren = [child];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildren.push(child);\n\t\t\t}\n\n\t\t\tlastSimple = simple;\n\t\t}\n\t}\n\n\tlet p = new VNode();\n\tp.nodeName = nodeName;\n\tp.children = children;\n\tp.attributes = attributes==null ? undefined : attributes;\n\tp.key = attributes==null ? undefined : attributes.key;\n\n\t// if a \"vnode hook\" is defined, pass every created VNode to it\n\tif (options.vnode!==undefined) options.vnode(p);\n\n\treturn p;\n}\n","/**\n * Copy all properties from `props` onto `obj`.\n * @param {object} obj Object onto which properties should be copied.\n * @param {object} props Object from which to copy properties.\n * @returns {object}\n * @private\n */\nexport function extend(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn obj;\n}\n\n/** Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {object|function} [ref=null]\n * @param {any} [value]\n */\nexport function applyRef(ref, value) {\n\tif (ref) {\n\t\tif (typeof ref=='function') ref(value);\n\t\telse ref.current = value;\n\t}\n}\n\n/**\n * Call a function asynchronously, as soon as possible. Makes\n * use of HTML Promise to schedule the callback if available,\n * otherwise falling back to `setTimeout` (mainly for IE<11).\n * @type {(callback: function) => void}\n */\nexport const defer = typeof Promise=='function' ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n","import { extend } from './util';\nimport { h } from './h';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its\n * children.\n * @param {import('./vnode').VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array} [rest] Any additional arguments will be used as replacement\n * children.\n */\nexport function cloneElement(vnode, props) {\n\treturn h(\n\t\tvnode.nodeName,\n\t\textend(extend({}, vnode.attributes), props),\n\t\targuments.length>2 ? [].slice.call(arguments, 2) : vnode.children\n\t);\n}\n","// render modes\n\n/** Do not re-render a component */\nexport const NO_RENDER = 0;\n/** Synchronously re-render a component and its children */\nexport const SYNC_RENDER = 1;\n/** Synchronously re-render a component, even if its lifecycle methods attempt to prevent it. */\nexport const FORCE_RENDER = 2;\n/** Queue asynchronous re-render of a component and it's children */\nexport const ASYNC_RENDER = 3;\n\n\nexport const ATTR_KEY = '__preactattr_';\n\n/** DOM properties that should NOT have \"px\" added when numeric */\nexport const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\n","import options from './options';\nimport { defer } from './util';\nimport { renderComponent } from './vdom/component';\n\n/**\n * Managed queue of dirty components to be re-rendered\n * @type {Array}\n */\nlet items = [];\n\n/**\n * Enqueue a rerender of a component\n * @param {import('./component').Component} component The component to rerender\n */\nexport function enqueueRender(component) {\n\tif (!component._dirty && (component._dirty = true) && items.push(component)==1) {\n\t\t(options.debounceRendering || defer)(rerender);\n\t}\n}\n\n/** Rerender all enqueued dirty components */\nexport function rerender() {\n\tlet p;\n\twhile ( (p = items.pop()) ) {\n\t\tif (p._dirty) renderComponent(p);\n\t}\n}\n","import { extend } from '../util';\n\n\n/**\n * Check if two nodes are equivalent.\n * @param {import('../dom').PreactElement} node DOM Node to compare\n * @param {import('../vnode').VNode} vnode Virtual DOM node to compare\n * @param {boolean} [hydrating=false] If true, ignores component constructors\n * when comparing.\n * @private\n */\nexport function isSameNodeType(node, vnode, hydrating) {\n\tif (typeof vnode==='string' || typeof vnode==='number') {\n\t\treturn node.splitText!==undefined;\n\t}\n\tif (typeof vnode.nodeName==='string') {\n\t\treturn !node._componentConstructor && isNamedNode(node, vnode.nodeName);\n\t}\n\treturn hydrating || node._componentConstructor===vnode.nodeName;\n}\n\n\n/**\n * Check if an Element has a given nodeName, case-insensitively.\n * @param {import('../dom').PreactElement} node A DOM Element to inspect the name of.\n * @param {string} nodeName Unnormalized name to compare against.\n */\nexport function isNamedNode(node, nodeName) {\n\treturn node.normalizedNodeName===nodeName || node.nodeName.toLowerCase()===nodeName.toLowerCase();\n}\n\n\n/**\n * Reconstruct Component-style `props` from a VNode.\n * Ensures default/fallback values from `defaultProps`:\n * Own-properties of `defaultProps` not present in `vnode.attributes` are added.\n * @param {import('../vnode').VNode} vnode The VNode to get props for\n * @returns {object} The props to use for this VNode\n */\nexport function getNodeProps(vnode) {\n\tlet props = extend({}, vnode.attributes);\n\tprops.children = vnode.children;\n\n\tlet defaultProps = vnode.nodeName.defaultProps;\n\tif (defaultProps!==undefined) {\n\t\tfor (let i in defaultProps) {\n\t\t\tif (props[i]===undefined) {\n\t\t\t\tprops[i] = defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n","import { IS_NON_DIMENSIONAL } from '../constants';\nimport { applyRef } from '../util';\nimport options from '../options';\n\n/**\n * A DOM event listener\n * @typedef {(e: Event) => void} EventListner\n */\n\n/**\n * A mapping of event types to event listeners\n * @typedef {Object.} EventListenerMap\n */\n\n/**\n * Properties Preact adds to elements it creates\n * @typedef PreactElementExtensions\n * @property {string} [normalizedNodeName] A normalized node name to use in diffing\n * @property {EventListenerMap} [_listeners] A map of event listeners added by components to this DOM node\n * @property {import('../component').Component} [_component] The component that rendered this DOM node\n * @property {function} [_componentConstructor] The constructor of the component that rendered this DOM node\n */\n\n/**\n * A DOM element that has been extended with Preact properties\n * @typedef {Element & ElementCSSInlineStyle & PreactElementExtensions} PreactElement\n */\n\n/**\n * Create an element with the given nodeName.\n * @param {string} nodeName The DOM node to create\n * @param {boolean} [isSvg=false] If `true`, creates an element within the SVG\n * namespace.\n * @returns {PreactElement} The created DOM node\n */\nexport function createNode(nodeName, isSvg) {\n\t/** @type {PreactElement} */\n\tlet node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n\tnode.normalizedNodeName = nodeName;\n\treturn node;\n}\n\n\n/**\n * Remove a child node from its parent if attached.\n * @param {Node} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\n\n/**\n * Set a named attribute on the given Node, with special behavior for some names\n * and event handlers. If `value` is `null`, the attribute/handler will be\n * removed.\n * @param {PreactElement} node An element to mutate\n * @param {string} name The name/key to set, such as an event or attribute name\n * @param {*} old The last value that was set for this name/node pair\n * @param {*} value An attribute value, such as a function to be used as an\n * event handler\n * @param {boolean} isSvg Are we currently diffing inside an svg?\n * @private\n */\nexport function setAccessor(node, name, old, value, isSvg) {\n\tif (name==='className') name = 'class';\n\n\n\tif (name==='key') {\n\t\t// ignore\n\t}\n\telse if (name==='ref') {\n\t\tapplyRef(old, null);\n\t\tapplyRef(value, node);\n\t}\n\telse if (name==='class' && !isSvg) {\n\t\tnode.className = value || '';\n\t}\n\telse if (name==='style') {\n\t\tif (!value || typeof value==='string' || typeof old==='string') {\n\t\t\tnode.style.cssText = value || '';\n\t\t}\n\t\tif (value && typeof value==='object') {\n\t\t\tif (typeof old!=='string') {\n\t\t\t\tfor (let i in old) if (!(i in value)) node.style[i] = '';\n\t\t\t}\n\t\t\tfor (let i in value) {\n\t\t\t\tnode.style[i] = typeof value[i]==='number' && IS_NON_DIMENSIONAL.test(i)===false ? (value[i]+'px') : value[i];\n\t\t\t}\n\t\t}\n\t}\n\telse if (name==='dangerouslySetInnerHTML') {\n\t\tif (value) node.innerHTML = value.__html || '';\n\t}\n\telse if (name[0]=='o' && name[1]=='n') {\n\t\tlet useCapture = name !== (name=name.replace(/Capture$/, ''));\n\t\tname = name.toLowerCase().substring(2);\n\t\tif (value) {\n\t\t\tif (!old) node.addEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\telse {\n\t\t\tnode.removeEventListener(name, eventProxy, useCapture);\n\t\t}\n\t\t(node._listeners || (node._listeners = {}))[name] = value;\n\t}\n\telse if (name!=='list' && name!=='type' && !isSvg && name in node) {\n\t\t// Attempt to set a DOM property to the given value.\n\t\t// IE & FF throw for certain property-value combinations.\n\t\ttry {\n\t\t\tnode[name] = value==null ? '' : value;\n\t\t} catch (e) { }\n\t\tif ((value==null || value===false) && name!='spellcheck') node.removeAttribute(name);\n\t}\n\telse {\n\t\tlet ns = isSvg && (name !== (name = name.replace(/^xlink:?/, '')));\n\t\t// spellcheck is treated differently than all other boolean values and\n\t\t// should not be removed when the value is `false`. See:\n\t\t// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-spellcheck\n\t\tif (value==null || value===false) {\n\t\t\tif (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());\n\t\t\telse node.removeAttribute(name);\n\t\t}\n\t\telse if (typeof value!=='function') {\n\t\t\tif (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);\n\t\t\telse node.setAttribute(name, value);\n\t\t}\n\t}\n}\n\n\n/**\n * Proxy an event to hooked event handlers\n * @param {Event} e The event object from the browser\n * @private\n */\nfunction eventProxy(e) {\n\treturn this._listeners[e.type](options.event && options.event(e) || e);\n}\n","import { ATTR_KEY } from '../constants';\nimport { isSameNodeType, isNamedNode } from './index';\nimport { buildComponentFromVNode } from './component';\nimport { createNode, setAccessor } from '../dom/index';\nimport { unmountComponent } from './component';\nimport options from '../options';\nimport { applyRef } from '../util';\nimport { removeNode } from '../dom/index';\n\n/**\n * Queue of components that have been mounted and are awaiting componentDidMount\n * @type {Array}\n */\nexport const mounts = [];\n\n/** Diff recursion count, used to track the end of the diff cycle. */\nexport let diffLevel = 0;\n\n/** Global flag indicating if the diff is currently within an SVG */\nlet isSvgMode = false;\n\n/** Global flag indicating if the diff is performing hydration */\nlet hydrating = false;\n\n/** Invoke queued componentDidMount lifecycle methods */\nexport function flushMounts() {\n\tlet c;\n\twhile ((c = mounts.shift())) {\n\t\tif (options.afterMount) options.afterMount(c);\n\t\tif (c.componentDidMount) c.componentDidMount();\n\t}\n}\n\n\n/**\n * Apply differences in a given vnode (and it's deep children) to a real DOM Node.\n * @param {import('../dom').PreactElement} dom A DOM node to mutate into the shape of a `vnode`\n * @param {import('../vnode').VNode} vnode A VNode (with descendants forming a tree) representing\n * the desired DOM structure\n * @param {object} context The current context\n * @param {boolean} mountAll Whether or not to immediately mount all components\n * @param {Element} parent ?\n * @param {boolean} componentRoot ?\n * @returns {import('../dom').PreactElement} The created/mutated element\n * @private\n */\nexport function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n\t// diffLevel having been 0 here indicates initial entry into the diff (not a subdiff)\n\tif (!diffLevel++) {\n\t\t// when first starting the diff, check if we're diffing an SVG or within an SVG\n\t\tisSvgMode = parent!=null && parent.ownerSVGElement!==undefined;\n\n\t\t// hydration is indicated by the existing element to be diffed not having a prop cache\n\t\thydrating = dom!=null && !(ATTR_KEY in dom);\n\t}\n\n\tlet ret = idiff(dom, vnode, context, mountAll, componentRoot);\n\n\t// append the element if its a new parent\n\tif (parent && ret.parentNode!==parent) parent.appendChild(ret);\n\n\t// diffLevel being reduced to 0 means we're exiting the diff\n\tif (!--diffLevel) {\n\t\thydrating = false;\n\t\t// invoke queued componentDidMount lifecycle methods\n\t\tif (!componentRoot) flushMounts();\n\t}\n\n\treturn ret;\n}\n\n\n/**\n * Internals of `diff()`, separated to allow bypassing diffLevel / mount flushing.\n * @param {import('../dom').PreactElement} dom A DOM node to mutate into the shape of a `vnode`\n * @param {import('../vnode').VNode} vnode A VNode (with descendants forming a tree) representing the desired DOM structure\n * @param {object} context The current context\n * @param {boolean} mountAll Whether or not to immediately mount all components\n * @param {boolean} [componentRoot] ?\n * @private\n */\nfunction idiff(dom, vnode, context, mountAll, componentRoot) {\n\tlet out = dom,\n\t\tprevSvgMode = isSvgMode;\n\n\t// empty values (null, undefined, booleans) render as empty Text nodes\n\tif (vnode==null || typeof vnode==='boolean') vnode = '';\n\n\n\t// Fast case: Strings & Numbers create/update Text nodes.\n\tif (typeof vnode==='string' || typeof vnode==='number') {\n\n\t\t// update if it's already a Text node:\n\t\tif (dom && dom.splitText!==undefined && dom.parentNode && (!dom._component || componentRoot)) {\n\t\t\t/* istanbul ignore if */ /* Browser quirk that can't be covered: https://github.com/developit/preact/commit/fd4f21f5c45dfd75151bd27b4c217d8003aa5eb9 */\n\t\t\tif (dom.nodeValue!=vnode) {\n\t\t\t\tdom.nodeValue = vnode;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// it wasn't a Text node: replace it with one and recycle the old Element\n\t\t\tout = document.createTextNode(vnode);\n\t\t\tif (dom) {\n\t\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\t\t\t\trecollectNodeTree(dom, true);\n\t\t\t}\n\t\t}\n\n\t\tout[ATTR_KEY] = true;\n\n\t\treturn out;\n\t}\n\n\n\t// If the VNode represents a Component, perform a component diff:\n\tlet vnodeName = vnode.nodeName;\n\tif (typeof vnodeName==='function') {\n\t\treturn buildComponentFromVNode(dom, vnode, context, mountAll);\n\t}\n\n\n\t// Tracks entering and exiting SVG namespace when descending through the tree.\n\tisSvgMode = vnodeName==='svg' ? true : vnodeName==='foreignObject' ? false : isSvgMode;\n\n\n\t// If there's no existing element or it's the wrong type, create a new one:\n\tvnodeName = String(vnodeName);\n\tif (!dom || !isNamedNode(dom, vnodeName)) {\n\t\tout = createNode(vnodeName, isSvgMode);\n\n\t\tif (dom) {\n\t\t\t// move children into the replacement node\n\t\t\twhile (dom.firstChild) out.appendChild(dom.firstChild);\n\n\t\t\t// if the previous Element was mounted into the DOM, replace it inline\n\t\t\tif (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n\n\t\t\t// recycle the old element (skips non-Element node types)\n\t\t\trecollectNodeTree(dom, true);\n\t\t}\n\t}\n\n\n\tlet fc = out.firstChild,\n\t\tprops = out[ATTR_KEY],\n\t\tvchildren = vnode.children;\n\n\tif (props==null) {\n\t\tprops = out[ATTR_KEY] = {};\n\t\tfor (let a=out.attributes, i=a.length; i--; ) props[a[i].name] = a[i].value;\n\t}\n\n\t// Optimization: fast-path for elements containing a single TextNode:\n\tif (!hydrating && vchildren && vchildren.length===1 && typeof vchildren[0]==='string' && fc!=null && fc.splitText!==undefined && fc.nextSibling==null) {\n\t\tif (fc.nodeValue!=vchildren[0]) {\n\t\t\tfc.nodeValue = vchildren[0];\n\t\t}\n\t}\n\t// otherwise, if there are existing or new children, diff them:\n\telse if (vchildren && vchildren.length || fc!=null) {\n\t\tinnerDiffNode(out, vchildren, context, mountAll, hydrating || props.dangerouslySetInnerHTML!=null);\n\t}\n\n\n\t// Apply attributes/props from VNode to the DOM Element:\n\tdiffAttributes(out, vnode.attributes, props);\n\n\n\t// restore previous SVG mode: (in case we're exiting an SVG namespace)\n\tisSvgMode = prevSvgMode;\n\n\treturn out;\n}\n\n\n/**\n * Apply child and attribute changes between a VNode and a DOM Node to the DOM.\n * @param {import('../dom').PreactElement} dom Element whose children should be compared & mutated\n * @param {Array} vchildren Array of VNodes to compare to `dom.childNodes`\n * @param {object} context Implicitly descendant context object (from most\n * recent `getChildContext()`)\n * @param {boolean} mountAll Whether or not to immediately mount all components\n * @param {boolean} isHydrating if `true`, consumes externally created elements\n * similar to hydration\n */\nfunction innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n\tlet originalChildren = dom.childNodes,\n\t\tchildren = [],\n\t\tkeyed = {},\n\t\tkeyedLen = 0,\n\t\tmin = 0,\n\t\tlen = originalChildren.length,\n\t\tchildrenLen = 0,\n\t\tvlen = vchildren ? vchildren.length : 0,\n\t\tj, c, f, vchild, child;\n\n\t// Build up a map of keyed children and an Array of unkeyed children:\n\tif (len!==0) {\n\t\tfor (let i=0; i;\n * }\n * }\n */\nexport function Component(props, context) {\n\tthis._dirty = true;\n\n\t/**\n\t * @public\n\t * @type {object}\n\t */\n\tthis.context = context;\n\n\t/**\n\t * @public\n\t * @type {object}\n\t */\n\tthis.props = props;\n\n\t/**\n\t * @public\n\t * @type {object}\n\t */\n\tthis.state = this.state || {};\n\n\tthis._renderCallbacks = [];\n}\n\n\nextend(Component.prototype, {\n\n\t/**\n\t * Update component state and schedule a re-render.\n\t * @param {object} state A dict of state properties to be shallowly merged\n\t * \tinto the current state, or a function that will produce such a dict. The\n\t * \tfunction is called with the current state and props.\n\t * @param {() => void} callback A function to be called once component state is\n\t * \tupdated\n\t */\n\tsetState(state, callback) {\n\t\tif (!this.prevState) this.prevState = this.state;\n\t\tthis.state = extend(\n\t\t\textend({}, this.state),\n\t\t\ttypeof state === 'function' ? state(this.state, this.props) : state\n\t\t);\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t},\n\n\n\t/**\n\t * Immediately perform a synchronous re-render of the component.\n\t * @param {() => void} callback A function to be called after component is\n\t * \tre-rendered.\n\t * @private\n\t */\n\tforceUpdate(callback) {\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\trenderComponent(this, FORCE_RENDER);\n\t},\n\n\n\t/**\n\t * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n\t * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n\t * @param {object} props Props (eg: JSX attributes) received from parent\n\t * \telement/component\n\t * @param {object} state The component's current state\n\t * @param {object} context Context object, as returned by the nearest\n\t * ancestor's `getChildContext()`\n\t * @returns {import('./vnode').VNode | void}\n\t */\n\trender() {}\n\n});\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected the listener to be a function.');\n }\n\n if (isDispatching) {\n throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers);\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(\"Dispatching while constructing your middleware is not allowed. \" + \"Other middleware would not be applied to this dispatch.\");\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { createStore, combineReducers, bindActionCreators, applyMiddleware, compose, ActionTypes as __DO_NOT_USE__ActionTypes };\n","var isArray = Array.isArray\n\nexport default function cc(names) {\n var i,\n len,\n tmp,\n out = \"\",\n type = typeof names\n\n if (type === \"string\" || type === \"number\") return names || \"\"\n\n if (isArray(names) && names.length > 0) {\n for (i = 0, len = names.length; i < len; i++) {\n if ((tmp = cc(names[i])) !== \"\") out += (out && \" \") + tmp\n }\n } else {\n for (i in names) {\n if (names.hasOwnProperty(i) && names[i]) out += (out && \" \") + i\n }\n }\n\n return out\n}\n","import { Component, ComponentConstructor, h, ComponentFactory, RenderableProps } from \"preact\";\r\nimport { Unsubscribe } from \"redux\";\r\nimport { MeControlDispatch } from '@mecontrol/common';\r\nimport { ProviderContext } from \"./Provider\";\r\n\r\n// FUTURE: consider passing ownProps into function if useful. Does change the core logic around when\r\n// to invoke mapping functions though (see \"only invokes mapStateToProps...\" UT).\r\nexport type MapStateToProps = (state: State) => StateProps;\r\nexport type MapDispatchToProps = (\r\n dispatch: MeControlDispatch\r\n) => DispatchProps;\r\n\r\n/**\r\n * Omit from T1, the properties of T2.\r\n * In other words, remove properties of T2 from T1.\r\n */\r\nexport type Omit = Pick>;\r\nexport type OwnProps = Omit;\r\n\r\nexport type ConnectComponent = ComponentConstructor>;\r\n\r\nexport interface ConnectDecorator {\r\n // tslint:disable-next-line:callable-types\r\n (\r\n WrappedComponent: ComponentFactory\r\n ): ConnectComponent;\r\n}\r\n\r\nexport function connect(\r\n mapStateToProps: MapStateToProps,\r\n mapDispatchToProps: MapDispatchToProps\r\n): ConnectDecorator {\r\n type ActualInjectableProps = StateProps & DispatchProps;\r\n\r\n return function (WrappedComponent: ComponentFactory): ConnectComponent {\r\n type ActualOwnProps = OwnProps;\r\n\r\n const wrappedComponentName = WrappedComponent.displayName\r\n || (WrappedComponent as any).name\r\n || 'Component';\r\n\r\n // TODO: Pass down ownProps to selectors and memoizing the results, using those\r\n // results to determine shouldComponentUpdate. Will need to run selector on\r\n // componentWillReceiveProps\r\n // FUTURE: If a component needs a custom merging strategy, add the mergeProps param\r\n // FUTURE: Consider hoisting statics from WrappedComponent if necessary\r\n // FUTURE: Consider exposing WrappedComponent as static property WrappedComponent\r\n // FUTURE: Consider adding ability to access wrapped instance\r\n // FUTURE: Consider option to receive/pass store as a prop?\r\n\r\n // HOC = Higher Order Component. Bing it.\r\n return class ConnectHOC extends Component {\r\n public static displayName: string = `Connect(${wrappedComponentName})`;\r\n\r\n private unsubscibe: Unsubscribe | undefined;\r\n private dispatchProps: DispatchProps;\r\n private stateProps: StateProps;\r\n\r\n constructor(props: any, context: ProviderContext) {\r\n super(props, context);\r\n const store = context.store;\r\n if (!store) {\r\n throw new Error(\"MeControl: ConnectHOC - store not found in context\");\r\n }\r\n\r\n this.stateProps = mapStateToProps(store.getState());\r\n this.dispatchProps = mapDispatchToProps(store.dispatch);\r\n }\r\n\r\n public componentDidMount(): void {\r\n const context = this.context as ProviderContext;\r\n this.unsubscibe = context.store.subscribe(() => this.update());\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (this.unsubscibe) {\r\n this.unsubscibe();\r\n }\r\n }\r\n\r\n public render(ownProps: RenderableProps): JSX.Element {\r\n const finalProps = {\r\n ...(this.dispatchProps as any),\r\n ...(ownProps as any),\r\n ...(this.stateProps as any)\r\n };\r\n\r\n return h(WrappedComponent, finalProps);\r\n }\r\n\r\n private update(): void {\r\n const context = this.context as ProviderContext;\r\n const store = context.store;\r\n\r\n const oldStateProps = this.stateProps;\r\n const newStateProps = mapStateToProps(store.getState());\r\n\r\n // IE9 - Object.keys\r\n const oldStatekeys = Object.keys(oldStateProps);\r\n const newStateKeys = Object.keys(newStateProps);\r\n\r\n // Detect if keys were added or removed\r\n if (newStateKeys.length !== oldStatekeys.length) {\r\n this.stateProps = newStateProps;\r\n return this.setState({});\r\n }\r\n\r\n // Determine if any keys' values were changed\r\n for (let newKey in newStateProps) {\r\n if (newStateProps[newKey] !== oldStateProps[newKey]) {\r\n this.stateProps = newStateProps;\r\n return this.setState({}); // queue re-render of this component and children\r\n }\r\n }\r\n }\r\n };\r\n };\r\n}\r\n","import { Component } from \"preact\";\r\nimport { Promise } from \"@mecontrol/web-inline\";\r\n\r\nexport interface RenderAsyncState {\r\n error?: Error;\r\n response?: Response;\r\n}\r\n\r\nexport interface RenderAsyncProps {\r\n // ownProps: Props;\r\n loader(): Promise;\r\n render(response: Response): JSX.Element | null;\r\n renderLoading?(): JSX.Element;\r\n renderError?(error: Error): JSX.Element;\r\n}\r\n\r\n// Prior Art:\r\n// https://github.com/jamiebuilds/react-loadable\r\n// https://github.com/ctrlplusb/react-async-component\r\n// To consider\r\n// * how to handle timeouts\r\n// * delay showing loading component to avoid screen flash\r\nexport class RenderAsync extends Component<\r\n RenderAsyncProps,\r\n RenderAsyncState\r\n> {\r\n private loader: Promise | undefined;\r\n private mounted: boolean = false;\r\n\r\n constructor(props: RenderAsyncProps) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n private getLoader(): Promise {\r\n if (typeof this.loader === \"undefined\") {\r\n try {\r\n this.loader = Promise.resolve(this.props.loader());\r\n } catch (error) {\r\n this.loader = Promise.reject(error);\r\n }\r\n }\r\n\r\n return this.loader;\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.mounted = true;\r\n this.getLoader()\r\n .then(response => {\r\n if (this.mounted) {\r\n this.setState({\r\n response\r\n });\r\n }\r\n })\r\n .catch(error => {\r\n if (this.mounted) {\r\n this.setState({\r\n error\r\n });\r\n }\r\n });\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this.mounted = false;\r\n }\r\n\r\n public render(\r\n props: RenderAsyncProps,\r\n state: RenderAsyncState\r\n ): JSX.Element | null {\r\n const { render, renderError, renderLoading } = props;\r\n const { error, response } = state;\r\n\r\n if (error) {\r\n return renderError ? renderError(error) : null;\r\n } else if (response) {\r\n return render(response);\r\n } else if (renderLoading) {\r\n return renderLoading();\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { createError } from '@mecontrol/web-inline';\n\n// Consider: Using [url-parse](https://npm.im/url-parse) if our url parsing needs grow more complex\n// or we need a cross platform (i.e. non-browser) parser\n\n/*\n * Our ParsedUrl does not implement every method of the [URL standard](https://developer.mozilla.org/en-US/docs/Web/API/URL).\n * The following properties are left out because they contain duplicate information\n * that is represented in other property, and we have not implemented the logic\n * to keep them up to date with each other (mostly for size reasons and because\n * we don't need them at this time).\n *\n * - host (duplicates hostname & port)\n * - href (duplicates every other property)\n * - origin (duplicates protocol, host, and port)\n * - search (duplicates searchParams)\n *\n * The following properties are not included because the tag does not parse\n * and return them in IE. In other words, they are not supported in IE:\n *\n * - origin\n * - password\n * - username\n *\n */\n\n/**\n * A mutable object representing the parts of a URL, inspired by the [URL standard](https://developer.mozilla.org/en-US/docs/Web/API/URL).\n */\nexport interface ParsedUrl {\n /** The protocol scheme of the URL, including the final ':'. */\n protocol: string;\n\n /** The domain of the URL */\n hostname: string;\n\n /** The port of the URL */\n port: string;\n\n /** An initial '/' followed by the path of the URL. */\n pathname: string;\n\n /** An object containing the GET query arguments contained in the URL. */\n searchParams: SearchParams;\n\n /** The URL fragment, including the leading '#' */\n hash: string;\n\n /**\n * Serialize the given url to a string. This method will not add the port\n * number for http and https protocols if the port is the well-known port\n * for those protocols.\n * @param url The ParsedUrl to serialize\n */\n toString(): string;\n}\n\n// Inspired by [URLSearchParams standard](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)\n/** The SearchParams interface defines utility methods to work with the query string of a URL. */\nexport interface SearchParams {\n /**\n * Appends a specified key/value pair as a new search parameter.\n * @param name The key of the search parameter to append\n * @param value The value of the search parameter to append\n */\n append(name: string, value: string): void;\n\n /**\n * Deletes the given search parameter, and its associated value, from the list of all search parameters.\n * @param name The key to delete\n */\n delete(name: string): void;\n\n /**\n * Returns the first value associated to the given search parameter.\n * @param name The key of the search param to get\n * @returns The string value of the search param or null if the key does not exist\n */\n get(name: string): string | null;\n\n /**\n * Returns all the values association with a given search parameter.\n * @param name The key to retreive\n * @returns The array of all values associated with the given key, or an empty array if the key does not exist\n */\n getAll(name: string): string[];\n\n /**\n * Returns a Boolean indicating if such a search parameter exists.\n * @param name The key to check\n */\n has(name: string): boolean;\n\n /**\n * Sets the value associated to a given search parameter to the given value. If there were several values, delete the others.\n * @param name The key to set\n * @param value The value to set the search parameter to\n */\n set(name: string, value: string): void;\n\n /**\n * Returns a string containing a query string suitable for use in a URL.\n */\n toString(): string;\n}\n\n/**\n * Parse a URL into its parts. This method also parses the queryString into an object\n * @param url The URL to parse\n */\nexport function parseUrl(url: string): ParsedUrl {\n if (!url) {\n throw createError(`Invalid string given to parseUrl: \"${url}\"`);\n }\n\n return new Url(url);\n}\n\nexport function isJavaScriptScheme(parsedUrl: ParsedUrl): boolean {\n return parsedUrl.protocol == \"javascript:\";\n}\n\nclass Url implements ParsedUrl {\n\n private originalUrl: string;\n\n public protocol: string;\n\n public hostname: string;\n\n public port: string;\n\n public pathname: string;\n\n public searchParams: SearchParams;\n\n public hash: string;\n\n constructor(url: string) {\n this.originalUrl = url;\n\n const a = document.createElement('a');\n a.href = url;\n\n // IE workaround - IE doesn't fill in the page's protocol, hostname or port properties for relative URLs.\n // However it does construct an absolute URL when accessing the .href property for relative URLs. So this\n // line reads the href property of the A tag which will always be absolute in all browsers tested and\n // re-assigns it to the A tag so that the absolute URL is parsed.\n a.href = a.href;\n\n this.protocol = a.protocol;\n this.hostname = a.hostname;\n this.port = a.port;\n this.pathname = a.pathname;\n this.searchParams = new UrlSearchParams(a.search);\n this.hash = a.hash;\n }\n\n public toString(): string {\n if (this.protocol == 'javascript:') {\n return this.originalUrl;\n }\n\n // IE workaround - IE always specifies the port for known protocols\n // even if it is not specified in the original URL\n let port = \"\";\n if (\n this.port &&\n !(this.port === '443' && this.protocol === 'https:') &&\n !(this.port === '80' && this.protocol === 'http:')\n ) {\n port = \":\" + this.port;\n }\n\n // IE workaround - IE doesn't begin `pathname` with a '/' for absolute http(s) URLs\n const path = !isJavaScriptScheme(this) && this.pathname[0] !== '/' ? '/' + this.pathname : this.pathname;\n const search = this.searchParams ? this.searchParams.toString() : \"\";\n const protocolSeparator = !isJavaScriptScheme(this) ? \"//\" : \"\";\n\n return `${this.protocol}${protocolSeparator}${this.hostname}${port}${path}${search}${this.hash}`;\n }\n}\n\n/**\n * Replace '+' characters with a space and decode a string using decodeURIComponent\n * @param s The string to decode\n */\nfunction decode(s: string): string {\n return decodeURIComponent(s.replace(/\\+/g, ' '));\n}\n\nconst queryStringParser = /([^=?&]+)=?([^&]*)/g;\n\nclass UrlSearchParams implements SearchParams {\n\n // IE9 - Object.create is only available in IE9+\n // Using Object.create(null):\n // - https://stackoverflow.com/a/32263086\n // - https://davidwalsh.name/object-create-null\n private queryParams: Record = Object.create(null);\n\n constructor(queryString: string) {\n let match;\n // tslint:disable-next-line:no-conditional-assignment\n while (match = queryStringParser.exec(queryString)) {\n // match[0] is the entire matched string. match[1] is first group, match[2] is second, ...\n const key = decode(match[1]);\n const value = decode(match[2]);\n\n this.append(key, value);\n }\n }\n\n public append(key: string, value: string): void {\n if (key in this.queryParams) {\n this.queryParams[key].push(value);\n }\n else {\n this.queryParams[key] = [value];\n }\n }\n\n public delete(key: string): void {\n delete this.queryParams[key];\n }\n\n public get(key: string): string | null {\n return key in this.queryParams ? this.queryParams[key][0] : null;\n }\n\n public getAll(key: string): string[] {\n return key in this.queryParams ? [...this.queryParams[key]] : [];\n }\n\n public has(key: string): boolean {\n return key in this.queryParams;\n }\n\n public set(key: string, value: string): void {\n this.queryParams[key] = [value];\n }\n\n public toString(): string {\n const serializedPairs = [];\n\n // tslint:disable-next-line:forin // We are creating queryParams as an object with no prototype so hasOwn check is unnecessary\n for (let key in this.queryParams) {\n const values = this.queryParams[key];\n for (let i = 0; i < values.length; i++) {\n serializedPairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(values[i]));\n }\n }\n\n return serializedPairs.length ? '?' + serializedPairs.join('&') : '';\n }\n}\n","import { StringMap } from \"@mecontrol/common/\";\nimport { hasOwn } from '@mecontrol/web-inline';\nimport { parseUrl, isJavaScriptScheme } from './url.polyfill';\n\n/**\n * Sets a dictionary of query string parameters to a given url. It overrides any existing\n * query parameters on the URL with the same name\n * @param url The url to set the parameters to.\n * @param queryParams The query parameters to set on the url.\n * @param includeEmptys Default true; determines whether to include query param if string value is empty or null\n * @returns The url with the given queryParameters set\n */\nexport function setQueryParams(url: string, queryParams: Partial, includeEmptys: boolean = true): string {\n const parsedUrl = parseUrl(url);\n\n // Technically, the URL spec allows javascript schemes to have query params\n // but in actuality, query params can break javascript schemes,\n // so we don't set query params for javascript schemes\n if (!isJavaScriptScheme(parsedUrl)) {\n for (let key in queryParams) {\n let qvalue = queryParams[key];\n if (hasOwn(queryParams, key) && (includeEmptys || !!qvalue)) {\n parsedUrl.searchParams.set(key, qvalue || '');\n }\n }\n }\n\n return parsedUrl.toString();\n}\n\n/**\n * Checks to see if the given URL has the given queryParam.\n *\n * @param url {string} The url to check\n * @param queryParam {string} The query param key name to check for in the given url\n */\nexport function hasQueryParam(url: string, queryParam: string): boolean {\n if (!url) {\n return false;\n }\n\n const parsedUrl = parseUrl(url);\n\n // Technically, the URL spec allows javascript schemes to have query params\n // but in actuality, query params can break javascript schemes,\n // so we don't set query params for javascript schemes\n if (isJavaScriptScheme(parsedUrl)) {\n return false;\n }\n\n return parsedUrl.searchParams.has(queryParam);\n}\n\n/**\n * Get the hostname of a URL\n * @param url The URL to get the hostname of\n */\nexport function getHostname(url: string): string {\n return parseUrl(url).hostname;\n}\n\n\nexport function urlEncodeArr(inputArr: Uint8Array) {\n return base64EncArr(inputArr)\n .replace(/=/g, \"\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\");\n}\n\nfunction base64EncArr(aBytes: Uint8Array) {\n const eqLen = (3 - (aBytes.length % 3)) % 3;\n let sB64Enc = \"\";\n\n for (var nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\n nMod3 = nIdx % 3;\n /* Uncomment the following line in order to split the output in lines 76-character long: */\n /*\n if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += \"\\r\\n\"; }\n */\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\n sB64Enc += String.fromCharCode(\n uint6ToB64(nUint24 >>> 18 & 63),\n uint6ToB64(nUint24 >>> 12 & 63),\n uint6ToB64(nUint24 >>> 6 & 63),\n uint6ToB64(nUint24 & 63)\n );\n nUint24 = 0;\n }\n }\n if (eqLen === 0) { return sB64Enc; }\n var sb64Val = sB64Enc.substring(0, sB64Enc.length - eqLen)\n if (eqLen === 1) {\n return sb64Val + \"=\"\n }\n else {\n return sb64Val + \"==\"\n }\n}\n\nfunction uint6ToB64 (nUint6: number) {\n if (nUint6 < 26) { return nUint6 + 65; }\n else if (nUint6 < 52) { return nUint6 + 71; }\n else if (nUint6 < 62) { return nUint6 - 4; }\n else if (nUint6 === 62) { return 43; }\n else if (nUint6 === 63) { return 47; }\n else { return 65; }\n}","import { setQueryParams, urlEncodeArr } from './url';\nimport {\n ME,\n // @ts-ignore\n Promise\n} from '@mecontrol/web-inline';\nimport { AccountType, IAccount } from '@mecontrol/public-api';\nimport { DataState, GraphResource, StringMap } from '@mecontrol/common';\n\nexport interface IPKCEcode {\n verifier: string;\n challenge: string;\n}\n/**\n * The Query Parameters required to request Code\n */\nexport interface CodeQParams {\n client_id: string;\n response_type: string;\n redirect_uri: string;\n scope: string;\n response_mode: string;\n state: string;\n code_challenge: string;\n code_challenge_method: string;\n prompt: string;\n login_hint?: string;\n sid?: string;\n}\n/**\n * The Query Parameters required to redeem code for Token\n */\nexport interface TokenQParams {\n client_id: string;\n scope: string;\n redirect_uri: string;\n grant_type: string;\n code_verifier: string;\n}\n/**\n * The request object iframe sends to parent to init Token request\n */\nexport interface FrameInitRequest {\n /**\n * State passed into IdP and from IdP redirect.\n *\n * Must validate against `OAuth2Handler.state` to avoid cx attacks */\n state: string;\n status: DataState;\n payload: any;\n}\n/**\n * The object iframe requires to redeem Code for Token\n */\nexport interface OAuthFrameInitRes {\n accountId: string;\n /** Will be verified by frame to proceed with token request */\n state: string;\n qParams: TokenQParams;\n graphResources: GraphResource[]\n}\n\nexport class MSGraphOAuth2Builder {\n public code: IPKCEcode = { challenge: '', verifier: '' };\n public client_id: string = ME.Config.graphinfo.graphclientid;\n public scope: string = ME.Config.graphinfo.graphscope;\n public redirect_uri: string;\n public code_challenge_method: string = 'S256';\n public grant_type: string = 'authorization_code';\n public response_type: string = 'code';\n public response_mode: string = 'fragment';\n public prompt: string = 'none';\n\n constructor(\n public account: IAccount,\n public accountId: string,\n public graphResources: GraphResource[],\n public state?: string,\n redirect_uri?: string\n ) {\n this.code_challenge_method;\n this.response_type = 'code';\n this.response_mode = 'fragment';\n this.redirect_uri =\n redirect_uri ?? ME.Config.graphinfo.graphredirecturi;\n }\n /**\n *\n * @returns Promise resolves to string url to request code\n */\n public initCodeFlow(): Promise {\n return generatePKCE().then(pkceCode => {\n this.code = pkceCode;\n this.state = this.state ?? createNewStateGuid();\n });\n }\n\n public getCodeReqUrl(): string {\n return setQueryParams(\n ME.Config.graphinfo.graphcodeurl,\n this.GetCodeQueryParams() as unknown as Partial,\n false\n );\n }\n\n private GetCodeQueryParams(): CodeQParams {\n let codeQParams: CodeQParams = {\n client_id: this.client_id,\n scope: this.scope,\n code_challenge: this.code?.challenge,\n code_challenge_method: this.code_challenge_method,\n prompt: this.prompt,\n redirect_uri: this.redirect_uri,\n response_mode: this.response_mode,\n response_type: this.response_type,\n state: this.state ?? createNewStateGuid()\n };\n if (this.account.type === AccountType.AAD && this.account.sessionId) {\n codeQParams.sid = this.account.sessionId;\n } else if (this.account.login_hint) {\n codeQParams.login_hint = this.account.login_hint;\n } else if (this.account.memberName) {\n codeQParams.login_hint = this.account.memberName;\n } else {\n throw 'Fatal Error: Account is missing critical id info.';\n }\n return codeQParams;\n }\n public GetFrameInitResponse(): OAuthFrameInitRes {\n if (!this.state) {\n throw 'Critical error: Missing state of transaction.';\n }\n return {\n accountId: this.accountId,\n state: this.state,\n qParams: {\n code_verifier: this.code.verifier,\n client_id: this.client_id,\n scope: this.scope,\n redirect_uri: this.redirect_uri,\n grant_type: this.grant_type\n },\n graphResources: this.graphResources\n };\n }\n}\n/**\n * Randomly generate a user state to go across OAuth Flow\n * for profile picture\n * @returns The randomly generated user state guid string\n */\nexport function createNewStateGuid(): string {\n let guidHolder = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n let hex = '0123456789abcdef';\n let r = 0;\n let guidResponse = '';\n for (let i = 0; i < 36; i++) {\n if (guidHolder[i] !== '-' && guidHolder[i] !== '4') {\n // each x and y needs to be random\n r = (Math.random() * 16) | 0;\n }\n if (guidHolder[i] === 'x') {\n guidResponse += hex[r];\n } else if (guidHolder[i] === 'y') {\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\n r |= 0x8; // set pos 3 to 1 as 1???\n guidResponse += hex[r];\n } else {\n guidResponse += guidHolder[i];\n }\n }\n return guidResponse;\n}\n\nasync function generatePKCE(): Promise {\n var crypto = window.crypto;\n // check for win32 msCrypto library instead\n if (window.msCrypto && !crypto) {\n crypto = window.msCrypto;\n }\n let verifier = generateCodeVerifier(crypto);\n let challenge = await generateCodeChallenge(crypto, verifier);\n return {\n verifier,\n challenge\n };\n}\n\nfunction generateCodeVerifier(crypto: Crypto): string {\n var RANDOM_BYTE_ARR_LENGTH = 32;\n\n const buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\n crypto.getRandomValues(buffer);\n\n var pkceCodeVerifierB64 = urlEncodeArr(buffer);\n return pkceCodeVerifierB64;\n}\n\nexport async function generateCodeChallenge(\n crypto: Crypto,\n code_verifier: string\n): Promise {\n var codeArrayBuffer = stringToUtf8Arr(code_verifier);\n if (!!window.crypto) {\n return await getSubtleCryptoDigest(codeArrayBuffer);\n } else {\n return new Promise((resolve, reject) => {\n if (crypto.subtle) {\n var cryptoOp = crypto.subtle.digest('SHA-256', codeArrayBuffer);\n // @ts-ignore\n cryptoOp.oncomplete = function (e) {\n var code_challenge_arr = e.target.result;\n resolve(urlEncodeArr(new Uint8Array(code_challenge_arr)));\n };\n }\n });\n }\n function getSubtleCryptoDigest(data: Uint8Array) {\n if (window.crypto.subtle) {\n return window.crypto.subtle\n .digest('SHA-256', data)\n .then(function (code_challenge_arr) {\n return urlEncodeArr(new Uint8Array(code_challenge_arr));\n });\n }\n return Promise.resolve('');\n }\n}\n\nfunction stringToUtf8Arr(sDOMStr: string): Uint8Array {\n var nChr;\n var nArrLen = 0;\n var nStrLen = sDOMStr.length;\n /* mapping... */\n for (var nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\n nChr = sDOMStr.charCodeAt(nMapIdx);\n if (nChr < 0x80) {\n nArrLen += 1;\n } else if (nChr < 0x800) {\n nArrLen += 2;\n } else if (nChr < 0x10000) {\n nArrLen += 3;\n } else if (nChr < 0x200000) {\n nArrLen += 4;\n } else if (nChr < 0x4000000) {\n nArrLen += 5;\n } else {\n nArrLen += 6;\n }\n }\n var aBytes = new Uint8Array(nArrLen);\n /* transcription... */\n for (var nIdx = 0, nChrIdx = 0; nIdx < nArrLen; nChrIdx++) {\n nChr = sDOMStr.charCodeAt(nChrIdx);\n if (nChr < 128) {\n /* one byte */\n aBytes[nIdx++] = nChr;\n } else if (nChr < 0x800) {\n /* two bytes */\n aBytes[nIdx++] = 192 + (nChr >>> 6);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x10000) {\n /* three bytes */\n aBytes[nIdx++] = 224 + (nChr >>> 12);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x200000) {\n /* four bytes */\n aBytes[nIdx++] = 240 + (nChr >>> 18);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x4000000) {\n /* five bytes */\n aBytes[nIdx++] = 248 + (nChr >>> 24);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } /* if (nChr <= 0x7fffffff) */ else {\n /* six bytes */\n aBytes[nIdx++] = 252 + (nChr >>> 30);\n aBytes[nIdx++] = 128 + ((nChr >>> 24) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 18) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 12) & 63);\n aBytes[nIdx++] = 128 + ((nChr >>> 6) & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n }\n }\n return aBytes;\n}\n","import { DataState, IAuthProvider } from '@mecontrol/common';\r\nimport {\r\n Promise,\r\n perfNow,\r\n logTelemetryEvent,\r\n createError,\r\n w,\r\n getPageLocation,\r\n getRootDomainUrl,\r\n ME\r\n} from '@mecontrol/web-inline';\r\nimport {\r\n OAuthFrameInitRes,\r\n MSGraphOAuth2Builder,\r\n createNewStateGuid\r\n} from '../utilities/oauth';\r\nimport { GetCacheActions, SetCacheActions } from '../actions/cacheActions';\r\n\r\nexport interface IIFrameOperation {\r\n /** Name of the Me Control operation calling the IFrame */\r\n name: string;\r\n /** Name of the service or endpoint the call is going to */\r\n service: string;\r\n /** Operation name on the service/endpoint side */\r\n operation: string;\r\n}\r\n/**\r\n * Used for adding additional detail for logging; iframe should load and send INIT message trigger.\r\n */\r\nlet expectIframeResponse = { expect: false, received: false };\r\nlet iframeId = 0;\r\nconst iframeTimeout = 50 * 1000; // 50s per 99th percentile of 'me.srf' (remembered accounts) MSA Operation latency to reduce the number of false positive alerts. Source: https://aka.ms/AA4jzq2\r\nclass MeControlIframe {\r\n public messages: any[];\r\n public iframeHandle: HTMLIFrameElement;\r\n public iframeTargetOrigin: string;\r\n\r\n constructor(public src: string, expectedIframeOrigin?: string) {\r\n this.messages = [];\r\n this.iframeHandle = document.createElement('iframe');\r\n this.iframeHandle.id = 'mecontrol-iframe-' + iframeId++;\r\n (this.iframeHandle as any).sandbox =\r\n 'allow-forms allow-scripts allow-same-origin';\r\n this.iframeHandle.src = src;\r\n this.iframeHandle.style.display = 'none';\r\n\r\n this.iframeTargetOrigin = expectedIframeOrigin ?? getDomainFromUrl(src);\r\n }\r\n\r\n public postMessageToIframe(\r\n data:\r\n | OAuthFrameInitRes\r\n | { gets?: GetCacheActions; sets?: SetCacheActions }\r\n ) {\r\n if (this.iframeHandle.contentWindow) {\r\n this.iframeHandle.contentWindow.postMessage(\r\n data,\r\n this.iframeTargetOrigin\r\n );\r\n }\r\n }\r\n public pushResult(data: any) {\r\n this.messages.push(data);\r\n }\r\n}\r\n\r\nexport function openIframe(\r\n src: string,\r\n operation: IIFrameOperation,\r\n expectedMessageCount: number = 1,\r\n isExpectedMessage: (msg: any) => boolean = () => true,\r\n authProvider: IAuthProvider | undefined = undefined\r\n): Promise {\r\n expectIframeResponse.expect = false;\r\n return _openIframe(\r\n src,\r\n operation,\r\n expectedMessageCount,\r\n isExpectedMessage,\r\n authProvider\r\n );\r\n}\r\nexport function openIframeForProfilePictures(\r\n msGraphReq: MSGraphOAuth2Builder,\r\n operation: IIFrameOperation\r\n): Promise {\r\n expectIframeResponse.expect = true;\r\n const iframeTargetOrigin = getDomainFromUrl(msGraphReq.redirect_uri);\r\n return _openIframe(\r\n msGraphReq.getCodeReqUrl(),\r\n operation,\r\n 1,\r\n undefined,\r\n undefined,\r\n authHandler,\r\n iframeTargetOrigin\r\n );\r\n function authHandler(event: MessageEvent, meIframe: MeControlIframe) {\r\n const { data } = event;\r\n if (msGraphReq.state == data.state) {\r\n switch (data.status) {\r\n case DataState.INIT:\r\n expectIframeResponse.received = true;\r\n meIframe.postMessageToIframe(\r\n msGraphReq.GetFrameInitResponse()\r\n );\r\n break;\r\n default:\r\n meIframe.pushResult(data);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\nexport function openIframeForCache(\r\n gets: GetCacheActions | undefined,\r\n sets: SetCacheActions | undefined,\r\n operation: IIFrameOperation\r\n): Promise {\r\n expectIframeResponse.expect = true;\r\n const rootDomain = getRootDomainUrl();\r\n const state = createNewStateGuid();\r\n const ptn = ME.Config.ptn;\r\n const url = `${rootDomain}/me/mecache?partner=${ptn}&wreply=${window.encodeURIComponent(\r\n window.location.origin\r\n )}`;\r\n const expectedMessages =\r\n (gets ? gets.length : 0) + (sets ? sets.length : 0);\r\n return _openIframe(\r\n url,\r\n operation,\r\n expectedMessages,\r\n undefined,\r\n undefined,\r\n resHandler,\r\n rootDomain\r\n );\r\n function resHandler(event: MessageEvent, meIframe: MeControlIframe) {\r\n const { data } = event;\r\n if (state === data.state || ptn === data.state) {\r\n switch (data.status) {\r\n case DataState.INIT:\r\n expectIframeResponse.received = true;\r\n meIframe.postMessageToIframe({ state, gets, sets });\r\n break;\r\n default:\r\n meIframe.pushResult(data);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n *\r\n * @param src\r\n * @param operation\r\n * @param expectedMessageCount\r\n * @param isExpectedMessage\r\n * @param authProvider\r\n * @param messageHandler Tis the responsibility of this func to verify message is from correct target source\r\n * @param expectedIframeOrigin If none is provided, defaults to host of src arg\r\n * @returns\r\n */\r\nexport function _openIframe(\r\n src: string,\r\n operation: IIFrameOperation,\r\n expectedMessageCount: number = 1,\r\n isExpectedMessage: (msg: any) => boolean = () => true,\r\n authProvider: IAuthProvider | undefined = undefined,\r\n messageHandler?: (\r\n messageEvent: MessageEvent,\r\n meIframe: MeControlIframe\r\n ) => void,\r\n expectedIframeOrigin?: string\r\n): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!w.postMessage) {\r\n reject(\r\n createError('window.postMessage not supported in this browser')\r\n );\r\n }\r\n\r\n if (getPageLocation().protocol !== 'https:') {\r\n reject(\r\n createError(\r\n 'Iframes can only be opened on pages that are HTTPS secured'\r\n )\r\n );\r\n }\r\n\r\n const startTime = perfNow();\r\n const meIframe = new MeControlIframe(src, expectedIframeOrigin);\r\n let timeout = setTimeout(\r\n handleTimeout,\r\n authProvider ? 10 * 1000 : iframeTimeout\r\n );\r\n\r\n if (expectedMessageCount > 0) {\r\n // IE9 - addEventListener doesn't work {\r\n cleanup(true);\r\n resolve(meIframe.messages);\r\n });\r\n }\r\n\r\n document.body.appendChild(meIframe.iframeHandle);\r\n\r\n function messageHandlerWrapper(event: MessageEvent) {\r\n try {\r\n if (\r\n event.origin !== meIframe.iframeTargetOrigin ||\r\n meIframe.iframeHandle.contentWindow != event.source\r\n ) {\r\n return;\r\n }\r\n\r\n if (!isExpectedMessage(event.data)) {\r\n return;\r\n }\r\n\r\n // Allow custom message handling behavior\r\n if (!!messageHandler) messageHandler(event, meIframe);\r\n // default message handling\r\n else meIframe.messages.push(event.data);\r\n\r\n if (meIframe.messages.length === expectedMessageCount) {\r\n cleanup(true);\r\n resolve(meIframe.messages);\r\n } else {\r\n // Waiting for more messages so reset timeout\r\n clearTimeout(timeout);\r\n timeout = setTimeout(handleTimeout, iframeTimeout);\r\n }\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n cleanup(\r\n false,\r\n error.stack ? error.stack : error.toString()\r\n );\r\n reject(error);\r\n } else {\r\n const message = 'Failure in handler.';\r\n cleanup(false, message);\r\n reject(createError(message, false));\r\n }\r\n }\r\n }\r\n\r\n function handleTimeout(): void {\r\n let message = `Iframe operation to ${meIframe.iframeTargetOrigin} timed out. `;\r\n if (expectIframeResponse.expect && !expectIframeResponse.received) {\r\n message +=\r\n 'Iframe failed to load and send first INIT trigger to parent.';\r\n } else if (expectIframeResponse.expect) {\r\n message +=\r\n 'Iframe succeeded to load and send INIT trigger to parent.';\r\n }\r\n cleanup(false, message);\r\n reject(createError(message, true));\r\n }\r\n\r\n function cleanup(success: boolean, message?: string): void {\r\n clearTimeout(timeout);\r\n w.removeEventListener('message', messageHandlerWrapper);\r\n if (meIframe.iframeHandle.parentNode !== null) {\r\n meIframe.iframeHandle.parentNode.removeChild(\r\n meIframe.iframeHandle\r\n );\r\n }\r\n\r\n // TODO: Can we log success here? Or should we only allow callers to log success once they have successfully\r\n // parsed the message and validated its response? How does that affect timing? Should we export\r\n // logOutgoingRequest and use it in callers of openIframe to log success of handling message? Should we have\r\n // multiple sub operations per one larger MeControl operation (opening iframe, parsing and handling\r\n // messages, the entire operation)\r\n try {\r\n logOutgoingRequest(operation, src, startTime, success, message);\r\n } catch {\r\n // Ignore logging errors\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Returns the root domain for a given url\r\n * @param url The url to get the root domain of\r\n */\r\nfunction getDomainFromUrl(url: string): string {\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n let domain = anchor.protocol + '//' + anchor.hostname;\r\n\r\n if (\r\n anchor.port !== null &&\r\n anchor.port !== '' &&\r\n anchor.port !== '443' &&\r\n anchor.port !== '80' &&\r\n anchor.port !== '0'\r\n ) {\r\n domain += ':' + anchor.port;\r\n }\r\n\r\n return domain;\r\n}\r\n\r\n/**\r\n * Log an OutGoingRequest event for the provided frame at the conclusion of it's call\r\n * @param frame Frame object containing the data to log\r\n * @param success Flag to indicate whether the request was successful or not\r\n */\r\nfunction logOutgoingRequest(\r\n operation: IIFrameOperation,\r\n url: string,\r\n start: number,\r\n success: boolean,\r\n message?: string\r\n): void {\r\n let op = operation;\r\n let duration = perfNow() - start;\r\n\r\n logTelemetryEvent({\r\n eventType: 'OutgoingRequest',\r\n serviceOperation: op.operation,\r\n service: op.service,\r\n url,\r\n success,\r\n duration,\r\n message\r\n });\r\n}\r\n","import { AnyFunction } from '@mecontrol/common';\r\n\r\nexport function isString(obj: any): obj is string {\r\n return typeof obj === \"string\";\r\n}\r\n\r\nexport function isNonEmptyString(obj: any): obj is string {\r\n return !!obj && typeof obj === \"string\" && obj.trim() !== \"\";\r\n}\r\n\r\nexport function isStringOrFunction(obj: any): obj is (string | AnyFunction) {\r\n return typeof obj === \"string\" || typeof obj === \"function\";\r\n}\r\n\r\nexport function isFunction(obj: any): obj is AnyFunction {\r\n return typeof obj === \"function\";\r\n}\r\n\r\nexport function isElement(node?: any): node is Element {\r\n return !!node && node.nodeType === Node.ELEMENT_NODE;\r\n}\r\n","// Regex that finds {#} so it can be replaced by the arguments in string format\r\nconst FORMAT_RE = /\\{\\d+\\}/g;\r\n\r\n// Regex that finds { and } so they can be removed on a lookup for string format\r\nconst FORMAT_ARGS_RE = /[\\{\\}]/g;\r\n\r\n// Encode if a character not matches with [a-zA-Z0-9_{space}.,-].\r\nconst ENCODE_HTML_RE = /[^\\w .,-]/g;\r\n\r\n/**\r\n * Checks if the string starts with the provided prefix.\r\n * Usage: Strings.startsWith('abc', 'ab') returns true\r\n * @param str String to check\r\n * @param prefix Prefix to match\r\n * @returns True if the prefix is at the start of the string\r\n */\r\nexport function startsWith(str: string, prefix: string): boolean {\r\n return (str.substr(0, prefix.length) === prefix);\r\n}\r\n\r\n/**\r\n * Like C# string format.\r\n * Usage Example: \"hello {0}!\".format(\"mike\") will return \"hello mike!\"\r\n * Calling format on a string with less arguments than specified in the format is invalid\r\n * Example \"I love {0} every {1}\".format(\"CXP\") will result in a Debug Exception.\r\n * @param str The string format\r\n * @param params The string elements to be inserted on the given format\r\n */\r\nexport function format(str: string, ...params: string[]): string {\r\n // Callback match function\r\n function replace_func(match: string): string {\r\n // looks up in the params\r\n let replacement = params[parseInt(match.replace(FORMAT_ARGS_RE, ''), 10)];\r\n if (replacement == null) {\r\n replacement = '';\r\n }\r\n\r\n return replacement;\r\n }\r\n\r\n return (str.replace(FORMAT_RE, replace_func));\r\n}\r\n\r\n/**\r\n * Aggressively encodes a string to be displayed in the browser. All non-letter characters are converted\r\n * to their Unicode entity ref, e.g. A, space, comma, and dash are left un-encoded as well.\r\n * Usage: _divElement.innerHTML =_someValue.encodeHtml());\r\n * @param str The string to be encoded\r\n * @returns HTML encoded string\r\n */\r\nexport function encodeHtml(str: string): string {\r\n if (!str) {\r\n return '';\r\n }\r\n\r\n let charCodeResult = {\r\n c: 0, // Code\r\n s: -1 // Next skip index\r\n };\r\n\r\n return str.replace(ENCODE_HTML_RE, (match: string, index: number, fullString: string): string => {\r\n if (extendedCharCodeAt(fullString, index, charCodeResult)) {\r\n return ['&#', charCodeResult.c, ';'].join('');\r\n }\r\n\r\n // If extendedCharCodeAt returns false that means this index is the low surrogate,\r\n // which has already been processed, so we remove it by returning an empty string.\r\n return '';\r\n });\r\n}\r\n\r\n/**\r\n * Gets the char code from str at index.\r\n * Supports Secondary-Multilingual-Plane Unicode characters (SMP), e.g. codes above 0x10000\r\n * @param str String to get the char code from\r\n * @param idx Index of the char to get code for\r\n * @param result Receives result code c: and index s: info\r\n */\r\nfunction extendedCharCodeAt(str: string, idx: number, result: { c: number; s: number; }): boolean {\r\n let skip = (result.s === idx);\r\n if (!skip) {\r\n idx = idx || 0;\r\n let code = str.charCodeAt(idx);\r\n let hi, low;\r\n result.s = -1;\r\n if (code < 0xD800 || code > 0xDFFF) {\r\n // Main case, Basic-Multilingual-Plane (BMP) code points.\r\n result.c = code;\r\n }\r\n else if (code <= 0xDBFF) { // High surrogate of SMP\r\n hi = code;\r\n low = str.charCodeAt(idx + 1);\r\n result.c = ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;\r\n result.s = idx + 1;\r\n }\r\n else { // Low surrogate of SMP, 0xDC00 <= code && code <= 0xDFFF\r\n // Shouldn't really ever come in here, previous call to this method would set skip index in result\r\n // in high surrogate case, which is short-circuited at the start of this function.\r\n result.c = -1;\r\n skip = true;\r\n }\r\n }\r\n return !skip;\r\n}\r\n","/**\r\n * Utility function to return a partial object, containing a subset of the properties an original\r\n * one had\r\n * @param original Original Object from which to generate the new partial object\r\n * @param keys Array of property names that we want the returned object to have\r\n */\r\nexport function pick(original: T, keys: K[]): Pick {\r\n let newObject: any = {};\r\n for (let k of keys) {\r\n newObject[k] = original[k];\r\n }\r\n return newObject;\r\n}\r\n","export function find(array: T[], predicate: (value: T, index: number, array: T[]) => boolean): T | undefined {\n // 1. Let O be ? ToObject(array value).\n if (array == null) {\n throw TypeError('\"array\" is null or not defined');\n }\n\n const o = Object(array);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n const len = o.length >>> 0;\n\n if (typeof predicate !== 'function') {\n throw TypeError('predicate must be a function');\n }\n\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n const thisArg = arguments[2];\n\n // 5. Let k be 0.\n let k = 0;\n\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return kValue.\n const kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n\n // 7. Return undefined.\n return undefined;\n}\n","import { IAccount, AuthenticatedState, AccountType, IAADAccount, IFederatedMSAAccount, IMSAAccount, IAccountBase } from '@mecontrol/public-api';\r\nimport { IMeControlAccounts, IAccountState, IMeControlAppState } from '@mecontrol/common';\r\nimport { getString, ME } from '@mecontrol/web-inline';\r\nimport { isNonEmptyString } from './types';\r\nimport { format } from './string';\r\nimport { pick } from './pick';\r\nimport { find } from './find';\r\n\r\nexport interface AnyAccount extends IAccountBase {\r\n [key: string]: any;\r\n}\r\n\r\n//============================\r\n// General Account Util\r\n//============================\r\n\r\n/**\r\n * Return true if the given account is AAD-like, meaning it has the shape of an\r\n * AAD account, namely AccountType.AAD and AccountType.MSA_FED\r\n * @param account The account to check\r\n */\r\nexport function isAadLike(account: IAccount): account is (IAADAccount | IFederatedMSAAccount) {\r\n return account.type === AccountType.AAD || account.type === AccountType.MSA_FED;\r\n}\r\n\r\n/**\r\n * Return true if the given account is functionally MSA-like, meaning it has the shape of an\r\n * MSA account, namely AccountType.MSA and AccountType.MSA_FED\r\n * @param account The account to check\r\n */\r\nexport function isFunctionallyMsaLike(account: IAccount): account is (IMSAAccount | IFederatedMSAAccount) {\r\n return account.type === AccountType.MSA || account.type === AccountType.MSA_FED;\r\n}\r\n\r\n/**\r\n * Return true if the given account type is AAD and has a valid editPictureUrl field\r\n * @param account The account to check\r\n */\r\nexport function isAadWithEditPicUrl(account: IAccount): boolean {\r\n return account.type === AccountType.AAD && !!account.editPictureUrl;\r\n}\r\n\r\n/**\r\n * Returns true if the given account has a profile AND that profile contains a valid edit picture URL.\r\n * If no profile is specified,\r\n * then true is returned\r\n * if the account is MSA like.\r\n * or if the account type is AAD and has a valid editPictureUrl field\r\n * @param account The account to check.\r\n */\r\nexport function isFunctionallyMsaOrWithEditPicUrl(account: IAccount): boolean {\r\n if (account.profile) {\r\n /* If profile present, ONLY return true if the edit picture URL is present, otherwise false. Do not fall\r\n * back to MSA-like since a profile was specified. */\r\n return isNonEmptyString(account.profile.editProfilePictureUrl);\r\n }\r\n\r\n return isFunctionallyMsaLike(account) || isAadWithEditPicUrl(account);\r\n}\r\n\r\n/**\r\n * Given an IAccount object, this helper method will concat the type and membername\r\n * into a string used for a unique ID.\r\n * @param account The account to get a unique ID for.\r\n * @returns The account's computed ID\r\n */\r\nexport function getAccountId(account: IAccount): string {\r\n if (account.type === AccountType.MSA && account.cid) {\r\n const normalizedCid = account.cid.toLowerCase().replace(/^0+/g, '');\r\n return `${account.type}:${normalizedCid}`;\r\n }\r\n\r\n return `${account.type}:${account.memberName && account.memberName.toLowerCase()}`;\r\n}\r\n\r\n/**\r\n * Check whether an account is signed in or not\r\n * @param account Account to check the status of\r\n */\r\nexport function isSignedIn(account: IAccount): boolean {\r\n return account.authenticatedState === AuthenticatedState.SignedIn ||\r\n account.authenticatedState === AuthenticatedState.SignedInIDPOnly;\r\n}\r\n\r\n/**\r\n * Get the friendly name to display for a remembered account:\r\n * - MSA : compute display name\r\n * - AAD : company name\r\n * If neither is found, we default to the member name of the account\r\n * @param account Account for which to retrive the name\r\n */\r\nexport function getAccountListDisplayName(account: IAccount): string {\r\n if (account.profile && account.profile.profileName) {\r\n return account.profile.profileName;\r\n }\r\n\r\n switch (account.type) {\r\n case AccountType.MSA:\r\n case AccountType.MSA_FED:\r\n return getDisplayName(account) || account.memberName;\r\n\r\n case AccountType.AAD:\r\n return account.orgName || getString('aadaccountorgnamedefault');\r\n }\r\n}\r\n\r\n/**\r\n * Get the friendly name for accessibility purposes only:\r\n * This friendly name would be assigned to aria-labels only\r\n * - MSA : compute display name\r\n * - AAD : company name\r\n * We will concatenate both the display or company name with member name\r\n * @param account Account for which to retrive the name\r\n */\r\nexport function getVerbalFriendlyName(account: IAccount): string {\r\n let name: string | undefined;\r\n switch (account.type) {\r\n case AccountType.MSA:\r\n case AccountType.MSA_FED:\r\n name = getDisplayName(account);\r\n break;\r\n\r\n case AccountType.AAD:\r\n name = account.orgName;\r\n break;\r\n }\r\n return name ? name + ' ' + account.memberName : account.memberName;\r\n}\r\n\r\n/**\r\n * Compute the name to display for a given account\r\n * @param account Account from which to compute the display name\r\n */\r\nexport function getDisplayName(account: IAccount): string | undefined {\r\n const lf = (first: string | undefined, last: string | undefined) => {\r\n return ((ME.Loc.lf ? [last, first] : [first, last])\r\n .map(str => str && str.trim())\r\n .filter(str => !!str)\r\n .join(' ')) || undefined;\r\n };\r\n\r\n let displayName: string | undefined;\r\n switch (account.type) {\r\n case AccountType.MSA:\r\n displayName = lf(account.firstName, account.lastName) || account.displayName;\r\n break;\r\n\r\n case AccountType.AAD:\r\n case AccountType.MSA_FED:\r\n displayName = account.displayName || lf(account.firstName, account.lastName);\r\n break;\r\n }\r\n return displayName && displayName.trim();\r\n}\r\n\r\n/**\r\n * Get the header display name for the current account from the account state\r\n * @param account Account state from which to extract the active account (if available)\r\n * @returns The header display name from the state or an empty string if there is none.\r\n */\r\nexport function getHeaderDisplayName(account: IAccountState | undefined): string | undefined {\r\n if (account) {\r\n if (account.profile && account.profile.profileName) {\r\n return account.profile.profileName;\r\n }\r\n else {\r\n switch (account.type) {\r\n case AccountType.AAD:\r\n case AccountType.MSA_FED:\r\n return account.displayName || account.firstName;\r\n\r\n case AccountType.MSA:\r\n return account.firstName || account.displayName;\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get the header a11y label\r\n * @param account Account state for the current account (if any)\r\n * @returns The header label to use for screen readers\r\n */\r\nexport function getHeaderLabel(account: IAccountState | undefined): string {\r\n if (account) {\r\n return format(\r\n getString('headera11yformat1'),\r\n getHeaderDisplayName(account) || account.memberName\r\n );\r\n }\r\n\r\n return getString('signinlabel');\r\n}\r\n\r\n/**\r\n * Get the full display name for the current account from the account state\r\n * @param account Account state from which to extract the active account (if available)\r\n * @returns The full display name from the state or an empty string if there is none.\r\n */\r\nexport function getFullDisplayName(account: IAccountState): string {\r\n if (account.profile && account.profile.profileName) {\r\n return account.profile.profileName;\r\n }\r\n\r\n return getDisplayName(account) || '';\r\n}\r\n\r\n/**\r\n * Determine whether the given list contains the given account\r\n * @param list A list of accounts\r\n * @param account The account to search for\r\n */\r\nexport function findAccount(list: IAccount[], account: IAccount): IAccount | undefined {\r\n const searchId = getAccountId(account);\r\n return list.filter(account2 => getAccountId(account2) === searchId)[0];\r\n}\r\n\r\n//============================\r\n// Current Account\r\n//============================\r\n\r\n/**\r\n * Get the current account from the account state\r\n * @param accounts Account state from which to extract the active account (if available)\r\n * @returns The current account from the state or undefined if there is none.\r\n */\r\nexport function getCurrentAccount(accounts: IMeControlAccounts): IAccountState | undefined {\r\n if (accounts.currentId !== '') {\r\n return accounts.byId[accounts.currentId];\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Given the current account object, determine the appropriate URL to return for the users account\r\n * picture URL. This method will return an empty string if no image url found.\r\n * @param currentAccount The current account used to display the user's info.\r\n */\r\nexport function getPictureUrl(currentAccount: IAccount | undefined): string {\r\n if (currentAccount) {\r\n return currentAccount.profile ?\r\n currentAccount.profile.profilePictureUrl :\r\n currentAccount.pictureUrl as string;\r\n }\r\n\r\n return '';\r\n}\r\n\r\n/**\r\n * Get the current accunt's type. Returns undefined if there is no current account\r\n * @param state MeControl state to extract the current account from\r\n */\r\nexport function getCurrentAccountType(state: IMeControlAppState): AccountType | undefined {\r\n let currentAccount = getCurrentAccount(state.accounts);\r\n return currentAccount && currentAccount.type;\r\n}\r\n\r\n//============================\r\n// Non-Active Accounts\r\n//============================\r\n\r\n/**\r\n * Given the account state, get all of the accounts that are NOT the active one (if there is one)\r\n * @param accounts Account state\r\n * @returns Array of accounts that are NOT the active one (if any)\r\n */\r\nexport function getOtherAccounts(accounts: IMeControlAccounts): IAccountState[] {\r\n const types = ['msaFed', 'msa'];\r\n const activeAccId = accounts.currentId;\r\n const activeAccMemberName = accounts.byId[activeAccId]?.memberName;\r\n let otherAccounts: IAccountState[] = [];\r\n\r\n accounts.allIds.forEach(id => {\r\n let account = accounts.byId[id];\r\n if (id === activeAccId) {\r\n // Don't include active account\r\n return;\r\n }\r\n else if (activeAccMemberName != undefined && account.memberName.toLowerCase() === activeAccMemberName.toLowerCase()\r\n && types.indexOf(account.type) > -1\r\n && types.indexOf(accounts.byId[activeAccId].type) > -1) {\r\n // Don't include duplicate msa/msaFed accounts if they have the same\r\n // memberName\r\n return;\r\n }\r\n else if (find(otherAccounts, other => {\r\n return account.memberName === other.memberName\r\n && types.indexOf(account.type) > -1\r\n && types.indexOf(other.type) > -1;\r\n }) !== undefined) {\r\n return;\r\n } else {\r\n otherAccounts.push(account);\r\n }\r\n });\r\n\r\n return otherAccounts;\r\n}\r\n\r\nexport function toIAccount(account: AnyAccount): IAccount {\r\n return pick(account, [\r\n // General Props\r\n \"type\",\r\n \"memberName\",\r\n \"authenticatedState\",\r\n \"firstName\",\r\n \"lastName\",\r\n \"displayName\",\r\n \"pictureUrl\",\r\n \"profile\",\r\n\r\n // MSA Props\r\n \"cid\",\r\n\r\n // AAD props\r\n \"bearerToken\",\r\n \"orgName\",\r\n \"orgLogoUrl\",\r\n \"sessionId\",\r\n \"roleName\",\r\n ]) as IAccount;\r\n}\r\n","/** ID of the element that will be the live region for the announcer */\r\nconst announcerId = 'mectrl_announcer';\r\n\r\n/**\r\n * Read a given message out-loud for non-sighted users.\r\n * @param message Message to announce out loud\r\n */\r\nexport function announce(message: string): void {\r\n let announcerElement = document.getElementById(announcerId) as HTMLDivElement || createAnnouncer();\r\n announcerElement.textContent = '';\r\n announcerElement.textContent = message;\r\n}\r\n\r\n/**\r\n * Create the HTML Element that will be the live region for status updates\r\n */\r\nfunction createAnnouncer(): HTMLDivElement {\r\n // Create announcer element\r\n let elem = document.createElement('div');\r\n elem.setAttribute('id', announcerId);\r\n elem.setAttribute('aria-live', 'polite');\r\n elem.setAttribute('aria-atomic', 'true');\r\n elem.setAttribute('role', 'status');\r\n elem.setAttribute('style', 'width: 0px; height: 0px; position: absolute; overflow: hidden;');\r\n\r\n // Append it to the document\r\n document.body.appendChild(elem);\r\n return elem;\r\n}\r\n","\nconst ieOldRegex = /MSIE \\d+\\.\\d+/;\nconst ie11Regex = /Trident\\/\\d+\\.\\d+/;\n\n/**\n * Determine if the current browser is IE or not\n * Uses UserAgent string to make determination\n */\nexport function isIE(userAgent: string): boolean {\n if (userAgent) {\n if (ieOldRegex.test(userAgent) || ie11Regex.test(userAgent)) {\n return true;\n }\n }\n\n return false;\n}\n","/**\n * Gets cookie by name.\n * @param name {string} Cookie name.\n * @returns Cookie value or null, if cookie was not found.\n */\nexport function getCookie(name: string): string | null {\n // See: https://developer.mozilla.org/en-US/docs/Web/API/document/cookie\n return decodeURIComponent(\n document.cookie.replace(\n new RegExp(\n '(?:(?:^|.*;)\\\\s*' +\n encodeURIComponent(name).replace(/[\\-\\.\\+\\*]/g, '\\\\$&') +\n '\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$'\n ), '$1'\n )\n ) || null;\n}\n","\r\n/** Generic event handler */\r\nexport type EventHandler = (event: T) => void;\r\n\r\n/** Event handler that delays the actual logic for handling events to avoid repeated calls */\r\nexport interface DebounceEventHandler {\r\n /** Actual event handler function */\r\n (ev: T): EventHandler;\r\n /** Function to cancel the current queued call for debounced events (if any) */\r\n cancel: () => void;\r\n}\r\n\r\n/**\r\n * Create an event handler that delays actually handling events in order to avoid excessive computations.\r\n * When actually handling an event, only the latest instance of said event is passed to the handler.\r\n * @param eventHandler The actual function that handles the event\r\n * @param delayMs How long to delay handling events (and accumulating them) for\r\n */\r\nexport function debounce(this: any, eventHandler: EventHandler, delayMs: number = 100): DebounceEventHandler {\r\n // Variables to keep track of events we are debouncing\r\n let currentTimeout: number | undefined;\r\n let lastEvent: T | undefined;\r\n\r\n // Reset state for next debounced event\r\n const clearState = () => { currentTimeout = lastEvent = undefined; };\r\n\r\n let debouncedEventHandler: any = (event: T) => {\r\n lastEvent = event;\r\n\r\n // Set up the next call of the actual event handling\r\n if (!currentTimeout) {\r\n currentTimeout = setTimeout(() => {\r\n // Trigger event\r\n eventHandler.call(this, lastEvent!);\r\n clearState();\r\n }, delayMs);\r\n }\r\n };\r\n\r\n // Handle canceling the next timeout\r\n debouncedEventHandler.cancel = () => {\r\n clearTimeout(currentTimeout);\r\n clearState();\r\n };\r\n\r\n return debouncedEventHandler;\r\n}\r\n","import { requestAnimationFrame } from '@mecontrol/web-inline';\r\n\r\n// Variables used by delayUntilAnimationFrame() below\r\nlet queuedCallbacks: (() => void)[] = [];\r\nlet callbackId: number | undefined;\r\n\r\n/**\r\n * Delay running a function until the appropriate time in the browser\r\n * layout recalculation.\r\n * Uses the double rAF trick.\r\n * @param callback Function to delay running\r\n */\r\nexport function delayUntilAnimationFrame(callback: () => void): void {\r\n // Queue up our function\r\n queuedCallbacks.push(callback);\r\n\r\n // Only set up the flushing of the queue when we haven't done it yet\r\n if (callbackId === undefined) {\r\n callbackId = requestAnimationFrame(() => requestAnimationFrame(() => {\r\n // Call all queued functions\r\n for (let i = 0; i < queuedCallbacks.length; i++) {\r\n queuedCallbacks[i]();\r\n }\r\n\r\n // Reset variables\r\n queuedCallbacks = [];\r\n callbackId = undefined;\r\n }));\r\n }\r\n}\r\n\r\n/**\r\n * Get the bounding Client Rect for an element. If the element is undefined,\r\n * returns a Client Rect with all zeros.\r\n * @param element An element for which to compute the ClientRect\r\n * @param sizeBuffer A unit of pixes to expand or contract the rect limits by. Default is zero.\r\n */\r\nexport function getClientRect(element: Element | undefined, sizeBuffer: number = 0): ClientRect {\r\n if (!element) {\r\n return { left: 0, top: 0, right: 0, bottom: 0, width: 0, height: 0 };\r\n }\r\n\r\n // Need to compute width and height for IE8\r\n let rect = element.getBoundingClientRect();\r\n return {\r\n left: rect.left - sizeBuffer,\r\n top: rect.top - sizeBuffer,\r\n right: rect.right + sizeBuffer,\r\n bottom: rect.bottom + sizeBuffer,\r\n width: (rect.right - rect.left) + sizeBuffer * 2,\r\n height: (rect.bottom - rect.top) + sizeBuffer * 2\r\n };\r\n}\r\n\r\n/**\r\n * Get a ClientRect representing the visible area of the window\r\n */\r\nexport function getVisibleWindowRect(): ClientRect {\r\n const docEl = document.documentElement!;\r\n const width = Math.min(window.innerWidth, docEl.clientWidth);\r\n const height = Math.min(window.innerHeight, docEl.clientHeight);\r\n\r\n return { left: 0, top: 0, right: width, bottom: height, width, height };\r\n}\r\n\r\n/**\r\n * Get a ClientRect which will define the size of the full documentElement\r\n */\r\nexport function getDocumentRect(): ClientRect {\r\n const docEl = document.documentElement!;\r\n const width = Math.max(docEl.clientWidth, docEl.offsetWidth, docEl.scrollWidth);\r\n const height = Math.max(docEl.clientHeight, docEl.offsetHeight, docEl.scrollHeight);\r\n\r\n return { left: 0, top: 0, right: width, bottom: height, width, height };\r\n}\r\n\r\nexport function decodeHtml(str: string | undefined): string | undefined {\r\n if (str) {\r\n const textArea = document.createElement('textarea');\r\n textArea.innerHTML = str;\r\n return textArea.value;\r\n }\r\n}\r\n","import { assertNever, Promise } from '@mecontrol/web-inline';\n\ninterface ResolvedState {\n state: 'resolved';\n urgent: boolean;\n}\n\ninterface IdlingState {\n state: 'idling';\n promise: Promise;\n resolve: (urgent: boolean) => void;\n reject: (error: Error) => void;\n eventHandler: () => void;\n}\n\ninterface UninitializedState {\n state: 'uninitialized';\n}\n\ntype IdleState = UninitializedState | IdlingState | ResolvedState;\n\nlet idleState: IdleState = { state: 'uninitialized' };\nexport function onLoadUntilUrgent(\n document: Document = window.document\n): Promise {\n switch (idleState.state) {\n case 'resolved': {\n return Promise.resolve(idleState.urgent);\n }\n case 'idling': {\n return idleState.promise;\n }\n case 'uninitialized': {\n let resolve: IdlingState['resolve'], reject: IdlingState['reject'];\n const promise = new Promise((resolver, rejecter) => {\n resolve = resolver;\n rejecter = rejecter;\n });\n\n if (document.readyState === 'complete') {\n resolve!(false);\n idleState = {\n state: 'resolved',\n urgent: false\n };\n } else {\n const eventHandler = () => {\n idleState = { state: 'resolved', urgent: false };\n resolve(idleState.urgent);\n window.removeEventListener('load', eventHandler);\n };\n\n window.addEventListener('load', eventHandler);\n\n idleState = {\n state: 'idling',\n promise,\n // Trust me TypeScript - this works\n resolve: resolve!,\n reject: reject!,\n eventHandler\n };\n }\n\n return promise;\n }\n default: {\n let message = `Unexpected idle state: ${JSON.stringify(idleState)}`;\n assertNever(idleState, message);\n }\n }\n}\n\nexport function setUrgent(): void {\n // if (idleState.state == 'idling') {\n // window.removeEventListener('load', idleState.eventHandler);\n\n // idleState.resolve(true);\n // idleState = { state: 'resolved', urgent: true };\n // }\n\n switch (idleState.state) {\n case 'uninitialized':\n idleState = { state: 'resolved', urgent: true };\n break;\n case 'idling':\n window.removeEventListener('load', idleState.eventHandler);\n idleState.resolve(true);\n idleState = { state: 'resolved', urgent: true };\n break;\n case 'resolved':\n // Do nothing\n break;\n default:\n let message = `Unexpected idle state: ${JSON.stringify(idleState)}`;\n assertNever(idleState, message);\n }\n}\n\n/** TESTING ONLY */\nexport function resetIdleState(): void {\n idleState = { state: 'uninitialized' };\n}\n","import { meImport } from '@mecontrol/web-inline';\r\nimport { onLoadUntilUrgent } from './onLoadUntilUrgent';\r\n\r\nexport function loadCore(): Promise {\r\n return onLoadUntilUrgent().then(() => meImport(\"meCore\"));\r\n}\r\n","import { ObjectAssign, hasOwn } from '@mecontrol/web-inline';\r\n\r\nconst nonWhiteSpaceRegex = /[^\\s]+/;\r\n\r\n/**\r\n * Determine whether a passed in value is either an empty string or\r\n * a string with only whitespace.\r\n * @param value Value to test\r\n */\r\nfunction isEmptyString(value: any): boolean {\r\n switch (typeof value) {\r\n case 'string':\r\n // For strings, we check if it is the empty string and whether\r\n // it has at least one non-whitespace character\r\n return value === '' || !nonWhiteSpaceRegex.test(value);\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Version of assign() that ignores 'undefined' and 'null' properties, as well as empty\r\n * or whitespace strings.\r\n * @param target Object that will have its propertes expanded/overwritten by the merge\r\n * @param sources Array of objects from which to expand the target\r\n */\r\nexport const merge: ObjectAssign = (target: any, ...sources: any[]) => {\r\n for (let source of sources) {\r\n for (let prop in source) {\r\n if (hasOwn(source, prop)) {\r\n let propValue = source[prop];\r\n if (propValue !== null && propValue !== undefined && !isEmptyString(propValue)) {\r\n target[prop] = propValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n};\r\n","import {\r\n IValidatedMeControlConfiguration,\r\n MeControlEventType,\r\n EventDetailsMap,\r\n} from '@mecontrol/common';\r\nimport { getOptions, SyntheticEvent } from '@mecontrol/web-inline';\r\n\r\nexport function raiseSyntheticEvent(\r\n type: Type,\r\n details: EventDetailsMap[Type],\r\n browserEvent: Event\r\n): void {\r\n let meControlOptions:\r\n | IValidatedMeControlConfiguration\r\n | undefined = getOptions();\r\n if (meControlOptions) {\r\n const syntheticEvent = new SyntheticEvent(type, details);\r\n const defaultPrevented = !meControlOptions.syntheticEventTarget.dispatchEvent(\r\n syntheticEvent\r\n );\r\n if (defaultPrevented) {\r\n browserEvent.preventDefault();\r\n return;\r\n }\r\n }\r\n // TODO: send telemetry on failed getOptions() calls\r\n}\r\n","import { AnyObject } from '@mecontrol/common';\r\nimport { hasOwn } from '@mecontrol/web-inline';\r\n\r\n/**\r\n * Parses an object and cleans each field that matches the provided list. Also allows specifying certain\r\n * fields to never be scrubbed or scrubbing everything. If a match is itself an object, then the object's\r\n * fields are also cleaned. 'Cleaning' here means that the value is obfuscated by replacing it with a\r\n * string that states the type of value. Functions inside the object will always be scrubbed.\r\n * @param obj The object to remove fields from\r\n * @param fields List of field names. If a field matches the name, it will be scrubbed. If the name is\r\n * negated ('!fieldName'), it will override everything else and the field will not be scrubbed. Including\r\n * '*' in the list means scrubbing everything (save for negated fields). Not providing fields means the\r\n * same as including '*'.\r\n * @param filter Optional field that is hidden from outside callers that is used for recursive calls to\r\n * indicate if everything in a given object should be cleaned. For cases when a field to clean is actually\r\n * a full object.\r\n * @returns A copy of the provided object, with all fields scrubbed as determined by the provided fields\r\n */\r\nexport function filterObject(obj: AnyObject, fields: string[] = ['*'], filter?: boolean): object {\r\n let filteredObj: AnyObject = {};\r\n\r\n for (let propName in obj) {\r\n if (!hasOwn(obj, propName)) {\r\n continue;\r\n }\r\n\r\n let propValue = obj[propName];\r\n\r\n // Filter a property if:\r\n // - The special flag is set\r\n // - The special '*' field was provided\r\n // - The property's name is in the list of fields\r\n // Override fitlering a property if:\r\n // - The negated property's name is in the list of fields\r\n // If Array.indexOf is not availabel (ie8), then we default to filtering\r\n let filterProp = !fields.indexOf || (fields.indexOf('!' + propName) === -1 && (filter || fields.indexOf('*') !== -1 || fields.indexOf(propName) !== -1));\r\n let propType = typeof propValue;\r\n switch (propType) {\r\n case 'object':\r\n filteredObj[propName] = propValue !== null ? filterObject(propValue, fields, filterProp) : '*null*';\r\n break;\r\n case 'function':\r\n // Always filter functions\r\n filterProp = true;\r\n default:\r\n filteredObj[propName] = filterProp ? `*${propType}*` : propValue;\r\n break;\r\n }\r\n }\r\n\r\n return filteredObj;\r\n}\r\n","import { ITheme, ThemeType } from '@mecontrol/public-api';\nimport { assertNever } from '@mecontrol/web-inline';\n\nexport function getThemeClass(theme: ITheme, isHeader?: boolean): string {\n const headerClass = `${isHeader ? `_header` : ``}`;\n switch (theme.type) {\n case ThemeType.Dark:\n return `mectrl_theme_dark${headerClass}`;\n case ThemeType.AzureHighContrastLight:\n return `mectrl_theme_azure_hclight${headerClass}`;\n case ThemeType.AzureHighContrastDark:\n return `mectrl_theme_azure_hcdark${headerClass}`;\n case ThemeType.Gray:\n return `mectrl_theme_gray${headerClass}`;\n case ThemeType.OffBlack:\n return `mectrl_theme_off_black${headerClass}`;\n case ThemeType.Light:\n return `${isHeader ? `mectrl_theme_light_header` : ``}`;\n }\n\n assertNever(theme.type, `getThemeClass: Unknown theme type ${theme.type}.`);\n}\n","import {\n PictureLoadStatus,\n ActionTypes,\n LoadPictureUrlActions,\n AsyncThunkAction,\n IPictureStatus,\n GetGraphPictureActions,\n Scenario,\n ScenarioStage,\n DataState,\n ISyntheticEventTarget,\n ITrackedScenarioParams,\n IAccountState,\n IGraphData,\n GraphResource\n} from '@mecontrol/common';\nimport { IAccountPropTypes } from '@mecontrol/public-api';\nimport {\n Promise,\n createError,\n logTelemetryEvent,\n ME,\n SyntheticEvent,\n getOptions,\n MeControlError\n} from '@mecontrol/web-inline';\nimport { IIFrameOperation, openIframeForProfilePictures } from '../api/iframe';\nimport {\n MSGraphOAuth2Builder,\n getAccountId,\n generateCodeChallenge\n} from '../utilities';\n\nexport const MAX_PIC_RETRIES = 2;\n\n/** Unique name to avoid collisions with URLS in PicStatus state obj */\nexport const GRAPH_PIC_STATUS_KEY = '__GRAPH_PIC_STATUS__';\n\nexport function setPictureUrlAsync(\n pictureUrl: string,\n picStatus: IPictureStatus\n): AsyncThunkAction {\n return (dispatch, getState) => {\n // pictureUrl is invalid -or- Picture is already loading -or- has passed its threshold of attempts to load.\n if (\n !pictureUrl ||\n picStatus.status === PictureLoadStatus.Loading ||\n picStatus.status === PictureLoadStatus.Succeeded ||\n picStatus.tries >= MAX_PIC_RETRIES\n ) {\n return Promise.resolve();\n }\n\n dispatch({\n type: ActionTypes.LOAD_PICTURE_URL_START,\n payload: {\n pictureUrl\n }\n });\n\n return downloadPicture(pictureUrl)\n .then(() => {\n dispatch({\n type: ActionTypes.LOAD_PICTURE_URL_SUCCESS,\n payload: {\n pictureUrl\n }\n });\n })\n .catch((error: Error) => {\n dispatch({\n type: ActionTypes.LOAD_PICTURE_URL_FAILED,\n error: true,\n payload: error,\n meta: {\n pictureUrl\n }\n });\n });\n };\n}\n\nexport function downloadPicture(url?: string): Promise {\n return new Promise((resolve, reject) => {\n if (!url) {\n // No picture URL, just falsify the loaded and reject the promise.\n reject(createError('Account has no picture URL'));\n } else {\n const imgSizeThreshold = 10;\n // Picture has not been loaded, try and load it.\n let img = new Image();\n let syntheticEventTarget: ISyntheticEventTarget;\n const options = getOptions();\n let imgError: MeControlError;\n if (options) {\n syntheticEventTarget = options.syntheticEventTarget;\n img.onload = () => {\n syntheticEventTarget.dispatchEvent(\n new SyntheticEvent('pictureupdated', {\n completionStatus: true\n })\n );\n /**\n * Blocking Bug fix for Office SuiteHeader:\n * https://identitydivision.visualstudio.com/Engineering/_workitems/edit/712877\n * This is a temporary solution to be shipped for Office.\n *\n * Associated PBI: https://identitydivision.visualstudio.com/Engineering/_workitems/edit/720071\n */\n const isImgLessThanTenByTen =\n img.width <= imgSizeThreshold &&\n img.height <= imgSizeThreshold;\n if (isImgLessThanTenByTen) {\n imgError = createError(\n `Image load error: Image is less than 10x10 pixels. This might be a transparent image!`\n );\n reject(imgError);\n } else {\n resolve();\n }\n };\n img.onerror = ev => {\n imgError = createError(`Failure loading URL '${url}'`);\n syntheticEventTarget.dispatchEvent(\n new SyntheticEvent('pictureupdated', {\n completionStatus: false,\n imgError\n })\n );\n reject(imgError);\n };\n } else {\n reject(\n createError(\n `Failed to obtain MeControl options! MeControl options is null or undefined!`\n )\n );\n }\n\n img.src = url;\n }\n });\n}\n\nexport function getPictureFromGraph(\n currentAccount: IAccountState\n): AsyncThunkAction {\n return (dispatch, getState) => {\n // Check and immediately resolve the promise if the configuration has disabled graph usage.\n if (!ME.Config.graphv2) {\n return Promise.resolve();\n }\n let accountId = (currentAccount && getAccountId(currentAccount)) || '';\n\n if (accountId === '') {\n return Promise.resolve();\n }\n\n // Dispatch redux START.\n dispatch({\n type: ActionTypes.GET_GRAPH_PICTURE_START,\n payload: {\n accountId\n }\n });\n\n // Default event params set so that only a few items need to be adjusted before logging the event.\n let eventParams: ITrackedScenarioParams = {\n eventType: 'TrackedScenario',\n scenario: Scenario.GraphPicture,\n action: '',\n previousAction: ScenarioStage.Start,\n success: true,\n durationMs: 0,\n details: ''\n };\n\n const crypto = window.crypto || window.msCrypto;\n const mapper: { [key: string]: any } = {};\n return generateCodeChallenge(crypto, accountId).then(\n hashedAccountId => {\n const etag = currentAccount.cacheMeta\n ? currentAccount.cacheMeta[\n IAccountPropTypes.PIC_URL_PROPTYPE\n ]\n : undefined;\n // Array of requested Graph resources\n const reqResources: GraphResource[] = [\n {\n key: hashedAccountId,\n resourceType: IAccountPropTypes.PIC_URL_PROPTYPE,\n resourceName: IAccountPropTypes.PIC_URL_PROPTYPE,\n resourceUrl: ME.Config.graphinfo.graphphotourl,\n resourceETag: etag,\n resource: null\n }\n ];\n mapper[hashedAccountId] = accountId;\n const msgraphReq = new MSGraphOAuth2Builder(\n currentAccount,\n hashedAccountId,\n reqResources\n );\n return msgraphReq.initCodeFlow().then(() => {\n // Fire the iframe to retrieve the image from graph.\n return openIframeForProfilePictures(\n msgraphReq,\n getPictureOp\n )\n .then(frameResultResolver)\n .catch((error: Error) => {\n eventParams.action = DataState.FAIL;\n eventParams.details = error.message;\n eventParams.success = false;\n // Disabling for now since no action/retry is attempted after dispatch\n // dispatch({\n // type: ActionTypes.GET_GRAPH_PICTURE_FAILED,\n // error: true,\n // payload: error,\n // meta: {\n // accountId\n // }\n // });\n\n logTelemetryEvent(eventParams);\n });\n });\n }\n );\n function frameResultResolver(message: IGraphData[]) {\n if (message !== undefined) {\n const data = message[0];\n eventParams.action = data.status;\n const resource =\n data.payload.resource ?? data.payload.pictureUrl;\n if (data.status === DataState.OK && resource) {\n dispatch({\n type: ActionTypes.GET_GRAPH_PICTURE_SUCCESS,\n payload: {\n accountId:\n mapper[data.payload.key ?? data.accountId],\n pictureUrl: resource\n }\n });\n } else if (data?.status === DataState.NOOP) {\n eventParams.details = 'Graph call: 304 Not Modified';\n // dispatch({\n // type: ActionTypes.GET_GRAPH_PICTURE_NOOP,\n // payload: {\n // accountId: data.accountId,\n // data: data.payload.pictureUrl\n // }\n // });\n } else {\n eventParams.details =\n data.error_description ??\n data.error ??\n 'Graph call: Failed';\n eventParams.success = false;\n\n // Disabling for now since no action/retry is attempted after dispatch\n // dispatch({\n // type: ActionTypes.GET_GRAPH_PICTURE_FAILED,\n // error: true,\n // payload: new Error(\n // `Unexpected error occurred while trying to get profile image from graph. Details: ${data}`\n // ),\n // meta: {\n // accountId: data.accountId\n // }\n // });\n }\n\n logTelemetryEvent(eventParams);\n }\n }\n };\n}\n\nconst getPictureOp: IIFrameOperation = {\n name: 'GetPictureFromGraph',\n operation: 'GetGraphPicture',\n service: 'MeControl'\n};","/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n // @ts-ignore\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n // @ts-ignore\n (typeof setImmediate === 'function' &&\n function(fn) {\n // @ts-ignore\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","import {\n ActionTypes,\n AllActions,\n AsyncThunkAction,\n DataState,\n GraphResource,\n IGraphData,\n ITrackedScenarioParams,\n PictureLoadStatus,\n Scenario,\n ScenarioStage,\n} from '@mecontrol/common';\nimport { IAccountPropTypes } from '@mecontrol/public-api';\nimport { logTelemetryEvent, ME } from '@mecontrol/web-inline';\nimport Promise from 'promise-polyfill';\nimport { IIFrameOperation, openIframeForCache } from '../api/iframe';\nimport { generateCodeChallenge } from '../utilities';\n\nexport const REMEMBERED_DONE_KEY = '__RMR_OK__';\nexport const CACHED_DONE_KEY = '__CACHE_OK__';\n/**\n * @property {key} The hashed key to check localstorage cache\n * @property {\\_timeOffSet\\_} Used for checking validity of cached object\n */\nexport type GetCacheActions = { key: string; _timeOffSet_?: number }[];\nexport type SetCacheActions = (GraphResource & {\n key: string;\n})[];\ninterface IAccountIdMapsArgs {\n mapper?: { [key: string]: string };\n key: string;\n hash: string;\n resourceType: IAccountPropTypes;\n}\nexport function hydrateFromCache(): AsyncThunkAction {\n // Default event params set so that only a few items need to be adjusted before logging the event.\n const eventParams: ITrackedScenarioParams = {\n eventType: 'TrackedScenario',\n scenario: Scenario.Cache,\n action: '',\n previousAction: ScenarioStage.Start,\n success: true,\n durationMs: 0,\n details: ''\n };\n return (dispatch, getState) => {\n // Check remembered accounts completed\n const { picturesStatus, accounts } = getState();\n const Succeeded = PictureLoadStatus.Succeeded,\n Failed = PictureLoadStatus.Failed;\n const rmrAcctStatus = picturesStatus[REMEMBERED_DONE_KEY];\n const rmrAcctFinished =\n rmrAcctStatus &&\n (rmrAcctStatus.status === Succeeded ||\n rmrAcctStatus.status === Failed);\n if (!rmrAcctFinished) {\n return Promise.resolve();\n }\n if (!ME.Config.cache) {\n dispatch({ type: ActionTypes.GET_CACHED_DISABLED });\n return Promise.resolve();\n }\n const crypto = window.crypto || window.msCrypto;\n const allGetCacheRequests: GetCacheActions = [];\n const hashIdMapper: { [key: string]: any } = {};\n const promises = [];\n // For each account, use asynchronous crypto library to hash account ids. The thanable\n // of each promise will use helper method to push formatted obj to get-request array\n // Then execute all via Promise.all and thenable will openIframe with get-request array\n for (let key in accounts.byId) {\n promises.push(\n generateCodeChallenge(crypto, key).then(hash => {\n createKeyAndAddToMapperAndRequestArray(\n {\n key,\n mapper: hashIdMapper,\n hash,\n resourceType: IAccountPropTypes.PIC_URL_PROPTYPE\n },\n ME.Config.cacheRetention.picRetention,\n allGetCacheRequests\n );\n createKeyAndAddToMapperAndRequestArray(\n {\n key,\n hash,\n mapper: hashIdMapper,\n resourceType: IAccountPropTypes.SHOW_AUTH_APP\n },\n ME.Config.cacheRetention.authAppRetention,\n allGetCacheRequests\n );\n })\n );\n }\n return Promise.all(promises).then(values => {\n logTelemetryEvent(eventParams);\n openIframeForCache(allGetCacheRequests, undefined, getCacheOp).then(\n handleCacheHydration\n );\n });\n function handleCacheHydration(messages: IGraphData[]) {\n const pictureCacheHits = [];\n const showAuthAppCacheHits = [];\n for (let ii in messages) {\n // Reassign the unhashed accountid to cached object\n messages[ii].accountId = hashIdMapper[messages[ii].payload.key];\n if (messages[ii].status === DataState.CACHE) {\n switch (messages[ii].payload.resourceType) {\n case IAccountPropTypes.PIC_URL_PROPTYPE:\n pictureCacheHits.push(messages[ii]);\n break;\n case IAccountPropTypes.SHOW_AUTH_APP:\n showAuthAppCacheHits.push(messages[ii]);\n break;\n }\n }\n }\n if (pictureCacheHits.length > 0) {\n dispatch({\n type: ActionTypes.GET_CACHED_PICTURES_SUCCESS,\n payload: { cachedData: pictureCacheHits }\n });\n }\n if (showAuthAppCacheHits.length > 0) {\n dispatch({\n type: ActionTypes.GET_CACHED_SHOW_AUTH_APP,\n payload: { cachedData: showAuthAppCacheHits }\n });\n }\n dispatch({\n type: ActionTypes.GET_CACHED_COMPLETED\n });\n }\n };\n}\n\nexport function cacheAuthAppDismissal(\n accountId: string\n): AsyncThunkAction {\n return (dispatch, getState) => {\n dispatch({\n type: ActionTypes.DISMISS_AUTH_APP,\n payload: { accountId }\n });\n return generateCodeChallenge(crypto, accountId).then(hash => {\n const sets: SetCacheActions = [];\n createKeyAndAddToMapperAndRequestArray(\n {\n key: accountId,\n hash,\n resourceType: IAccountPropTypes.SHOW_AUTH_APP\n },\n undefined,\n undefined,\n sets,\n false\n );\n return openIframeForCache([], sets, setAuthAppDismissalOp);\n });\n };\n}\nconst getCacheOp: IIFrameOperation = {\n name: 'GetUsersCachedInfo',\n operation: 'GetCachedInfo',\n service: 'MeControl'\n};\n\nconst setAuthAppDismissalOp: IIFrameOperation = {\n name: 'SetAuthAppDismissal',\n operation: 'SetAuthAppDismissal',\n service: 'MeControl'\n};\n\n/**\n * \n * @param acctMeta Props will be used to generate the hashed key\n * @param timeOff If provided will determine validity of cached item\n * @param getReqs Represents the array of get requests\n * @param setReqs Represents the array of set requests\n * @param setVal The value to add to the set-item-in-cache array\n */\nfunction createKeyAndAddToMapperAndRequestArray(\n acctMeta: IAccountIdMapsArgs,\n timeOff?: number,\n getReqs?: GetCacheActions,\n setReqs?: SetCacheActions,\n setVal?: any\n) {\n const idKey = createCacheId(acctMeta.hash, acctMeta.resourceType);\n if (acctMeta.mapper && getReqs) {\n acctMeta.mapper[idKey] = acctMeta.key;\n getReqs.push({ key: idKey });\n } else if (setReqs && setVal !== undefined) {\n setReqs.push({\n key: idKey,\n resourceType: acctMeta.resourceType,\n resource: setVal\n });\n }\n}\nfunction createCacheId(hash: string, resourceType: string) {\n return `${hash}-${resourceType}`;\n}\n","import { h, Component, ComponentFactory } from 'preact';\r\nimport cc from 'classcat';\r\nimport {\r\n IAccountState,\r\n PictureLoadStatus,\r\n IMeControlAppState,\r\n IPictureStatusDictionary,\r\n IPictureStatus\r\n} from '@mecontrol/common';\r\nimport { connect, MapDispatchToProps, MapStateToProps } from '../core/connect';\r\nimport {\r\n getPictureFromGraph,\r\n GRAPH_PIC_STATUS_KEY,\r\n MAX_PIC_RETRIES,\r\n setPictureUrlAsync\r\n} from '../actions/pictureActions';\r\nimport { getPictureUrl, delayUntilAnimationFrame } from '../utilities';\r\nimport { CACHED_DONE_KEY } from '../actions/cacheActions';\r\nimport { IAccountPropTypes } from '@mecontrol/public-api';\r\n\r\nexport interface IProfilePictureProps {\r\n id?: string;\r\n currentAccount?: IAccountState;\r\n glyphClassOverride?: string;\r\n /** Indicate whether graph call could be made on behalf of this profilepic tile. */\r\n graphCall?: boolean;\r\n}\r\n\r\nexport interface IProfilePictureStateProps {\r\n picturesStatus: IPictureStatusDictionary;\r\n}\r\n\r\nexport interface IProfilePictureDispatchProps {\r\n loadPicture: (pictureUrl: string, picStatus: IPictureStatus) => void;\r\n fetchMSGraphPicture: (currentAccount: IAccountState) => void;\r\n}\r\n\r\nexport type IProfilePictureFullProps = IProfilePictureProps &\r\n IProfilePictureStateProps &\r\n IProfilePictureDispatchProps;\r\n\r\n/**\r\n * Constant value change for decriminting the font size to ensure it will fit within the container bounds. The higher the\r\n * number, the less loops (calculations) that will need to take place to determine the best fit. but too big of a number\r\n * will result in items being smaller than they need to be.\r\n */\r\nconst fontShrinkDelta: number = 2;\r\n\r\n/**\r\n * Constant value for the min number of characters that initials can consist of in order to be considered valid. This has\r\n * been added as a range in order to support lightweight accounts that may only have a single name which will result in\r\n * a single letter initial.\r\n */\r\nconst initialsMinLength: number = 1;\r\n\r\n/**\r\n * Constant value for the max number of characters that initials can consist of in order to be considered valid. This has\r\n * been added as a range to deal with accounts that are light weight as well as standard accounts that may have multiple names.\r\n * by having a max, we can ensure consistant experiences for user.\r\n */\r\nconst initialsMaxLength: number = 2;\r\n\r\n/**\r\n * Implementation of the Profile Picture component. This component will logically determine what to show within the confindes\r\n * of the picture area. Meaning if no picture is present to be shown, an appropriate fallback will happen showing either a\r\n * glyph appropriate for the account type, or the initials of the account if they were provided within the current account details.\r\n * Additionally, this component will ensure the profile picture does in fact load, and if not, will revert back to the fallback\r\n * instead of showing a failed to load image.\r\n */\r\nexport class ProfilePictureImpl extends Component {\r\n /**\r\n * In memory canvas that can be used to measure the initials to ensure they don't overflow. This field\r\n * will be left as undefined unless it is needed for measuring.\r\n */\r\n private localCanvas?: HTMLCanvasElement;\r\n\r\n /**\r\n * Keeps a cache of computed sizes for initials so that during re-renders, we do not have to re-compute.\r\n */\r\n private computedSizesCache: Record = {};\r\n\r\n /**\r\n * Tracks whether the computation is currently running when determining the sites of the initials.\r\n */\r\n private isComputingInitials: boolean = false;\r\n\r\n /**\r\n * Constructs a new instance of the ProfilePictureImpl component.\r\n * @param props The full set of properties, state, and dispatch for the profile picture component.\r\n */\r\n constructor(props: IProfilePictureFullProps) {\r\n super(props);\r\n }\r\n\r\n /**\r\n * Renders the component into a JSX element.\r\n */\r\n public render(): JSX.Element {\r\n let {\r\n id,\r\n currentAccount,\r\n glyphClassOverride,\r\n graphCall,\r\n loadPicture,\r\n fetchMSGraphPicture,\r\n picturesStatus\r\n } = this.props;\r\n let inlineStyles: { backgroundImage?: string; fontSize?: string } = {};\r\n let cssClasses = ['mectrl_profilepic'];\r\n let pictureUrl = getPictureUrl(currentAccount);\r\n let picStatus = this.getPictureStatus(pictureUrl, picturesStatus);\r\n let initials: string | undefined;\r\n\r\n if (picStatus.status === PictureLoadStatus.Succeeded) {\r\n inlineStyles.backgroundImage = `url('${pictureUrl}')`;\r\n } else {\r\n // Kick off async dispatches for pictures\r\n // Use PicLoadStatus to check if getRememberedAccounts finished\r\n const Succeeded = PictureLoadStatus.Succeeded,\r\n Failed = PictureLoadStatus.Failed;\r\n const cacheStatus = this.getPictureStatus(\r\n CACHED_DONE_KEY,\r\n picturesStatus\r\n ).status;\r\n const cacheFinished = cacheStatus === Succeeded;\r\n const foundCachedPic =\r\n currentAccount &&\r\n currentAccount.cacheMeta &&\r\n currentAccount.cacheMeta[IAccountPropTypes.PIC_URL_PROPTYPE];\r\n if (\r\n graphCall &&\r\n currentAccount &&\r\n cacheFinished &&\r\n (!pictureUrl ||\r\n (picStatus.tries === MAX_PIC_RETRIES &&\r\n picStatus.status === Failed) ||\r\n foundCachedPic)\r\n ) {\r\n // Check if main pic tile and currentAccount and no url provided or url failed\r\n // After max retries of url failure, attempt graph call\r\n let msGraphPicStatus = this.getPictureStatus(\r\n GRAPH_PIC_STATUS_KEY,\r\n picturesStatus\r\n );\r\n // Ensures only fires off fetch graph pic event once\r\n if (msGraphPicStatus.status === PictureLoadStatus.None) {\r\n fetchMSGraphPicture(currentAccount);\r\n }\r\n } else {\r\n /*\r\n * This component will trigger the promise to try and load the image every time it refrehes\r\n * to ensure the image does get loaded. The dispatch method sent down will have a retry count to prevent\r\n * over use of the calls after a certain number of failures. Because the users image site is unreliable, having\r\n * the retries each re-render will help clean up when images don't load on the first try.\r\n */\r\n loadPicture(pictureUrl, picStatus);\r\n }\r\n // Check if we need to render initials\r\n if (this.shouldRenderInitials(currentAccount)) {\r\n // Adding typescript certainty bypass since shouldRenderinitials helper method already checks existance\r\n initials = currentAccount!.initials!;\r\n cssClasses.push('mectrl_profilepic_initials');\r\n\r\n // If undefined, ensure to set as blank to wipe any any previous fontSize value. if left undefined, it will merge with previous.\r\n inlineStyles.fontSize = this.computedSizesCache[initials] || '';\r\n } // or just a pawn/glyph\r\n else {\r\n cssClasses.push(\r\n 'mectrl_glyph',\r\n this.getValidGlyph(glyphClassOverride, currentAccount)\r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n {initials}\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Triggered method for when the component successfully loaded/mounted.\r\n */\r\n public componentDidMount(): void {\r\n this.triggerOverflowCalculation();\r\n }\r\n\r\n /**\r\n * Triggered method for when the component successfully updates.\r\n */\r\n public componentDidUpdate(previousProps: IProfilePictureFullProps): void {\r\n this.triggerOverflowCalculation();\r\n }\r\n\r\n /**\r\n * Helper to trigger the overflow calulation if conditions are met.\r\n */\r\n private triggerOverflowCalculation(): void {\r\n if (!this.isComputingInitials) {\r\n this.isComputingInitials = true;\r\n delayUntilAnimationFrame(() => {\r\n if (\r\n this.base &&\r\n this.base.innerHTML &&\r\n this.computedSizesCache[this.base.innerHTML] == undefined\r\n ) {\r\n this.fitOverflowInitialsWithCanvas(this.base);\r\n }\r\n\r\n this.isComputingInitials = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Helper method that will measure the inner text (initials) of the current account against the size\r\n * of the container's client width. If an overflow of text will occur, this method will apply an\r\n * inline style override for the font-size to ensure the text is visible properly.\r\n * @param container The containing HTML Element that contains the text being measured and adjusted.\r\n */\r\n private fitOverflowInitialsWithCanvas(container: HTMLElement): void {\r\n // Instantiate the local (in memory) canvas for the class if undefined\r\n if (this.localCanvas === undefined) {\r\n this.localCanvas = document.createElement('canvas');\r\n }\r\n\r\n // Initialize and compute values needed to run measureText tests on canvas context.\r\n const computedStyle: CSSStyleDeclaration = getComputedStyle(\r\n container,\r\n null\r\n );\r\n const fontFamily = computedStyle.getPropertyValue('font-family');\r\n const originalFontSize = computedStyle.getPropertyValue('font-size');\r\n const originalSize = parseFloat(originalFontSize);\r\n let canvasContext = this.localCanvas.getContext(\r\n '2d'\r\n ) as CanvasRenderingContext2D;\r\n\r\n // Start with initial values\r\n let newSize = originalSize;\r\n canvasContext.font = `${newSize}px ${fontFamily}`;\r\n let measuredTextWidth: number = canvasContext.measureText(\r\n container.innerHTML\r\n ).width;\r\n let loopCount = 0;\r\n const maxLoops = 10;\r\n\r\n // If values cause overflow, being loop to find the right font size to allow text to not overflow\r\n while (\r\n measuredTextWidth > container.clientWidth &&\r\n loopCount++ < maxLoops\r\n ) {\r\n newSize -= fontShrinkDelta;\r\n canvasContext.font = `${newSize}px ${fontFamily}`;\r\n measuredTextWidth = canvasContext.measureText(\r\n container.innerHTML\r\n ).width;\r\n }\r\n\r\n // Check and update if size actually changed due to loop above or not\r\n if (originalSize != newSize) {\r\n container.style.fontSize = `${newSize}px`;\r\n this.computedSizesCache[container.innerHTML] =\r\n container.style.fontSize;\r\n } else {\r\n // set computed size to empty to represent the \"default\".\r\n this.computedSizesCache[container.innerHTML] = '';\r\n }\r\n }\r\n\r\n /**\r\n * Simple helper method to get the status of the picture from the state. If no state is found a new\r\n * initial state will be created and returned to the caller.\r\n * @param pictureUrl The string URL for the picture to retrieve state on.\r\n * @param picturesStatus The state of IPictureStatusDictionary.\r\n */\r\n private getPictureStatus(\r\n pictureUrl: string,\r\n picturesStatus: IPictureStatusDictionary\r\n ): IPictureStatus {\r\n return (\r\n picturesStatus[pictureUrl] || {\r\n status: PictureLoadStatus.None,\r\n tries: 0\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Simple helper method that will determine which glyph class or otherwise to use for this picture\r\n * component based on the current account's information and state.\r\n * @param glyphClass Any optional overriding glyph class that was requested by the props.\r\n * @param currentAccount The current account state associated with this profile picture.\r\n */\r\n private getValidGlyph(\r\n glyphClass: string | undefined,\r\n currentAccount: IAccountState | undefined\r\n ): string {\r\n if (!glyphClass) {\r\n if (!currentAccount) {\r\n return 'mectrl_signIn_circle_glyph';\r\n } else {\r\n // There are three possible types - \"aad\", \"msa\" or \"msaFed\".\r\n // The last two are both MSAs, with one coming from MSA IDP and one coming from AAD IDP.\r\n // From a glyph perspective, both \"msa\" and \"msaFed\" are personal accounts.\r\n return currentAccount.type === 'aad'\r\n ? 'glyph_aadAccount_circle'\r\n : 'glyph_account_circle';\r\n }\r\n }\r\n\r\n return glyphClass;\r\n }\r\n private shouldRenderInitials(\r\n currentAccount: IAccountState | undefined\r\n ): boolean {\r\n return (\r\n !!currentAccount &&\r\n !!currentAccount.initials &&\r\n currentAccount.initials.length >= initialsMinLength &&\r\n currentAccount.initials.length <= initialsMaxLength\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps: MapStateToProps<\r\n IMeControlAppState,\r\n IProfilePictureStateProps\r\n> = state => ({\r\n picturesStatus: state.picturesStatus\r\n});\r\n\r\nconst mapDispatchToProps: MapDispatchToProps<\r\n IMeControlAppState,\r\n IProfilePictureDispatchProps\r\n> = dispatch => ({\r\n loadPicture(pictureUrl: string, picStatus: IPictureStatus): void {\r\n dispatch(setPictureUrlAsync(pictureUrl, picStatus));\r\n },\r\n fetchMSGraphPicture(currentAccount: IAccountState): void {\r\n dispatch(getPictureFromGraph(currentAccount));\r\n }\r\n});\r\n\r\nexport const ProfilePicture: ComponentFactory = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ProfilePictureImpl) as any;\r\n","import { VNode } from \"preact\";\n\n// Dumb hack to work-around Preact types. The next major version of Preact\n// (Preact X) will fix this by introducing a new function `toChildArray` whose\n// signature is similar to the following. So hacking around the broken types\n// for now by creating a similar function.\n//\n// P.S. In Preact X, this function will do something meaningful, unlike the\n// hack below.\nexport function toChildArray(children: any): VNode[] {\n return children;\n}\n","import { h, Component, render, cloneElement, VNode } from 'preact';\r\nimport { createId } from '@mecontrol/web-inline';\r\nimport { delayUntilAnimationFrame, getClientRect, getVisibleWindowRect, isElement } from '../utilities';\r\nimport { toChildArray } from '../core/toChildArray';\r\n\r\nexport interface ITooltipProps {\r\n text: string;\r\n /**\r\n * Used when the tooltip should not show regardless of triggers.\r\n */\r\n hideOverride?: boolean;\r\n showToolTipOnClick?: boolean;\r\n}\r\n\r\nexport interface ITooltipState {\r\n show: boolean;\r\n isFocusTriggered: boolean;\r\n immediate?: boolean;\r\n timeout?: number;\r\n}\r\n\r\nlet tooltipCount = 0;\r\nconst FourSeconds = 4000;\r\n\r\n// Standard tooltips are not accessble via keyboard as illustrated by the\r\n// following bugs;\r\n// - Bug 20651588: [Keyboard Navigation - MeControl - Sign in] Tooltips are not accessible\r\n// through keyboard on 'More links popup button' under sign in menu.\r\n// https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/20651588\r\n// - Bug 20636326: [Keyboard Navigation - MeControl - Sign in]Tool tips are not accessible\r\n// through keyboard on 'More links popup button' under sign in menu.\r\n// https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/20636326\r\n// Thus, this component\r\nexport class Tooltip extends Component {\r\n\r\n private readonly id: string;\r\n private element: Element | undefined;\r\n\r\n constructor(props: ITooltipProps) {\r\n super(props);\r\n\r\n this.state = { show: false, isFocusTriggered: false, immediate: false };\r\n\r\n this.id = createId('tooltip', tooltipCount);\r\n tooltipCount++;\r\n }\r\n\r\n /**\r\n * Handle ESC when the tooltip is showing to dismiss the tooltip.\r\n * This handler will not interrupt the event, so any other listeners\r\n * will fire still\r\n * @param ev Keyboard event object\r\n */\r\n private dismissHandler(ev: KeyboardEvent): void {\r\n if (this.state.show) {\r\n switch (ev.key) {\r\n case 'Escape':\r\n case 'Esc':\r\n this.changeVisibility(false);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Update visibility of the tooltip */\r\n private changeVisibility(show: boolean, isFocusTriggered: boolean = false, immediate: boolean = false, timeout: number | undefined = undefined): void {\r\n this.setState({ show, isFocusTriggered, immediate, timeout });\r\n }\r\n\r\n private showOnClick(){\r\n const timeoutId = setTimeout(() => {\r\n this.changeVisibility(false, false);\r\n }, FourSeconds);\r\n this.changeVisibility(true, false, true, timeoutId);\r\n }\r\n\r\n private removeTooltip(){\r\n try{\r\n if(this.state.timeout) {\r\n clearTimeout(this.state.timeout)\r\n };\r\n } catch{}\r\n this.changeVisibility(false, false);\r\n }\r\n \r\n /** Render DOM element for the tooltip */\r\n private renderTooltip(show: boolean): void {\r\n if (show) {\r\n const tooltip =\r\n \r\n {this.props.text}\r\n ;\r\n this.element = render(tooltip, document.body, this.element);\r\n }\r\n else if (this.element) {\r\n this.element = render(null, document.body, this.element);\r\n }\r\n\r\n }\r\n\r\n public componentDidUpdate(oldProps: ITooltipProps, oldState: ITooltipState): void {\r\n const { show, isFocusTriggered } = this.state;\r\n const isFocusVisibleSet = document.querySelector('.mectrl_root.mectrl_focus_visible');\r\n\r\n if(this.props.hideOverride){\r\n this.renderTooltip(false);\r\n }\r\n // Only update/render things if changes where made to state or props\r\n else if (oldState.show !== show ||\r\n oldState.isFocusTriggered !== isFocusTriggered ||\r\n oldProps.text !== this.props.text) {\r\n\r\n // If we should show the tooltip AND either this was not triggered by a focus\r\n // (which means it was triggered by hover) or if it was and focus-visible is set,\r\n // then we go ahead and both render the tooltip and position it\r\n if (show && (!isFocusTriggered || isFocusVisibleSet)) {\r\n\r\n // Render the tooltip. Default styling for it will make it invisible\r\n this.renderTooltip(true);\r\n\r\n // Delay making the tooltip visible for a bit: 700ms+\r\n setTimeout(() => {\r\n delayUntilAnimationFrame(() => {\r\n if (isElement(this.element) && isElement(this.base)) {\r\n positionTooltip(this.element as HTMLElement, this.base as HTMLElement, isFocusTriggered);\r\n }\r\n });\r\n }, this.state.immediate ? 0 : 700);\r\n }\r\n // Otherwise, we remove the tooltip regardless\r\n else {\r\n this.renderTooltip(false);\r\n }\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this.renderTooltip(false);\r\n }\r\n\r\n public render(): any {\r\n const children = toChildArray(this.props.children)\r\n .map(child => {\r\n return cloneElement(child, {\r\n onmouseenter: wrapEventHandler(child, 'onMouseEnter', () => this.changeVisibility(true, false)),\r\n onmouseleave: wrapEventHandler(child, 'onMouseLeave', () => this.removeTooltip()),\r\n onfocus: wrapEventHandler(child, 'onFocus', () => this.changeVisibility(true, true)),\r\n onblur: wrapEventHandler(child, 'onBlur', () => this.changeVisibility(false, true)),\r\n onkeydown: wrapEventHandler(child, 'onKeyDown', (ev: KeyboardEvent) => this.dismissHandler(ev)),\r\n onclick: wrapEventHandler(child, 'onClick',\r\n this.props.showToolTipOnClick\r\n ? () => this.showOnClick()\r\n : () => this.changeVisibility(false, false)\r\n )\r\n });\r\n });\r\n\r\n if (children.length > 1) {\r\n return
{children}
;\r\n }\r\n else {\r\n return children[0] || null;\r\n }\r\n }\r\n}\r\n\r\nfunction positionTooltip(target: HTMLElement, anchor: HTMLElement, isFocusTriggered: boolean): void {\r\n const vOffset = 7; // px - vertical space between anchor and tooltip\r\n let targetRect = getClientRect(target);\r\n let anchorRect = getClientRect(anchor);\r\n let windowRect = getVisibleWindowRect();\r\n\r\n // Select where to vertically position the tooltip relative to the anchor\r\n // Preferred position is above with some padding\r\n let newTop = anchorRect.top >= (targetRect.height + vOffset) ?\r\n /* Above with spacing */ anchorRect.top - vOffset - targetRect.height :\r\n /* Below with spacing */ anchorRect.bottom + vOffset;\r\n\r\n // Select where to place the tooltip horizontally\r\n // Base attempt is to align it to center align it with the anchor\r\n let newLeft = (anchorRect.width / 2) + anchorRect.left - (targetRect.width / 2);\r\n\r\n // If the tooltip would overflow to the right, adjust it to the right edge\r\n if (newLeft + targetRect.width > windowRect.right) {\r\n newLeft = windowRect.right - targetRect.width;\r\n }\r\n // If the tooltip would overflow to the left, adjust it to the left edge\r\n // NOTE: if the tooltip where to overflow in both directions, adjusting to the left\r\n // edge and then setting right to 'auto' helps alleviate the overflow\r\n if (newLeft < 0) {\r\n newLeft = 0;\r\n }\r\n\r\n // Set styles if possible\r\n if (target && target.style) {\r\n target.style.left = `${newLeft}px`;\r\n target.style.top = `${newTop}px`;\r\n target.style.right = 'auto';\r\n target.style.bottom = 'auto';\r\n target.style.visibility = 'visible';\r\n }\r\n}\r\n\r\nfunction wrapEventHandler(node: VNode, handlerName: string, newHandler: (ev: any) => void): (ev: Event) => void {\r\n // Keep the original handler if it was set before\r\n // Also, try the name as it is passed or all lowercase\r\n const originalHandler = node.attributes[handlerName]\r\n || node.attributes[handlerName.toLowerCase()];\r\n\r\n return (ev: Event) => {\r\n if (originalHandler) {\r\n originalHandler(ev);\r\n }\r\n newHandler(ev);\r\n };\r\n}\r\n","import { h, Component } from 'preact';\r\nimport cc from 'classcat';\r\nimport { delayUntilAnimationFrame } from '../utilities';\r\nimport { Tooltip } from './Tooltip';\r\n\r\nexport interface ITruncateTagProps {\r\n tag: string;\r\n title: string;\r\n hideTooltip?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface ITruncateTagState {\r\n showTooltip: boolean;\r\n}\r\n\r\n// Class used to truncate tag contents\r\nconst truncateClass = 'mectrl_truncate';\r\n\r\nexport class TruncateTag extends Component<\r\n ITruncateTagProps,\r\n ITruncateTagState\r\n> {\r\n constructor(props: ITruncateTagProps) {\r\n super(props);\r\n this.state = { showTooltip: false };\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.evaluateAndSetShowTooltip();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n this.evaluateAndSetShowTooltip();\r\n }\r\n\r\n private evaluateAndSetShowTooltip(): void {\r\n if (this.props.hideTooltip === false) {\r\n !this.state.showTooltip && this.setState({ showTooltip: true });\r\n } else if (!this.props.hideTooltip) {\r\n delayUntilAnimationFrame(() => {\r\n const element = this.base;\r\n const showTooltip = element\r\n ? element.offsetWidth < element.scrollWidth\r\n : false;\r\n showTooltip !== this.state.showTooltip &&\r\n this.setState({ showTooltip });\r\n });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n let { tag, title, children, hideTooltip, showToolTipOnClick, ...otherAttributes } =\r\n this.props;\r\n const showTooltip = !hideTooltip && this.state.showTooltip;\r\n\r\n let attributes: any = otherAttributes || {};\r\n attributes.class = cc([attributes.class, truncateClass]);\r\n\r\n const tagNode = h(tag, attributes, children || null);\r\n\r\n if (showTooltip) {\r\n return {tagNode};\r\n } else {\r\n return tagNode;\r\n }\r\n }\r\n}\r\n","import { h, FunctionalComponent } from 'preact';\r\nimport { TruncateTag } from './TruncateTag';\r\n\r\nexport interface ITruncateTextProps {\r\n text: string;\r\n id?: string;\r\n cssClass?: string;\r\n ariaLabel?: string;\r\n hideTooltip?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\nexport const TruncateText: FunctionalComponent = props => {\r\n const { text, id, cssClass, ariaLabel, hideTooltip, ...otherAttributes } = props;\r\n\r\n return (\r\n \r\n {text}\r\n \r\n );\r\n};\r\n","import { h, FunctionalComponent } from \"preact\";\r\nimport { Promise } from '@mecontrol/web-inline';\r\nimport { IPresenceHeaderProps } from '@mecontrol/web-core';\r\nimport { RenderAsync } from '../core/RenderAsync';\r\nimport { loadCore } from '../utilities';\r\n\r\nfunction loadCoreBody(): Promise> {\r\n return loadCore().then(meCore => meCore.PresenceHeader) as Promise>;\r\n}\r\n\r\n/**\r\n * The PresenceAync component allows the PresenceHeader component to be loaded at\r\n * a later time. This reduces the size of web-boot by moving all relevant rendering logic\r\n * into web-core.\r\n */\r\nexport const PresenceAsync: FunctionalComponent = props => {\r\n // When loading or facing an error, we simply display nothing\r\n const loadingOrError = () => null as any;\r\n return (\r\n }\r\n renderLoading={loadingOrError}\r\n renderError={loadingOrError}\r\n />\r\n );\r\n};\r\n","import { h, FunctionalComponent, ComponentFactory } from \"preact\";\r\nimport cc from 'classcat';\r\nimport { IAccountState, IMeControlAppState } from '@mecontrol/common';\r\nimport { createId } from '@mecontrol/web-inline';\r\nimport { ProfilePicture } from './ProfilePicture';\r\nimport { TruncateText } from './TruncateText';\r\nimport { getHeaderDisplayName, isSignedIn, getThemeClass } from '../utilities';\r\nimport { PresenceAsync } from './PresenceAsync';\r\nimport { ITheme } from '@mecontrol/public-api';\r\nimport { MapStateToProps, MapDispatchToProps, connect } from '../core/connect';\r\n\r\nexport interface IHeaderProps {\r\n text?: string;\r\n\r\n account?: IAccountState;\r\n hideText?: boolean;\r\n hideIcon?: boolean;\r\n}\r\n\r\ninterface IHeaderStateProps {\r\n headerTheme?: ITheme;\r\n}\r\n\r\ninterface IHeaderDispatchProps { }\r\n\r\ntype IHeaderFullProps = IHeaderProps & IHeaderStateProps & IHeaderDispatchProps;\r\n\r\nconst headerClass = \"mectrl_topHeader\";\r\n\r\nconst HeaderImpl: FunctionalComponent = props => {\r\n const { account, hideIcon } = props;\r\n const signedIn = account && isSignedIn(account);\r\n const displayText = signedIn ? getHeaderDisplayName(account) : props.text;\r\n let cssClass = headerClass;\r\n if (props.headerTheme) {\r\n cssClass = cc([headerClass, getThemeClass(props.headerTheme)]);\r\n }\r\n const text = props.hideText || !displayText ? null :\r\n ;\r\n\r\n const icon = hideIcon ? null :\r\n [\r\n ,\r\n signedIn ? : null\r\n ];\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps: MapStateToProps = state => ({\r\n headerTheme: state.headerTheme\r\n});\r\n\r\nconst mapDispatchToProps: MapDispatchToProps = () => ({});\r\n\r\nexport const Header: ComponentFactory = connect(mapStateToProps, mapDispatchToProps)(HeaderImpl);\r\n","import { h, FunctionalComponent } from 'preact';\r\nimport cc from 'classcat';\r\nimport { ContentSource } from '@mecontrol/common';\r\nimport { logTelemetryEvent } from '@mecontrol/web-inline';\r\nimport { Tooltip } from './Tooltip';\r\nimport { TruncateTag } from './TruncateTag';\r\nimport { toChildArray } from '../core/toChildArray';\r\n\r\nexport interface ILinkButtonProps {\r\n id: string;\r\n contentId?: string;\r\n contentType?: string;\r\n contentSlot?: number;\r\n getUrl?(): string | undefined;\r\n onClick?: JSX.MouseEventHandler;\r\n isDisabled?: boolean;\r\n cssClass?: string;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\nexport const LinkButton: FunctionalComponent = props => {\r\n // Yarg! There be no reason ter check for missing props!\r\n const {\r\n id,\r\n contentId,\r\n contentType,\r\n contentSlot,\r\n isDisabled = false,\r\n getUrl,\r\n onClick,\r\n cssClass,\r\n ariaLabel,\r\n children,\r\n accountType,\r\n openInNewTab,\r\n uaid,\r\n ...otherAttributes\r\n } = props;\r\n const classes = cc(['mectrl_resetStyle', cssClass]);\r\n const url = getUrl && getUrl();\r\n\r\n const handleClick = (ev: MouseEvent) => {\r\n logTelemetryEvent({\r\n eventType: 'PageAction',\r\n content: {\r\n id: contentId || id,\r\n type: contentType,\r\n slot: contentSlot,\r\n source: ContentSource.Action\r\n },\r\n targetUrl: url,\r\n uaid: uaid,\r\n });\r\n onClick && onClick(ev);\r\n };\r\n\r\n // Render a button when disabled or when we have no URL to link to\r\n let tag: any = isDisabled || !url ? 'button' : 'a';\r\n\r\n // Basic attributes that button or a tags will share\r\n let attributes: any = {\r\n id,\r\n class: classes,\r\n ['aria-label']: ariaLabel,\r\n ...otherAttributes\r\n };\r\n\r\n // Add button type to avoid form submission\r\n if (tag === 'button') {\r\n attributes.type = 'button';\r\n }\r\n\r\n // Add special case attributes\r\n if (isDisabled) {\r\n attributes.disabled = true;\r\n }\r\n else {\r\n attributes.onClick = handleClick;\r\n // For a tag\r\n if (url) {\r\n attributes.href = url;\r\n attributes.target = openInNewTab ? '_blank' : '_top';\r\n }\r\n }\r\n\r\n let childArray = toChildArray(children);\r\n\r\n // If this LinkButton has only a string as its child, then we will truncate\r\n // said string by actually rendering a TruncateTag component\r\n if (childArray && childArray.length == 1 && typeof childArray[0] === 'string') {\r\n attributes.tag = tag;\r\n attributes.title = attributes.title || childArray[0];\r\n tag = TruncateTag;\r\n }\r\n // For other cases where we have a title attribute, we will wrap our tag in a\r\n // Tooltip component to render that correctly\r\n else if (attributes.title) {\r\n let title = attributes.title;\r\n delete attributes.title;\r\n\r\n childArray = [h(tag, attributes, childArray || null)];\r\n attributes = { text: title };\r\n tag = Tooltip;\r\n }\r\n\r\n return h(tag, attributes, childArray || null);\r\n};\r\n","import { h, Component } from 'preact';\r\nimport cc from 'classcat';\r\n\r\nexport interface IFocusVisibleProps {\r\n cssClass: string;\r\n visibleOnStart?: boolean;\r\n}\r\n\r\nexport interface IFocusVisibleState {\r\n activated: boolean;\r\n}\r\n\r\n// Class used to signal focus visible\r\nconst focusVisibleClass = 'mectrl_focus_visible';\r\n\r\n// Number of milliseconds to wait between a keyboard and a click\r\n// event to consider them related\r\nconst keyboardClickWaitTimeMs = 260;\r\n\r\nexport class FocusVisible extends Component {\r\n\r\n private hasRecentKeyboardAction: boolean;\r\n\r\n constructor(props: IFocusVisibleProps) {\r\n super(props);\r\n\r\n this.state = { activated: !!props.visibleOnStart };\r\n this.hasRecentKeyboardAction = false;\r\n this.keydownHandler = this.keydownHandler.bind(this);\r\n this.clickHandler = this.clickHandler.bind(this);\r\n }\r\n\r\n private toggle(activate: boolean): void {\r\n if (activate != this.state.activated) {\r\n this.setState({ activated: activate });\r\n }\r\n }\r\n\r\n private keydownHandler(): void {\r\n // Set wait time to avoid clicks triggered by keyboard to cancel this\r\n this.hasRecentKeyboardAction = true;\r\n setTimeout(() => { this.hasRecentKeyboardAction = false; }, keyboardClickWaitTimeMs);\r\n\r\n // Update state if necessary\r\n this.toggle(true);\r\n }\r\n\r\n private clickHandler(): void {\r\n // Toggle state when necesary, only if this click is not immediately\r\n // following a key press\r\n if (!this.hasRecentKeyboardAction) {\r\n this.toggle(false);\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n document.addEventListener('keydown', this.keydownHandler, true);\r\n document.addEventListener('click', this.clickHandler, true);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.removeEventListener('keydown', this.keydownHandler, true);\r\n document.removeEventListener('click', this.clickHandler, true);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { cssClass, children } = this.props;\r\n const { activated } = this.state;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n }\r\n}\r\n","import { Component } from 'preact';\r\nimport { RuntimeDisplayMode } from '@mecontrol/public-api';\r\nimport { DebounceEventHandler, debounce } from '../utilities';\r\n\r\nexport interface IBreakpointProps {\r\n mode: RuntimeDisplayMode;\r\n width: number;\r\n render(valueExceeded: boolean): JSX.Element;\r\n}\r\n\r\nexport interface IBreakpointState {\r\n valueExceeded: boolean;\r\n}\r\n\r\nexport class Breakpoint extends Component {\r\n\r\n private mounted: boolean;\r\n private watching: boolean;\r\n private mediaQueryWatcher: MediaQueryList | undefined;\r\n private readonly resizeDebouncer: DebounceEventHandler;\r\n\r\n constructor(props: IBreakpointProps) {\r\n super(props);\r\n\r\n // Bind functions\r\n this.mediaQueryHandler = this.mediaQueryHandler.bind(this);\r\n this.resizeDebouncer = debounce(this.resizeHandler.bind(this));\r\n\r\n // Initial state\r\n let initialExceededValue = window.innerWidth >= this.props.width;\r\n this.state = { valueExceeded: initialExceededValue };\r\n this.mounted = false;\r\n this.watching = false;\r\n }\r\n\r\n /** Handle resize notifications when MediaQuery is available */\r\n private mediaQueryHandler(mq: MediaQueryListEvent): void {\r\n this.breakpointCheck(mq.matches);\r\n }\r\n\r\n /** Handle debounced resize events. DO NOT USE DIRECTLY */\r\n private resizeHandler(evt: Event): void {\r\n this.breakpointCheck(window.innerWidth >= this.props.width);\r\n }\r\n\r\n /** Logic for updating state on resize events */\r\n private breakpointCheck(newExceedsValue: boolean): void {\r\n if (this.mounted && newExceedsValue != this.state.valueExceeded) {\r\n this.setState({ valueExceeded: newExceedsValue });\r\n }\r\n }\r\n\r\n /** Set up watching the size of the window */\r\n private setupWatcher(): void {\r\n if (!this.watching) {\r\n this.watching = true;\r\n\r\n // Set up watching the size of the window depending on whether\r\n // MediaQueries are available or not.\r\n if (window.matchMedia) {\r\n this.mediaQueryWatcher = window.matchMedia(`(min-width: ${this.props.width}px)`);\r\n this.mediaQueryWatcher.addListener(this.mediaQueryHandler);\r\n }\r\n else {\r\n window.addEventListener('resize', this.resizeDebouncer);\r\n }\r\n }\r\n }\r\n\r\n /** Stop tracking window size */\r\n private clearWatcher(): void {\r\n if (this.watching) {\r\n this.watching = false;\r\n\r\n // Clean up either media query or resize events\r\n if (this.mediaQueryWatcher) {\r\n this.mediaQueryWatcher.removeListener(this.mediaQueryHandler as any);\r\n }\r\n else {\r\n this.resizeDebouncer.cancel();\r\n window.removeEventListener('resize', this.resizeDebouncer);\r\n }\r\n }\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.mounted = true;\r\n\r\n if (this.props.mode === RuntimeDisplayMode.Auto) {\r\n this.setupWatcher();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this.mounted = false;\r\n this.clearWatcher();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.props.mode === RuntimeDisplayMode.Auto) {\r\n this.setupWatcher();\r\n }\r\n else {\r\n this.clearWatcher();\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n // RuntimeDisplayMode.Auto === Compute 'valueExceeded'\r\n // RuntimeDisplayMode.Standard === Always show 'valueExceeded' experience\r\n // RuntimeDisplayMode.Compressed === Never show 'valueExceeded' experience\r\n let valueExceeded =\r\n (this.props.mode === RuntimeDisplayMode.Auto && this.state.valueExceeded) ||\r\n this.props.mode === RuntimeDisplayMode.Standard;\r\n\r\n return this.props.render(valueExceeded);\r\n }\r\n}\r\n","import { h, FunctionalComponent } from 'preact';\r\n\r\ninterface IScreenReaderTextProps {\r\n children: string;\r\n}\r\n\r\nexport const ScreenReaderText: FunctionalComponent = props =>\r\n \r\n {props.children}\r\n ;\r\n","import { IAccount, SignInExperienceType, ICustomAuthProviderConfig } from '@mecontrol/public-api';\nimport { Promise, createError } from '@mecontrol/web-inline';\nimport {\n IAuthOperations,\n IAuthProvider,\n ISignInArgs,\n ISignInToArgs,\n ISignOutFromAppArgs,\n ISignOutFromIdpArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutAndForgetFromIdpArgs\n} from '@mecontrol/common';\n\nexport function createPartnerManagedAuthProvider(config: ICustomAuthProviderConfig): IAuthProvider {\n return new PartnerManagedAuthProvider(config);\n}\n\nclass PartnerManagedAuthProvider implements IAuthProvider {\n public navProvider: undefined;\n\n public supportedSignInAccountTypes: SignInExperienceType = this.config.signInExperienceTypes;\n\n\n constructor(private config: ICustomAuthProviderConfig) {}\n\n public isOperationSupported(authOperation: keyof IAuthOperations): boolean {\n return typeof this.config[authOperation] === \"function\";\n }\n\n public signIn(args: ISignInArgs): void {\n return this.config.signIn(args);\n }\n\n public signInTo(args: ISignInToArgs): void {\n if (this.isOperationSupported(\"signInTo\")) {\n return this.config.signInTo!(args);\n }\n else {\n throw createError(\"switch is not supported\");\n }\n }\n\n public signOutFromApp(args: ISignOutFromAppArgs): void {\n return this.config.signOutFromApp(args);\n }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n if (this.isOperationSupported(\"signOutFromIdp\")) {\n return Promise.resolve(this.config.signOutFromIdp!(args));\n }\n else {\n throw createError(\"switch is not supported\");\n }\n }\n\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\n if (this.isOperationSupported(\"signOutFromIdp\")) {\n return Promise.resolve(this.config.signOutAndForgetFromIdp!(args));\n }\n else {\n throw createError(\"switch is not supported\");\n }\n }\n\n public switch(args: ISwitchArgs): void {\n if (this.isOperationSupported(\"switch\")) {\n return this.config.switch!(args);\n }\n else {\n throw createError(\"switch is not supported\");\n }\n }\n\n public switchTo(args: ISwitchToArgs): void {\n if (this.isOperationSupported(\"switchTo\")) {\n return this.config.switchTo!(args);\n }\n else {\n throw createError(\"switchTo is not supported\");\n }\n }\n\n public getRememberedAccounts(): Promise {\n if (this.isOperationSupported(\"getRememberedAccounts\")) {\n return Promise.resolve(this.config.getRememberedAccounts!());\n }\n else {\n throw createError(\"getRememberedAccounts is not supported\");\n }\n }\n\n}\n","import {\r\n AccountType,\r\n IAccount,\r\n AuthenticatedState,\r\n} from '@mecontrol/public-api';\r\nimport { ErrorSeverity } from '@mecontrol/common';\r\nimport {\r\n IUserData,\r\n IAadUserData,\r\n IMsaUserData,\r\n UserDataAuthState,\r\n UserDataType\r\n} from './userData';\r\nimport { logTelemetryEvent } from '@mecontrol/web-inline';\r\nimport { decodeHtml } from '../../utilities';\r\n\r\ntype UserDataTypeMap = { [key in UserDataType]: AccountType };\r\nconst UserDataTypeMap: UserDataTypeMap = {\r\n [UserDataType.AAD]: AccountType.AAD,\r\n [UserDataType.MSA]: AccountType.MSA,\r\n [UserDataType.MSA_FED]: AccountType.MSA_FED,\r\n};\r\n\r\ninterface UserDataAuthStateMap {\r\n [key: number]: AuthenticatedState;\r\n}\r\n\r\nconst UserDataAuthStateMap: UserDataAuthStateMap = {\r\n [UserDataAuthState.NotSignedIn]: AuthenticatedState.NotSignedIn,\r\n [UserDataAuthState.SignedIn]: AuthenticatedState.SignedIn,\r\n [UserDataAuthState.SignedInIdp]: AuthenticatedState.SignedInIDPOnly,\r\n};\r\n\r\nexport function userDataToIAccount(userData: IUserData | IAadUserData | IMsaUserData): IAccount {\r\n const msaUserData = userData as IMsaUserData;\r\n const aadUserData = userData as IAadUserData;\r\n\r\n // If an IDP tells us an account is signed in to the site, we map the state\r\n // back to IDP-only to avoid issues with mismatched states after a sign out\r\n // from app or switch.\r\n // This only applies to website remembered accounts and will probably need\r\n // to be addressed again in the future when a website actually supports more\r\n // than one account in a 'signed in to app' state.\r\n const filterAuthenticatedStatus = (authStatus: AuthenticatedState) =>\r\n authStatus === AuthenticatedState.SignedIn ?\r\n AuthenticatedState.SignedInIDPOnly :\r\n authStatus;\r\n\r\n let authState = UserDataAuthStateMap[userData.authenticatedState];\r\n if (!authState) {\r\n authState = UserDataAuthStateMap[UserDataAuthState.NotSignedIn];\r\n logTelemetryEvent({\r\n eventType: \"ClientError\",\r\n name: \"Undefined Authenticated State\",\r\n type: \"UndefinedAuthState\",\r\n details: `An unsupported authenticated state was supplied: ${userData.authenticatedState}`,\r\n severity: ErrorSeverity.Warning,\r\n displayed: false\r\n });\r\n }\r\n\r\n return {\r\n type: UserDataTypeMap[userData.idp] as any,\r\n memberName: decodeHtml(userData.memberName) as string,\r\n authenticatedState: filterAuthenticatedStatus(authState),\r\n firstName: decodeHtml(userData.firstName),\r\n lastName: decodeHtml(userData.lastName),\r\n pictureUrl: userData.tileUrl,\r\n cid: msaUserData.cid,\r\n hA: msaUserData.hA,\r\n displayName: decodeHtml(aadUserData.displayName),\r\n orgName: decodeHtml(aadUserData.orgName),\r\n orgLogoUrl: aadUserData.orgLogoUrl,\r\n sessionId: aadUserData.sessionId,\r\n roleName: decodeHtml(aadUserData.roleName),\r\n isWindowsSso: aadUserData.isWindowsSso,\r\n };\r\n}\r\n","import {\n ISignInArgs,\n ISignInToArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutFromAppArgs,\n ISignOutAndForgetFromIdpArgs,\n ISignOutFromIdpArgs\n} from '@mecontrol/common';\nimport { getPageLocation } from '@mecontrol/web-inline';\nimport { setQueryParams, hasQueryParam } from '../../../utilities';\n\nconst loginHintKey = \"login_hint\";\nconst returnUrlKey = \"ru\";\nconst sessionIdKey = \"sessionId\";\n\nfunction updateQueryParams(url: string, loginHint?: string, sessionId?: string): string {\n let params: Record = {};\n\n if (!hasQueryParam(url, 'ru')) {\n params[returnUrlKey] = getPageLocation().href;\n }\n\n if (loginHint) {\n params[loginHintKey] = loginHint;\n }\n\n if (sessionId) {\n params[sessionIdKey] = sessionId;\n }\n\n return setQueryParams(url, params);\n}\n\nexport function createSignInRequest(url: string, args: ISignInArgs): string {\n return updateQueryParams(url);\n}\n\nexport function createSignInToRequest(url: string, args: ISignInToArgs): string {\n return updateQueryParams(url, args.nextAccount.memberName);\n}\n\nexport function createSwitchRequest(url: string, args: ISwitchArgs): string {\n return updateQueryParams(url);\n}\n\nexport function createSwitchToRequest(url: string, args: ISwitchToArgs): string {\n return updateQueryParams(url, args.nextAccount.memberName);\n}\n\nexport function createSignOutRequest(url: string, args: ISignOutFromAppArgs): string {\n return updateQueryParams(url, undefined, args.currentAccount.sessionId);\n}\n\nexport function createSignOutFromIdpRequest(url: string, args: ISignOutFromIdpArgs): string {\n return setQueryParams(url, {\n [sessionIdKey]: args.account.sessionId,\n shouldForgetUser: 'false',\n isIframe: 'true',\n });\n}\n\nexport function createSignOutAndForgetRequest(url: string, args: ISignOutAndForgetFromIdpArgs): string {\n return setQueryParams(url, {\n [sessionIdKey]: args.account.sessionId,\n shouldForgetUser: 'true',\n isIframe: 'true',\n });\n}\n\nexport function createForgetRequest(url: string, args: ISignOutAndForgetFromIdpArgs): string {\n return setQueryParams(url, {\n [sessionIdKey]: args.account.sessionId\n });\n}\n","import { IAccount, IWebIdpConfig, IMsaWebIdpConfig, IAadWebIdpConfig, AccountType, AuthenticatedState, AuthProviderConfigType } from '@mecontrol/public-api';\nimport { createError, ME, Promise, id, logTelemetryEvent } from '@mecontrol/web-inline';\nimport { ISignOutFromIdpArgs, ISignOutAndForgetFromIdpArgs, RememberedAccountErrors, IAuthProvider } from '@mecontrol/common';\nimport { isString, setQueryParams, findAccount } from '../../../utilities';\nimport { openIframe, IIFrameOperation } from '../../iframe';\nimport { userDataToIAccount } from '../selectors';\nimport { IRememberedAccountsResponse } from '../userData';\nimport { createSignOutAndForgetRequest, createSignOutFromIdpRequest, createForgetRequest } from './urlHelpers';\n\nexport interface IRememberedAccountsProvider {\n signOutFromIdp(args: ISignOutFromIdpArgs, authProvider?: IAuthProvider): Promise;\n signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs, authProvider?: IAuthProvider): Promise;\n getRememberedAccounts(): Promise;\n}\n\n// TODO: Move this to a more appropriate module\nexport interface ISignedOutResponse {\n signoutStatus: string;\n error?: string;\n}\n\nexport interface IWebRememberedAccountsProviderOptions {\n proxyToOtherIdp: boolean;\n}\n\nconst defaultOptions: IWebRememberedAccountsProviderOptions = {\n proxyToOtherIdp: false,\n};\n\nexport function createMsaAccountsProvider(\n config: Partial,\n options: IWebRememberedAccountsProviderOptions = { ...defaultOptions }\n): IRememberedAccountsProvider {\n return new MsaWebAccountsProvider(config, {\n proxyToOtherIdp: options.proxyToOtherIdp && ME.Config.aad && ME.Config.pxy\n });\n}\n\nexport function createAadAccountsProvider(\n config: Partial,\n options: IWebRememberedAccountsProviderOptions = { ...defaultOptions }\n): IRememberedAccountsProvider {\n return new AadWebAccountsProvider(config, {\n proxyToOtherIdp: options.proxyToOtherIdp && ME.Config.pxy\n });\n}\n\nclass AadWebAccountsProvider implements IRememberedAccountsProvider {\n\n private idpName: string = 'AAD';\n\n constructor(\n private config: Partial,\n private options: IWebRememberedAccountsProviderOptions\n ) { }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs, authProvider?: IAuthProvider): Promise {\n const operation = getSignOutFromIdpOp(this.idpName);\n const iframeUrl = this.getSignOutIframeUrl(args);\n return this.openSignOutIframe(\n iframeUrl,\n args.account,\n false,\n operation,\n authProvider\n );\n }\n\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs, authProvider?: IAuthProvider): Promise {\n const accountAuthState = args.account.authenticatedState;\n if (accountAuthState === AuthenticatedState.NotSignedIn) {\n const operation = getForgetFromIdpOp(this.idpName);\n const iframeUrl = this.getForgetIframeUrl(args);\n return openIframe(iframeUrl, operation, 0)\n .then(() => authProvider ? authProvider.getRememberedAccounts() : this.getRememberedAccounts())\n .then(accounts => {\n if (findAccount(accounts, args.account) != undefined) {\n throw createError('Forget user failed. IDP getRememberedAccounts contains account user attempted to forget.');\n }\n });\n }\n else {\n const operation = getSignOutAndForgetFromIdpOp(this.idpName);\n const iframeUrl = this.getSignOutAndForgetIframeUrl(args);\n return this.openSignOutIframe(iframeUrl, args.account, true, operation, authProvider);\n\n }\n }\n\n public getRememberedAccounts(): Promise {\n if (!ME.Config.aad) {\n return Promise.reject(createError('AAD Remembered Accounts disabled'));\n }\n\n const operation = getRememberedAccountsOp(this.idpName);\n return getRememberedAccounts(this.config.rememberedAccountsUrl, this.options, operation);\n }\n\n private getSignOutIframeUrl(args: ISignOutFromIdpArgs): string {\n if (!this.config.signOutUrl) {\n throw createError('AadWebIdp is not configured for signOutFromIdp.');\n }\n\n switch (args.account.type) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n return isString(this.config.signOutUrl)\n ? createSignOutFromIdpRequest(this.config.signOutUrl, args)\n : this.config.signOutUrl(args);\n default:\n throw createError(`AadWebAccountsProvider: SignOut operation not supported for ${args.account.type}`);\n }\n }\n\n private getSignOutAndForgetIframeUrl(args: ISignOutAndForgetFromIdpArgs): string {\n if (!this.config.signOutAndForgetUrl) {\n throw createError('AadWebIdp is not configured for signOutAndForgetFromIdp.');\n }\n\n switch (args.account.type) {\n case AccountType.MSA_FED:\n case AccountType.AAD:\n return isString(this.config.signOutAndForgetUrl)\n ? createSignOutAndForgetRequest(this.config.signOutAndForgetUrl, args)\n : this.config.signOutAndForgetUrl(args);\n default:\n throw createError(`AadWebAccountsProvider: SignOutAndForget operation not supported for ${args.account.type}`);\n }\n }\n\n private getForgetIframeUrl(args: ISignOutAndForgetFromIdpArgs): string {\n if (!this.config.forgetUrl) {\n throw createError('AadWebIdp is not configured for forgetFromIdp');\n }\n\n switch (args.account.type) {\n case AccountType.MSA_FED:\n case AccountType.AAD:\n return isString(this.config.forgetUrl)\n ? createForgetRequest(this.config.forgetUrl, args)\n : this.config.forgetUrl(args);\n default:\n throw createError(`AadWebAccountsProvider: ForgetFromIdp operation not supported for ${args.account.type}`);\n }\n }\n\n private openSignOutIframe(\n url: string,\n account: IAccount,\n shouldForget: boolean,\n operation: IIFrameOperation,\n authProvider?: IAuthProvider\n ): Promise {\n return openIframe(url, operation, 1)\n .then(processSignedOutMessage)\n .then(() => authProvider ? authProvider.getRememberedAccounts() : this.getRememberedAccounts())\n .then(accounts => {\n const signedOutAccount = findAccount(accounts, account);\n if (shouldForget && signedOutAccount != undefined) {\n throw createError('Sign out failed. IDP getRememberedAccounts contains account user attempted to remove.');\n }\n else if (signedOutAccount && signedOutAccount.authenticatedState !== AuthenticatedState.NotSignedIn) {\n throw createError('Sign out failed. IDP did not indicate the account was signed out successfully.');\n }\n });\n }\n}\n\nclass MsaWebAccountsProvider implements IRememberedAccountsProvider {\n\n private idpName: string = 'MSA';\n\n constructor(\n private config: Partial,\n private options: IWebRememberedAccountsProviderOptions\n ) { }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n return Promise.reject(createError('MsaWebIdp does not support signOutFromIdp.'));\n }\n\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs, authProvider?: IAuthProvider): Promise {\n const operation = getSignOutAndForgetFromIdpOp(this.idpName);\n const iframeUrl = this.getSignOutAndForgetIframeUrl(args);\n return this.openSignOutIframe(iframeUrl, args.account, operation, authProvider);\n }\n\n public getRememberedAccounts(): Promise {\n // TODO: for aad, the check is (!ME.Config.aad) but there's no parallel .msa property - is this sufficient?\n // should AAD also check the this.config.rememberedAccountsUrl too?\n if (!this.config.rememberedAccountsUrl) {\n return Promise.reject(createError('MSA Remembered Accounts disabled'));\n }\n\n const operation = getRememberedAccountsOp(this.idpName);\n return getRememberedAccounts(this.config.rememberedAccountsUrl, this.options, operation);\n }\n\n private getSignOutAndForgetIframeUrl(args: ISignOutAndForgetFromIdpArgs): string {\n if (!this.config.signOutAndForgetUrl) {\n throw createError('Partner failed to provide a URL or callback to generate a URL for SignOutAndForget.');\n }\n\n switch (args.account.type) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n throw createError(`MsaWebAccountsProvider: SignOutAndForget operation not supported for ${args.account.type}`);\n case AccountType.MSA:\n return isString(this.config.signOutAndForgetUrl)\n ? createSignOutAndForgetRequest(this.config.signOutAndForgetUrl, args)\n : this.config.signOutAndForgetUrl(args);\n }\n }\n\n private openSignOutIframe(\n url: string,\n account: IAccount,\n operation: IIFrameOperation,\n authProvider?: IAuthProvider\n ): Promise {\n if (authProvider && (authProvider as any).config.type === AuthProviderConfigType.WebAadWithMsaProxy) {\n return openIframe(url, operation, 1, () => true, authProvider)\n .then(processSignedOutMessage)\n .then(() => authProvider ? authProvider.getRememberedAccounts() : this.getRememberedAccounts())\n .then(accounts => {\n if (findAccount(accounts, account) != undefined) {\n throw createError('Sign out failed. IDP getRememberedAccounts contains account user attempted to remove.');\n }\n })\n .catch(() => {\n // if signOutIframe fails, attempt to call rememberedAccounts again to see if it was a false failure due to proxy authprovider behavior.\n const rememberedAccounts = authProvider ? authProvider.getRememberedAccounts() : this.getRememberedAccounts()\n rememberedAccounts.then(accounts => {\n if (findAccount(accounts, account) != undefined) {\n throw createError('Sign out failed. IDP getRememberedAccounts contains account user attempted to remove.');\n }\n });\n });\n } else {\n return openIframe(url, operation, 1)\n .then(processSignedOutMessage)\n .then(() => authProvider ? authProvider.getRememberedAccounts() : this.getRememberedAccounts())\n .then(accounts => {\n if (findAccount(accounts, account) != undefined) {\n throw createError('Sign out failed. IDP getRememberedAccounts contains account user attempted to remove.');\n }\n });\n }\n }\n}\n\nfunction isRememberedAccountsMessage(data: any): boolean {\n if (typeof data !== 'string') {\n return false;\n }\n\n let msg: unknown;\n try {\n msg = JSON.parse(data);\n } catch (e) {\n return false;\n }\n\n return (\n typeof msg == 'object' &&\n msg != null &&\n ('error' in msg || 'userList' in msg)\n );\n}\n\nfunction getRememberedAccounts(\n rememberedAccountsUrl: IWebIdpConfig[\"rememberedAccountsUrl\"],\n options: IWebRememberedAccountsProviderOptions,\n operation: IIFrameOperation\n): Promise {\n if (!ME.Config.remAcc) {\n return Promise.reject(createError('Remembered Accounts disabled'));\n }\n\n if (!rememberedAccountsUrl) {\n return Promise.reject(createError(operation.service + 'WebIdp not configured for getRememberedAccounts.'));\n }\n\n let iframeUrl: string;\n if (typeof rememberedAccountsUrl === 'function') {\n iframeUrl = rememberedAccountsUrl();\n } else {\n iframeUrl = rememberedAccountsUrl;\n }\n\n iframeUrl = setQueryParams(iframeUrl, { uaid: id, partnerId: ME.Config.ptn });\n if (options.proxyToOtherIdp) {\n iframeUrl = setQueryParams(iframeUrl, { idpflag: 'proxy' });\n }\n\n let expectedMessageCount = 1;\n if (options.proxyToOtherIdp) {\n expectedMessageCount = 2;\n }\n\n // TODO: Should we fire the outgoing request here instead?\n\n return openIframe(iframeUrl, operation, expectedMessageCount, isRememberedAccountsMessage)\n .then(messages => messages\n .map(processRememberedAccountsMessage) // convert each message into an IAccount[]\n .reduce((acc, cur) => acc.concat(cur), []) // Flatten array\n );\n}\n\nfunction processRememberedAccountsMessage(message: any): IAccount[] {\n // let dataPoints: any = {\n // currentIdp: isMsa ? IDP.MSA : IDP.AAD,\n // messagesMissing: _userStateCall.expectedMessagesCount\n // };\n\n if (typeof message !== 'string') {\n throw createError('Invalid message from IDP. Was not a string.');\n }\n\n const accountData: IRememberedAccountsResponse | null = JSON.parse(message);\n if (accountData && accountData.error) {\n if (accountData.error === RememberedAccountErrors.NoReturnedMsaAccountsError) {\n // MSA Returns this error message when no remembered accounts are returned.\n return [];\n }\n else if (accountData.error === RememberedAccountErrors.InvalidProxiedDomain) {\n logTelemetryEvent({\n eventType: 'ClientError',\n name: 'Invalid proxy domain used for get remembered accounts iFrame',\n type: 'RememberedAccountsProxyFailure',\n details: `iFrame hostname: ${window.location.hostname}`,\n displayed: false\n });\n\n throw createError('Invalid proxy domain used for get remembered accounts iFrame');\n }\n else {\n throw createError(`Remembered Accounts API returned an error: ${accountData.error}`);\n }\n }\n else if (accountData && accountData.userList) {\n // V1 logging: logQos('UserState', success, perfNow() - _userStateCall.startTime, errorCode, dataPoints);\n return accountData.userList.map(userDataToIAccount);\n }\n else {\n // Evaluate V1 error handling\n\n // let errorCode = 'InvalidIdpData';\n // if (userData && userData.error) {\n // dataPoints.IDPError = userData.error;\n // errorCode = 'IDPError';\n // }\n // logQos('UserStatePartial', false, perfNow() - _userStateCall.startTime, errorCode, dataPoints);\n\n throw createError('MSA Remembered Accounts API returned invalid data');\n }\n}\n\nfunction processSignedOutMessage(messages: any[]): void {\n let message = messages[0];\n if (typeof message !== 'string') {\n throw createError('Invalid message from IDP. Was not a string.');\n }\n\n if (message === 'signedout') {\n // login.live.com/logout just sends the message \"signedout\" when the\n // sign out was successful\n return;\n }\n\n let signedOutMessage: ISignedOutResponse = JSON.parse(message);\n // EvoSts is hardcoded to always return an error here, so we ignore it\n // if (signedOutMessage.error) {\n // throw createError(`Sign Out operation failed with error: ${signedOutMessage.error.toString()}`);\n // }\n\n if (signedOutMessage.error && signedOutMessage.error === RememberedAccountErrors.InvalidProxiedDomain) {\n logTelemetryEvent({\n eventType: 'ClientError',\n name: 'Invalid proxy domain used for sign out of remembered account iFrame',\n type: 'RememberedAccountsProxyFailure',\n details: `iFrame hostname: ${window.location.hostname}`,\n displayed: false\n });\n\n throw createError('Sign out operation failed due to Invalid proxy domain used for sign out of remembered account iFrame');\n }\n\n let signedoutStatus = signedOutMessage.signoutStatus;\n if (signedoutStatus.toString() !== 'true') {\n throw createError(`Sign out operation failed with signoutStatus: ${signedoutStatus.toString()}`);\n }\n\n return;\n}\n\ntype IFrameOperationFactory = (idp: string) => IIFrameOperation;\n\nconst getRememberedAccountsOp: IFrameOperationFactory = idp => ({\n name: 'GetRememberedAccounts',\n operation: 'GetRememberedAccounts',\n service: idp.toUpperCase()\n});\n\nconst getSignOutFromIdpOp: IFrameOperationFactory = idp => ({\n name: 'SignOutFromIdp',\n operation: 'SignOut',\n service: idp.toUpperCase()\n});\n\nconst getSignOutAndForgetFromIdpOp: IFrameOperationFactory = idp => ({\n name: 'SignOutAndForgetFromIdp',\n operation: 'SignOut',\n service: idp.toUpperCase()\n});\n\nconst getForgetFromIdpOp: IFrameOperationFactory = idp => ({\n name: 'ForgetFromIdp',\n operation: 'ForgetAccount',\n service: idp.toUpperCase()\n});\n","import { AccountType } from '@mecontrol/public-api';\r\nimport { IAuthProvider } from '@mecontrol/common';\r\n\r\nexport function canLeverageRememberedAccounts(authProvider: IAuthProvider, accountType: AccountType): boolean {\r\n return authProvider.isOperationSupported('switchTo', accountType) ||\r\n authProvider.isOperationSupported('signInTo', accountType);\r\n}\r\n\r\nexport function isRememberedAccountsSupported(authProvider: IAuthProvider): boolean {\r\n const op = 'getRememberedAccounts';\r\n return authProvider.isOperationSupported(op, AccountType.MSA) ||\r\n authProvider.isOperationSupported(op, AccountType.MSA_FED) ||\r\n authProvider.isOperationSupported(op, AccountType.AAD);\r\n}\r\n","import { IWebAuthProviderConfigBase } from '@mecontrol/public-api';\nimport {\n IAuthNavigationProvider,\n ISignInArgs,\n ISignInToArgs,\n ISignOutFromAppArgs,\n ISignOutFromIdpArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutAndForgetFromIdpArgs\n} from '@mecontrol/common';\nimport { isString } from '../../../utilities';\nimport {\n createSignInRequest,\n createSignInToRequest,\n createSignOutRequest,\n createSwitchToRequest,\n createSwitchRequest\n} from './urlHelpers';\n\nexport class WebAuthNavProvider implements IAuthNavigationProvider {\n constructor(private config: IWebAuthProviderConfigBase) {}\n\n public getSignInUrl(args: ISignInArgs): string | undefined {\n return isString(this.config.appSignInUrl)\n ? createSignInRequest(this.config.appSignInUrl, args)\n : this.config.appSignInUrl();\n }\n\n public getSignInToUrl(args: ISignInToArgs): string | undefined {\n return isString(this.config.appSignInToUrl)\n ? createSignInToRequest(this.config.appSignInToUrl, args)\n : this.config.appSignInToUrl(args);\n }\n\n public getSignOutFromAppUrl(args: ISignOutFromAppArgs): string | undefined {\n return isString(this.config.appSignOutUrl)\n ? createSignOutRequest(this.config.appSignOutUrl, args)\n : this.config.appSignOutUrl(args);\n }\n\n public getSignOutFromIdpUrl(args: ISignOutFromIdpArgs): string | undefined {\n return;\n }\n\n public getSignOutAndForgetFromIdpUrl(\n args: ISignOutAndForgetFromIdpArgs\n ): string | undefined {\n // Don't return the this.config.msa(or aad).signOutAndForgetUrl here.\n // The Urls in this provider are intended to redirect the current\n // webpage. signOutandForgetUrl is suppose to be opened in an Iframe.\n return;\n }\n\n public getSwitchUrl(args: ISwitchArgs): string | undefined {\n return isString(this.config.appSwitchUrl)\n ? createSwitchRequest(this.config.appSwitchUrl, args)\n : this.config.appSwitchUrl(args);\n }\n\n public getSwitchToUrl(args: ISwitchToArgs): string | undefined {\n return isString(this.config.appSwitchToUrl)\n ? createSwitchToRequest(this.config.appSwitchToUrl, args)\n : this.config.appSwitchToUrl(args);\n }\n}\n","import { IAccount, IWebDualStackConfig, SignInExperienceType, AccountType } from '@mecontrol/public-api';\r\nimport {\r\n IAuthOperations,\r\n IAuthProvider,\r\n IAuthNavigationProvider,\r\n ISignInArgs,\r\n ISignInToArgs,\r\n ISignOutFromAppArgs,\r\n ISignOutFromIdpArgs,\r\n ISwitchArgs,\r\n ISwitchToArgs,\r\n ISignOutAndForgetFromIdpArgs\r\n} from '@mecontrol/common';\r\nimport { Promise, ME, assertNever, logTelemetryEvent, toJsonable, createError } from '@mecontrol/web-inline';\r\nimport { createMsaAccountsProvider, createAadAccountsProvider, IRememberedAccountsProvider } from './webAccountProviders';\r\nimport { isStringOrFunction } from '../../../utilities';\r\nimport { canLeverageRememberedAccounts } from './operationHelpers';\r\nimport { WebAuthNavProvider } from './navProviders';\r\n\r\nexport function createWebDualStackAuthProvider(config: IWebDualStackConfig): IAuthProvider {\r\n return new WebDualStackProvider(config);\r\n}\r\n\r\nclass WebDualStackProvider implements IAuthProvider {\r\n private msaAccountsProvider: IRememberedAccountsProvider;\r\n private aadAccountsProvider: IRememberedAccountsProvider;\r\n\r\n public navProvider: IAuthNavigationProvider;\r\n\r\n //TODO: I really don't know how this is used yet - it seems like it's always Default in all of the providers\r\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Converged;\r\n\r\n constructor(private config: IWebDualStackConfig) {\r\n this.navProvider = new WebAuthNavProvider(this.config);\r\n this.msaAccountsProvider = createMsaAccountsProvider(this.config.msa);\r\n this.aadAccountsProvider = createAadAccountsProvider(this.config.aad);\r\n }\r\n\r\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\r\n switch (authOperation) {\r\n case \"signIn\":\r\n return isStringOrFunction(this.config.appSignInUrl);\r\n case \"signInTo\":\r\n return isStringOrFunction(this.config.appSignInToUrl);\r\n case \"signOutFromApp\":\r\n return isStringOrFunction(this.config.appSignOutUrl);\r\n case \"signOutFromIdp\":\r\n return (\r\n (accountType === AccountType.AAD ||\r\n accountType === AccountType.MSA_FED) &&\r\n isStringOrFunction(this.config.aad?.signOutUrl)\r\n );\r\n case \"signOutAndForgetFromIdp\":\r\n return (\r\n ((accountType === AccountType.AAD || accountType == AccountType.MSA_FED) &&\r\n isStringOrFunction(\r\n this.config.aad?.signOutAndForgetUrl\r\n )) ||\r\n (accountType === AccountType.MSA &&\r\n isStringOrFunction(\r\n this.config.msa?.signOutAndForgetUrl\r\n ))\r\n );\r\n case \"switch\":\r\n return isStringOrFunction(this.config.appSwitchUrl);\r\n case \"switchTo\":\r\n return isStringOrFunction(this.config.appSwitchToUrl);\r\n case \"getRememberedAccounts\":\r\n return ME.Config.remAcc &&\r\n canLeverageRememberedAccounts(this, accountType) &&\r\n (\r\n (accountType === AccountType.AAD && isStringOrFunction(this.config.aad?.rememberedAccountsUrl)) ||\r\n (accountType === AccountType.MSA && isStringOrFunction(this.config.msa?.rememberedAccountsUrl))\r\n );\r\n }\r\n\r\n assertNever(authOperation, `Operation \"${authOperation}\" was unhandled.`);\r\n }\r\n\r\n public signIn(args: ISignInArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signInTo(args: ISignInToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromApp(args: ISignOutFromAppArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\r\n const acctType = args.account.type;\r\n if (this.isOperationSupported('signOutFromIdp', acctType)) {\r\n switch (acctType) {\r\n case AccountType.AAD:\r\n case AccountType.MSA_FED:\r\n return this.aadAccountsProvider.signOutFromIdp(args);\r\n case AccountType.MSA:\r\n return this.msaAccountsProvider.signOutFromIdp(args);\r\n }\r\n }\r\n\r\n return Promise.reject(createError('signOutFromIdp is not supported'));\r\n }\r\n\r\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\r\n const acctType = args.account.type;\r\n if (this.isOperationSupported('signOutAndForgetFromIdp', acctType)) {\r\n switch (acctType) {\r\n case AccountType.AAD:\r\n case AccountType.MSA_FED:\r\n return this.aadAccountsProvider.signOutAndForgetFromIdp(args);\r\n case AccountType.MSA:\r\n return this.msaAccountsProvider.signOutAndForgetFromIdp(args);\r\n }\r\n }\r\n\r\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\r\n }\r\n\r\n public switch(args: ISwitchArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public switchTo(args: ISwitchToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public getRememberedAccounts(): Promise {\r\n const handleFailure = (type: AccountType) => (error: Error) => {\r\n logTelemetryEvent({\r\n eventType: 'ClientError',\r\n name: 'Failed to retrieve rememebered accounts for ' + type,\r\n type: 'RememberedAccountsFailure',\r\n details: JSON.stringify(toJsonable(error)),\r\n displayed: false\r\n });\r\n\r\n let empty: IAccount[] = [];\r\n return empty;\r\n };\r\n\r\n const msaSupported = this.isOperationSupported('getRememberedAccounts', AccountType.MSA);\r\n const aadSupported = this.isOperationSupported('getRememberedAccounts', AccountType.AAD);\r\n\r\n if (!msaSupported && !aadSupported) {\r\n return Promise.reject(createError('getRememberedAccounts is not supported'));\r\n }\r\n\r\n let msaRememberedAccounts = msaSupported ?\r\n this.msaAccountsProvider.getRememberedAccounts()\r\n .catch(handleFailure(AccountType.MSA))\r\n .then(accList => accList.filter(acc => acc.type == AccountType.MSA)) :\r\n Promise.resolve([]);\r\n\r\n let aadRememberedAccounts = aadSupported ?\r\n this.aadAccountsProvider.getRememberedAccounts()\r\n .catch(handleFailure(AccountType.AAD))\r\n .then(accList => accList.filter(acc => acc.type == AccountType.AAD)) :\r\n Promise.resolve([]);\r\n\r\n return Promise.all([msaRememberedAccounts, aadRememberedAccounts])\r\n .then(accountLists => accountLists.reduce((acc, cur) => acc.concat(cur), [])); // Flatten list\r\n }\r\n}\r\n","import { IWebMsaOnlyConfig, SignInExperienceType, IAccount, AccountType } from '@mecontrol/public-api';\r\nimport {\r\n IAuthProvider,\r\n IAuthOperations,\r\n IAuthNavigationProvider,\r\n ISignInArgs,\r\n ISignInToArgs,\r\n ISignOutFromAppArgs,\r\n ISignOutFromIdpArgs,\r\n ISignOutAndForgetFromIdpArgs,\r\n ISwitchArgs,\r\n ISwitchToArgs\r\n} from '@mecontrol/common';\r\nimport { Promise, ME, assertNever, createError } from '@mecontrol/web-inline';\r\nimport { IRememberedAccountsProvider, createMsaAccountsProvider } from './webAccountProviders';\r\nimport { isStringOrFunction } from '../../../utilities';\r\nimport { canLeverageRememberedAccounts } from './operationHelpers';\r\nimport { WebAuthNavProvider } from './navProviders';\r\n\r\nexport function createWebMsaOnlyAuthProvider(config: IWebMsaOnlyConfig): IAuthProvider {\r\n return new WebMsaOnlyProvider(config);\r\n}\r\n\r\nclass WebMsaOnlyProvider implements IAuthProvider {\r\n private msaAccountsProvider: IRememberedAccountsProvider;\r\n\r\n public navProvider: IAuthNavigationProvider;\r\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Msa;\r\n\r\n constructor(private config: IWebMsaOnlyConfig) {\r\n this.navProvider = new WebAuthNavProvider(this.config);\r\n this.msaAccountsProvider = createMsaAccountsProvider(this.config.msa);\r\n }\r\n\r\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\r\n if (accountType !== AccountType.MSA) {\r\n return false;\r\n }\r\n\r\n // TODO: AAD does this differently (seems to try to fix up for missing Switch URLs and SwitchToURLs.) Is that what we want?\r\n switch (authOperation) {\r\n case \"signIn\":\r\n return isStringOrFunction(this.config.appSignInUrl);\r\n case \"signInTo\":\r\n return isStringOrFunction(this.config.appSignInToUrl);\r\n case \"signOutFromApp\":\r\n return isStringOrFunction(this.config.appSignOutUrl);\r\n case \"signOutFromIdp\":\r\n return false; // MSA can't do this - it's implicitly sign out and forget\r\n case \"signOutAndForgetFromIdp\":\r\n return isStringOrFunction(this.config.msa?.signOutAndForgetUrl);\r\n case \"switch\":\r\n return isStringOrFunction(this.config.appSwitchUrl);\r\n case \"switchTo\":\r\n return isStringOrFunction(this.config.appSwitchToUrl);\r\n case \"getRememberedAccounts\":\r\n // TODO: aad also checks on ME.Config.aad, but there is no equivalent .msa property - why not?\r\n return ME.Config.remAcc &&\r\n canLeverageRememberedAccounts(this, accountType) &&\r\n isStringOrFunction(this.config.msa?.rememberedAccountsUrl); // ME.Config.msa - //TODO: there is a ME.Config.aad, but why not .msa?\r\n }\r\n\r\n assertNever(authOperation, `Operation \"${authOperation}\" was unhandled.`);\r\n }\r\n\r\n public signIn(args: ISignInArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signInTo(args: ISignInToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromApp(args: ISignOutFromAppArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutFromIdp', args.account.type)) {\r\n return this.msaAccountsProvider.signOutFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutFromIdp is not supported'));\r\n }\r\n\r\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutAndForgetFromIdp', args.account.type)) {\r\n return this.msaAccountsProvider.signOutAndForgetFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\r\n }\r\n\r\n public switch(args: ISwitchArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public switchTo(args: ISwitchToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public getRememberedAccounts(): Promise {\r\n if (this.isOperationSupported('getRememberedAccounts', AccountType.MSA)) {\r\n return this.msaAccountsProvider.getRememberedAccounts();\r\n }\r\n\r\n return Promise.reject(createError('getRememberedAccounts is not supported'));\r\n }\r\n}\r\n","import { IWebAadOnlyConfig, SignInExperienceType, AccountType, IAccount } from '@mecontrol/public-api';\r\nimport {\r\n IAuthOperations,\r\n IAuthProvider,\r\n IAuthNavigationProvider,\r\n ISignInArgs,\r\n ISignInToArgs,\r\n ISignOutFromAppArgs,\r\n ISignOutFromIdpArgs,\r\n ISignOutAndForgetFromIdpArgs,\r\n ISwitchArgs,\r\n ISwitchToArgs,\r\n} from '@mecontrol/common';\r\nimport { Promise, ME, assertNever, createError } from '@mecontrol/web-inline';\r\nimport { IRememberedAccountsProvider, createAadAccountsProvider } from './webAccountProviders';\r\nimport { WebAuthNavProvider } from './navProviders';\r\nimport { isStringOrFunction } from '../../../utilities';\r\nimport { canLeverageRememberedAccounts } from './operationHelpers';\r\n\r\nexport function createWebAadOnlyAuthProvider(config: IWebAadOnlyConfig): IAuthProvider {\r\n return new WebAadOnlyProvider(config);\r\n}\r\n\r\nclass WebAadOnlyProvider implements IAuthProvider {\r\n private aadAccountsProvider: IRememberedAccountsProvider;\r\n\r\n public navProvider: IAuthNavigationProvider;\r\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Aad;\r\n\r\n constructor(private config: IWebAadOnlyConfig) {\r\n this.navProvider = new WebAuthNavProvider(this.config);\r\n this.aadAccountsProvider = createAadAccountsProvider(this.config.aad);\r\n }\r\n\r\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\r\n if (accountType !== AccountType.AAD) {\r\n return false;\r\n }\r\n\r\n switch (authOperation) {\r\n case \"signIn\":\r\n return isStringOrFunction(this.config.appSignInUrl);\r\n case \"signInTo\":\r\n return isStringOrFunction(this.config.appSignInToUrl);\r\n case \"switch\":\r\n return isStringOrFunction(this.config.appSwitchUrl);\r\n case \"switchTo\":\r\n return isStringOrFunction(this.config.appSwitchToUrl);\r\n case \"signOutFromApp\":\r\n return isStringOrFunction(this.config.appSignOutUrl);\r\n case \"signOutFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutUrl);\r\n case \"signOutAndForgetFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutAndForgetUrl);\r\n case \"getRememberedAccounts\":\r\n return ME.Config.aad\r\n && ME.Config.remAcc\r\n && canLeverageRememberedAccounts(this, accountType)\r\n && isStringOrFunction(this.config.aad?.rememberedAccountsUrl);\r\n }\r\n\r\n assertNever(authOperation, `Operation \"${authOperation}\" was unhandled.`);\r\n }\r\n\r\n public signIn(args: ISignInArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signInTo(args: ISignInToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromApp(args: ISignOutFromAppArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutFromIdp', args.account.type)) {\r\n return this.aadAccountsProvider.signOutFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutFromIdp is not supported'));\r\n }\r\n\r\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutAndForgetFromIdp', args.account.type)) {\r\n return this.aadAccountsProvider.signOutAndForgetFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\r\n }\r\n\r\n public switch(args: ISwitchArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public switchTo(args: ISwitchToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public getRememberedAccounts(): Promise {\r\n if (this.isOperationSupported('getRememberedAccounts', AccountType.AAD)) {\r\n return this.aadAccountsProvider.getRememberedAccounts()\r\n .then(accList => accList.filter(acc => acc.type !== AccountType.MSA_FED)); // this provider doesn't support MSAFed accounts\r\n }\r\n\r\n return Promise.reject(createError('getRememberedAccounts is not supported'));\r\n }\r\n\r\n}\r\n","import { IWebAadWithMsaFedConfig, SignInExperienceType, AccountType, IAccount } from '@mecontrol/public-api';\r\nimport {\r\n IAuthOperations,\r\n IAuthProvider,\r\n IAuthNavigationProvider,\r\n ISignInArgs,\r\n ISignInToArgs,\r\n ISignOutFromAppArgs,\r\n ISignOutFromIdpArgs,\r\n ISignOutAndForgetFromIdpArgs,\r\n ISwitchArgs,\r\n ISwitchToArgs,\r\n} from '@mecontrol/common';\r\nimport { Promise, ME, assertNever, createError } from '@mecontrol/web-inline';\r\nimport { IRememberedAccountsProvider, createAadAccountsProvider } from './webAccountProviders';\r\nimport { isStringOrFunction } from '../../../utilities';\r\nimport { canLeverageRememberedAccounts } from './operationHelpers';\r\nimport { WebAuthNavProvider } from './navProviders';\r\n\r\nexport function createWebAadWithMsaFedAuthProvider(config: IWebAadWithMsaFedConfig): IAuthProvider {\r\n return new WebAadWithMsaFedProvider(config);\r\n}\r\n\r\nclass WebAadWithMsaFedProvider implements IAuthProvider {\r\n private webAadIdpProvider: IRememberedAccountsProvider;\r\n\r\n public navProvider: IAuthNavigationProvider;\r\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Aad;\r\n\r\n constructor(private config: IWebAadWithMsaFedConfig) {\r\n this.navProvider = new WebAuthNavProvider(this.config);\r\n this.webAadIdpProvider = createAadAccountsProvider(this.config.aad);\r\n }\r\n\r\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\r\n if (accountType !== AccountType.AAD && accountType !== AccountType.MSA_FED) {\r\n return false;\r\n }\r\n\r\n switch (authOperation) {\r\n case \"signIn\":\r\n return isStringOrFunction(this.config.appSignInUrl);\r\n case \"signInTo\":\r\n return isStringOrFunction(this.config.appSignInToUrl);\r\n case \"switch\":\r\n return isStringOrFunction(this.config.appSwitchUrl);\r\n case \"switchTo\":\r\n return isStringOrFunction(this.config.appSwitchToUrl);\r\n case \"signOutFromApp\":\r\n return isStringOrFunction(this.config.appSignOutUrl);\r\n case \"signOutFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutUrl);\r\n case \"signOutAndForgetFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutAndForgetUrl);\r\n case \"getRememberedAccounts\":\r\n return ME.Config.aad\r\n && ME.Config.remAcc\r\n && canLeverageRememberedAccounts(this, accountType)\r\n && isStringOrFunction(this.config.aad?.rememberedAccountsUrl);\r\n }\r\n\r\n assertNever(authOperation, `Operation \"${authOperation}\" was unhandled.`);\r\n }\r\n\r\n public signIn(args: ISignInArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signInTo(args: ISignInToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromApp(args: ISignOutFromAppArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutFromIdp', args.account.type)) {\r\n return this.webAadIdpProvider.signOutFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutFromIdp is not supported'));\r\n }\r\n\r\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutAndForgetFromIdp', args.account.type)) {\r\n return this.webAadIdpProvider.signOutAndForgetFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\r\n }\r\n\r\n public switch(args: ISwitchArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public switchTo(args: ISwitchToArgs): void {\r\n // Do nothing\r\n }\r\n\r\n public getRememberedAccounts(): Promise {\r\n if (this.isOperationSupported('getRememberedAccounts', AccountType.AAD)) {\r\n return this.webAadIdpProvider.getRememberedAccounts();\r\n }\r\n\r\n return Promise.reject(createError('getRememberedAccounts is not supported'));\r\n }\r\n}\r\n","import Promise from 'promise-polyfill';\r\nimport {\r\n IAccount,\r\n IAdalJsConfig,\r\n SignInExperienceType,\r\n AccountType,\r\n AuthProviderConfigType\r\n} from '@mecontrol/public-api';\r\nimport {\r\n IAuthProvider,\r\n IAuthOperations,\r\n ISignInArgs, ISignInToArgs,\r\n ISignOutFromAppArgs, ISignOutFromIdpArgs, ISignOutAndForgetFromIdpArgs,\r\n ISwitchArgs, ISwitchToArgs\r\n} from '@mecontrol/common';\r\nimport { ME, createError } from '@mecontrol/web-inline';\r\nimport { isStringOrFunction } from '../../../utilities';\r\nimport { IRememberedAccountsProvider, createAadAccountsProvider } from './webAccountProviders';\r\nimport { canLeverageRememberedAccounts } from './operationHelpers';\r\n\r\nexport function createAdalJsAuthProvider(config: IAdalJsConfig): IAuthProvider {\r\n return new AdalJsProvider(config);\r\n}\r\n\r\nclass AdalJsProvider implements IAuthProvider {\r\n\r\n public navProvider: undefined;\r\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Aad;\r\n private webAadIdpProvider: IRememberedAccountsProvider;\r\n\r\n constructor(private config: IAdalJsConfig) {\r\n this.webAadIdpProvider = createAadAccountsProvider(config.aad);\r\n }\r\n\r\n private supportsMsaFed(): boolean {\r\n return this.config.type === AuthProviderConfigType.AdalJsWithMsaFed;\r\n }\r\n\r\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\r\n if (accountType !== AccountType.AAD && accountType !== AccountType.MSA_FED) {\r\n return false;\r\n }\r\n\r\n switch (authOperation) {\r\n case \"signOutFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutUrl);\r\n\r\n case \"signOutAndForgetFromIdp\":\r\n return isStringOrFunction(this.config.aad?.signOutAndForgetUrl);\r\n\r\n case \"getRememberedAccounts\":\r\n return ME.Config.aad\r\n && ME.Config.remAcc\r\n && canLeverageRememberedAccounts(this, AccountType.AAD)\r\n && isStringOrFunction(this.config.aad?.rememberedAccountsUrl);\r\n\r\n // signIn, signInTo, switch, switchTo, signOutFromApp\r\n default:\r\n return typeof this.config[authOperation] === 'function';\r\n }\r\n }\r\n\r\n public signIn(args: ISignInArgs): void {\r\n this.config.signIn(args);\r\n }\r\n\r\n public signInTo(args: ISignInToArgs): void {\r\n if (this.isOperationSupported('signInTo', args.nextAccount.type)) {\r\n this.config.signInTo!(args);\r\n } else {\r\n throw createError('signInTo is not supported');\r\n }\r\n }\r\n\r\n public signOutFromApp(args: ISignOutFromAppArgs): void {\r\n this.config.signOutFromApp(args);\r\n }\r\n\r\n public switch(args: ISwitchArgs): void {\r\n if (this.isOperationSupported('switch', AccountType.AAD)) {\r\n this.config.switch!(args);\r\n } else {\r\n throw createError('switch is not supported');\r\n }\r\n }\r\n\r\n public switchTo(args: ISwitchToArgs): void {\r\n if (this.isOperationSupported('switchTo', args.nextAccount.type)) {\r\n this.config.switchTo!(args);\r\n } else {\r\n throw createError('switchTo is not supported');\r\n } \r\n }\r\n\r\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutFromIdp', args.account.type)) {\r\n return this.webAadIdpProvider.signOutFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutFromIdp is not supported'));\r\n }\r\n\r\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\r\n if (this.isOperationSupported('signOutAndForgetFromIdp', args.account.type)) {\r\n return this.webAadIdpProvider.signOutAndForgetFromIdp(args);\r\n }\r\n\r\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\r\n }\r\n\r\n public getRememberedAccounts(): Promise {\r\n if (this.isOperationSupported('getRememberedAccounts', AccountType.AAD)) {\r\n let rememberedAccounts = this.webAadIdpProvider.getRememberedAccounts();\r\n\r\n // Filter out MSA_FED accounts if they are not supported by the partner\r\n if (this.supportsMsaFed()) {\r\n return rememberedAccounts;\r\n }\r\n else {\r\n return rememberedAccounts\r\n .then(accounts => accounts.filter(acc => acc.type !== AccountType.MSA_FED));\r\n }\r\n }\r\n\r\n return Promise.reject(createError('getRememberedAccounts is not supported'));\r\n }\r\n}\r\n","import { Promise, logTelemetryEvent, id } from '@mecontrol/web-inline';\nimport {\n IAccount, SignInExperienceType, AccountType,\n IV1BackCompatConfig\n} from '@mecontrol/public-api';\nimport {\n IAuthOperations,\n IAuthProvider,\n IAuthNavigationProvider,\n ISignInArgs,\n ISignInToArgs,\n ISignOutFromAppArgs,\n ISignOutFromIdpArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutAndForgetFromIdpArgs,\n IRPData,\n IDP,\n ErrorSeverity\n} from '@mecontrol/common';\nimport {\n createMsaAccountsProvider,\n createAadAccountsProvider,\n IRememberedAccountsProvider\n} from './webAccountProviders';\nimport { isFunction, setQueryParams, format, isNonEmptyString, hasQueryParam, getHostname } from '../../../utilities';\nimport {\n createSignInRequest,\n createSignInToRequest,\n createSignOutRequest,\n createSignOutFromIdpRequest,\n createSignOutAndForgetRequest\n} from './urlHelpers';\nexport function createV1BackCompatAuthProvider(config: IV1BackCompatConfig): IAuthProvider {\n return new V1AuthProvider(config);\n}\n\nconst forgetUserUrlTemplate: string = \"https://{0}/forgetuser\";\n\nclass V1AuthProvider implements IAuthProvider {\n private msaAccountsProvider?: IRememberedAccountsProvider;\n private aadAccountsProvider?: IRememberedAccountsProvider;\n\n public navProvider: IAuthNavigationProvider;\n\n private rpData: IRPData;\n\n //TODO: I really don't know how this is used yet - it seems like it's always Default in all of the providers\n public supportedSignInAccountTypes!: SignInExperienceType;\n\n constructor(private config: IV1BackCompatConfig) {\n // save away the V1 config data - we'll need this to make decisions on the fly\n this.rpData = config.rpData;\n\n // Determining the supported sign in experiences is based on the following logic:\n //\n // +---+--------------------------+--------------------------+----------------------------+-----------------------------------------------------+-------------------------------------+\n // | # | rpData.msaInfo is usable | rpData.aadInfo is usable | rpData.aadInfo.blockMsaFed | SignInExperienceType | Notes |\n // +---+--------------------------+--------------------------+----------------------------+-----------------------------------------------------+-------------------------------------+\n // | 1 | Yes | No | N/A | SignInExperienceType.Msa | |\n // | 2 | Yes | Yes | Yes | SignInExperienceType.Msa | SignInExperienceType.Aad | |\n // | 3 | Yes | Yes | No | SignInExperienceType.Converged | |\n // | 4 | No | No | N/A | Error - no IDP defined. | |\n // | 5 | No | Yes | Yes | SignInExperienceType.Aad | |\n // | 6 | No | Yes | No | SignInExperienceType.Converged | Get SignInUrl from AAD rpData |\n // +---+--------------------------+--------------------------+----------------------------+-----------------------------------------------------+-------------------------------------+\n\n // Why use the \".msaInfo is usable\" concept instead of just .msaInfo existence?\n // Why use the \".aadInfo is usable\" concept instead of just .aadInfo existence?\n // I'll tell you why, my friend! - because the configs our partners send us are often garbage. There's more than one example of\n // the .msaInfo object existing but the signInUrl not - or being set to an empty string...\n // In fact, even AMC (!) sends an aadInfo object with signOutUrl set to \"\" and blockMsaFed = true... but doesn't support AAD. :/\n // On the flip side, OFFICE sends an msaInfo object with empty strings for both signInUrl and signOutUrl...\n\n // this might seem a little winded, but is written this way to be easy to map against the above truth table.\n // It also makes it much easier for us to tweak the response if we decide the assumptions above aren't correct.\n if (isNonEmptyString(this.rpData.msaInfo.signInUrl)) {\n // cases #1,2,3\n\n if (isNonEmptyString(this.rpData.aadInfo.signInUrl)) {\n // cases #2,3\n\n // tslint:disable-next-line:prefer-conditional-expression\n if (!!this.rpData.aadInfo.blockMsaFed) {\n // case #2\n this.supportedSignInAccountTypes = SignInExperienceType.Converged;\n } else {\n // case #3\n this.supportedSignInAccountTypes = SignInExperienceType.Converged;\n }\n } else {\n // case #1\n this.supportedSignInAccountTypes = SignInExperienceType.Msa;\n }\n } else {\n // cases #4,5,6\n\n if (isNonEmptyString(this.rpData.aadInfo.signInUrl)) {\n // cases #5,6\n\n // tslint:disable-next-line:prefer-conditional-expression\n if (!!this.rpData.aadInfo.blockMsaFed) {\n // case #5\n this.supportedSignInAccountTypes = SignInExperienceType.Aad;\n } else {\n // case #6\n this.supportedSignInAccountTypes = SignInExperienceType.Converged;\n }\n } else {\n // case #4\n // If there is neither signInUrls for both aadInfo and msaInfo, attempt to construct a valid signInUrl from location.href\n // Also log a telemetry event to compile a list of affected partners with this issue.\n const signInUrl = format(\"https://login.microsoftonline.com/common/oauth2/authorize?response_type=id_token&client_id={0}&scope=openid&nonce={1}&response_mode=form_post&redirect_uri={2}\", this.rpData.aadInfo.appId as string, id, location.href);\n this.rpData.preferredIdp == IDP.AAD ? this.rpData.aadInfo.signInUrl = signInUrl : this.rpData.msaInfo.signInUrl = signInUrl;\n const warningMessage = `WARNING: Unable to find signInUrl from the rpData object provided. Attempting to construct redirect uri from location.href!`;\n logTelemetryEvent({\n eventType: \"ClientError\",\n name: \"Undefined signInUrl\",\n type: \"UndefinedAuthState\",\n details: warningMessage,\n severity: ErrorSeverity.Warning,\n displayed: false\n });\n // tslint:disable-next-line:no-console\n console.warn(warningMessage);\n\n }\n }\n\n // setup the Url provider...\n this.navProvider = new V1BackCompatAuthNavProvider(this.config);\n\n // Figure out and boot up MSA, AAD or both providers\n // For now, we'll use signInUrl as a marker that we should\n // support a particular IDP. This may not prove to be sufficient\n // but it's all we have for now.\n if (isNonEmptyString(config.rpData.msaInfo.signInUrl) && this.rpData.msaInfo.meUrl) {\n this.msaAccountsProvider = createMsaAccountsProvider(\n {\n signOutAndForgetUrl: (args: ISignOutAndForgetFromIdpArgs): string => {\n return this.rpData.msaInfo.signOutUrl;\n },\n rememberedAccountsUrl: this.rpData.msaInfo.meUrl as string\n },\n );\n }\n\n if (isNonEmptyString(config.rpData.aadInfo.signInUrl) && this.rpData.aadInfo.meUrl) {\n this.aadAccountsProvider = createAadAccountsProvider({\n signOutUrl: this.rpData.aadInfo.signOutUrl,\n signOutAndForgetUrl: this.rpData.aadInfo.signOutUrl,\n rememberedAccountsUrl: this.rpData.aadInfo.meUrl as string,\n forgetUrl: format(forgetUserUrlTemplate, getHostname(this.rpData.aadInfo.meUrl as string))\n });\n }\n }\n\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\n if (accountType == AccountType.AAD || accountType == AccountType.MSA_FED) {\n switch (authOperation) {\n case \"signIn\":\n return isNonEmptyString(this.rpData.aadInfo.signInUrl);\n case \"switch\":\n // ensure expected URL and check for query params that were expected in V1. These checks came from the V1 codebase to keep consitant.\n return this.rpData.aadInfo.allowNonAadUrls\n || (hasQueryParam(this.rpData.aadInfo.signInUrl, 'client_id')\n && hasQueryParam(this.rpData.aadInfo.signInUrl, 'redirect_uri'));\n case \"signOutFromApp\":\n return isNonEmptyString(this.rpData.aadInfo.signOutUrl);\n case \"signInTo\":\n case \"switchTo\":\n case \"signOutFromIdp\":\n case \"signOutAndForgetFromIdp\":\n case \"getRememberedAccounts\":\n // call out all actions to ensure we ddin't miss anything. These actions were never supported on V1 for AAD.\n return false;\n default:\n return false;\n }\n } else if (accountType == AccountType.MSA) {\n switch (authOperation) {\n case \"signIn\":\n return isNonEmptyString(this.rpData.msaInfo.signInUrl);\n case \"switch\":\n // ensure expected URL and check for query params that were expected in V1. These checks came from the V1 codebase to keep consitant.\n return isLoginLiveUrl(this.rpData.msaInfo.signInUrl)\n && hasQueryParam(this.rpData.msaInfo.signOutUrl, 'ru')\n && hasQueryParam(this.rpData.msaInfo.signInUrl, 'wreply');\n case \"signInTo\":\n return isLoginLiveUrl(this.rpData.msaInfo.signInUrl);\n case \"signOutFromApp\":\n return isNonEmptyString(this.rpData.msaInfo.signOutUrl);\n case \"signOutAndForgetFromIdp\":\n return isLoginLiveUrl(this.rpData.msaInfo.signOutUrl)\n && isLoginLiveUrl(this.rpData.msaInfo.meUrl);\n case \"getRememberedAccounts\":\n return isLoginLiveUrl(this.rpData.msaInfo.meUrl);\n case \"switchTo\":\n case \"signOutFromIdp\":\n // call out the actions that are NOT supported JUST to ensure we covered everything. These actions were either not supported in V1 or MSA cannot perform them.\n return false;\n default:\n return false;\n }\n }\n\n return false;\n }\n\n public signIn(args: ISignInArgs): void {\n // Do nothing\n }\n\n public signInTo(args: ISignInToArgs): void {\n // Do nothing\n }\n\n public signOutFromApp(args: ISignOutFromAppArgs): void {\n // Do nothing\n }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n switch (args.account.type) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n if (this.aadAccountsProvider) {\n return this.aadAccountsProvider.signOutFromIdp(args);\n } else {\n return Promise.reject(\"SignOut was requested for an account of type AAD or MSA_FED but V1 config didn't provide any usable supporting details in the 'rpData' property for AAD or MSA_FED accounts.\");\n }\n\n case AccountType.MSA:\n if (this.msaAccountsProvider) {\n return this.msaAccountsProvider.signOutFromIdp(args);\n } else {\n return Promise.reject(\"SignOut was requested for an account of type MSA but V1 config didn't provide any usable supporting details in the 'rpData' property for MSA accounts.\");\n }\n }\n }\n\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\n switch (args.account.type) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n if (this.aadAccountsProvider) {\n return this.aadAccountsProvider.signOutAndForgetFromIdp(args);\n } else {\n return Promise.reject(\"SignOutAndForgetFromIdp was requested for an account of type AAD or MSA_FED but V1 config didn't provide any usable supporting details in the 'rpData' property for AAD or MSA_FED accounts.\");\n }\n case AccountType.MSA:\n if (this.msaAccountsProvider) {\n return this.msaAccountsProvider.signOutAndForgetFromIdp(args);\n } else {\n return Promise.reject(\"SignOutAndForgetFromIdp was requested for an account of type MSA but V1 config didn't provide any usable supporting details in the 'rpData' property for MSA accounts.\");\n }\n }\n }\n\n public switch(args: ISwitchArgs): void {\n // Do nothing\n }\n\n public switchTo(args: ISwitchToArgs): void {\n // Do nothing\n }\n\n public getRememberedAccounts(): Promise {\n return Promise.all([\n this.msaAccountsProvider ? this.msaAccountsProvider.getRememberedAccounts() : [],\n this.aadAccountsProvider ? this.aadAccountsProvider.getRememberedAccounts() : [],\n ]).then(accountLists => accountLists.reduce((acc, cur) => acc.concat(cur), [])); // Flatten list\n }\n}\n\nclass V1BackCompatAuthNavProvider implements IAuthNavigationProvider {\n constructor(\n private config: IV1BackCompatConfig\n ) { }\n\n // V1 notes:\n // -----------------------------\n // signInUrl = appendContextParam(_authStateModel.getSignInUrl(undefined, this.mobileState() === MobileState.Mobile));\n // -----------------------------\n // getSignInUrl(idp?: V1AccountType, isMobile?: boolean): string {\n // idp = idp ||\n // (hasActiveUser() && _activeUserData && _activeUserData.idp) ||\n // (_rpData.preferredIdp === IDP.AAD ? V1AccountType.AAD : V1AccountType.MSA) ||\n // V1AccountType.MSA;\n // let isAad: boolean = idp === V1AccountType.AAD || idp === V1AccountType.MSA_FED;\n // let idpInfo = isAad ? _rpData.aadInfo : _rpData.msaInfo;\n // let signInUrl = idpInfo.signInUrl;\n // signInUrl = isAad ? getAadSignInUrl(idpInfo as IAADInfo) : getMsaSignInUrl(idpInfo, isMobile);\n // return signInUrl;\n // }\n\n public getSignInUrl(args: ISignInArgs): string | undefined {\n switch (args.signInType) {\n case SignInExperienceType.Msa:\n if (isNonEmptyString(this.config.rpData.msaInfo.signInUrl)) {\n let url: string = this.config.rpData.msaInfo.signInUrl;\n if (isFunction(this.config.rpData.msaInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.msaInfo.generateSignInReturnUrl() });\n }\n\n return createSignInRequest(url, args);\n } else {\n throw new Error(\"Got signInUrl request for MSA, but we don't have usable MSA info from V1 config.\");\n }\n case SignInExperienceType.Aad:\n if (isNonEmptyString(this.config.rpData.aadInfo.signInUrl)) {\n\n let url: string = this.config.rpData.aadInfo.signInUrl;\n if (isFunction(this.config.rpData.aadInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.aadInfo.generateSignInReturnUrl() });\n }\n if (this.config.rpData.aadInfo.blockMsaFed) {\n url = setQueryParams(url, { msafed: '0' });\n }\n return createSignInRequest(url, args);\n } else {\n throw new Error(\"Got signInUrl request for AAD, but we don't have usable AAD info from V1 config.\");\n }\n case SignInExperienceType.Converged:\n if (this.config.rpData.preferredIdp === IDP.AAD && isNonEmptyString(this.config.rpData.aadInfo.signInUrl)) {\n let url: string = this.config.rpData.aadInfo.signInUrl;\n if (isFunction(this.config.rpData.aadInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.aadInfo.generateSignInReturnUrl() });\n }\n if (this.config.rpData.aadInfo.blockMsaFed) {\n url = setQueryParams(url, { msafed: '0' });\n }\n return createSignInRequest(url, args);\n } else if (isNonEmptyString(this.config.rpData.msaInfo.signInUrl)) {\n // in a pinch, try to use the MSA endpoint (yes, there is terrible config data that does this, and V1 does gymnastics)\n let url: string = this.config.rpData.msaInfo.signInUrl;\n if (isFunction(this.config.rpData.msaInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.msaInfo.generateSignInReturnUrl() });\n }\n\n return createSignInRequest(url, args);\n } else {\n throw new Error(\"Got signInUrl request for converged experience, but we don't have usable AAD info (or MSA info either) from V1 config.\");\n }\n }\n }\n\n public getSignInToUrl(args: ISignInToArgs): string | undefined {\n switch (args.nextAccount.type) {\n case AccountType.MSA:\n if (isNonEmptyString(this.config.rpData.msaInfo.signInUrl)) {\n let url: string = this.config.rpData.msaInfo.signInUrl;\n if (isFunction(this.config.rpData.msaInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.msaInfo.generateSignInReturnUrl() });\n }\n if (isLoginLiveUrl(url)) {\n return setQueryParams(url, { username: args.nextAccount.memberName });\n }\n return createSignInToRequest(url, args);\n } else {\n throw new Error(\"Got signInToUrl request for MSA, but we don't have usable MSA info from V1 config.\");\n }\n case AccountType.AAD:\n case AccountType.MSA_FED:\n if (isNonEmptyString(this.config.rpData.aadInfo.signInUrl)) {\n\n let url: string = this.config.rpData.aadInfo.signInUrl;\n if (isFunction(this.config.rpData.aadInfo.generateSignInReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.aadInfo.generateSignInReturnUrl() });\n }\n if (this.config.rpData.aadInfo.blockMsaFed) {\n url = setQueryParams(url, { msafed: '0' });\n }\n return createSignInToRequest(url, args);\n } else {\n throw new Error(\"Got signInToUrl request for AAD, but we don't have usable AAD info from V1 config.\");\n }\n }\n }\n\n public getSignOutFromAppUrl(args: ISignOutFromAppArgs): string | undefined {\n switch (args.currentAccount.type) {\n case AccountType.MSA:\n if (isNonEmptyString(this.config.rpData.msaInfo.signOutUrl)) {\n let url: string = this.config.rpData.msaInfo.signOutUrl;\n if (isFunction(this.config.rpData.msaInfo.generateSignOutReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.msaInfo.generateSignOutReturnUrl() });\n }\n return createSignOutRequest(url, args);\n } else {\n throw new Error(\"Got signOutFromAppUrl request for MSA, but we don't have usable MSA info from V1 config.\");\n }\n case AccountType.AAD:\n case AccountType.MSA_FED:\n if (isNonEmptyString(this.config.rpData.aadInfo.signOutUrl)) {\n\n let url: string = this.config.rpData.aadInfo.signOutUrl;\n if (isFunction(this.config.rpData.aadInfo.generateSignOutReturnUrl)) {\n url = setQueryParams(url, { wreply: this.config.rpData.aadInfo.generateSignOutReturnUrl() });\n }\n return createSignOutRequest(url, args);\n } else {\n throw new Error(\"Got signOutFromAppUrl request for AAD, but we don't have usable AAD info from V1 config.\");\n }\n }\n }\n\n public getSignOutFromIdpUrl(args: ISignOutFromIdpArgs): string | undefined {\n switch (args.account.type) {\n case AccountType.MSA:\n case AccountType.MSA_FED:\n throw new Error(\"Method not supported for MSA and MSA_FED Accounts.\");\n case AccountType.AAD:\n if (isNonEmptyString(this.config.rpData.aadInfo.signOutUrl)) {\n return createSignOutFromIdpRequest(this.config.rpData.aadInfo.signOutUrl, args);\n } else {\n throw new Error(\"Got signOutFromAppUrl request for AAD, but we don't have usable AAD info from V1 config.\");\n }\n }\n }\n\n public getSignOutAndForgetFromIdpUrl(args: ISignOutAndForgetFromIdpArgs): string | undefined {\n switch (args.account.type) {\n case AccountType.MSA:\n if (isNonEmptyString(this.config.rpData.msaInfo.signOutUrl)) {\n return createSignOutAndForgetRequest(this.config.rpData.msaInfo.signOutUrl, args);\n } else {\n throw new Error(\"Got signOutFromAppUrl request for MSA, but we don't have usable AAD info from V1 config.\");\n }\n case AccountType.AAD:\n case AccountType.MSA_FED:\n if (isNonEmptyString(this.config.rpData.aadInfo.signOutUrl)) {\n return createSignOutFromIdpRequest(this.config.rpData.aadInfo.signOutUrl, args);\n } else {\n throw new Error(\"Got signOutAndForgetFromAppUrl request for AAD, but we don't have usable AAD info from V1 config.\");\n }\n }\n }\n\n public getSwitchUrl(args: ISwitchArgs): string | undefined {\n return this.getSwitchOrSwitchToUrl(args, true);\n }\n\n public getSwitchToUrl(args: ISwitchToArgs): string | undefined {\n return this.getSwitchOrSwitchToUrl(args, false);\n }\n\n public getSwitchOrSwitchToUrl(args: ISwitchArgs | ISwitchToArgs, isJustSwitch: boolean): string | undefined {\n let signInType: SignInExperienceType = (args as ISwitchArgs).signInType || this.config.rpData.preferredIdp === IDP.MSA ? SignInExperienceType.Msa : SignInExperienceType.Aad;\n\n // Get the sign in to URL...\n let signInUrl: string | undefined =\n isJustSwitch ?\n this.getSignInUrl({ signInType }) :\n this.getSignInToUrl({ nextAccount: (args as ISwitchToArgs).nextAccount });\n\n // if we're currently in an AAD account, then we simply go to the sign in url...\n if (args.currentAccount.type === AccountType.AAD) {\n return setQueryParams(signInUrl!, { prompt: 'select_account' });\n } else {\n // so, we know that we're currently signed in as an MSA (or MSA_FED)\n // IF the SignInUrl goes to \"login.live.com\", then we need to sign out first...\n if (isLoginLiveUrl(signInUrl)) {\n let signOutUrl: string | undefined = this.getSignOutFromAppUrl({ currentAccount: args.currentAccount } as ISignOutFromAppArgs);\n\n // try to figure out where we're headed since the way forwarding works is different per IDP...\n if (signOutUrl) {\n // tslint:disable-next-line:prefer-conditional-expression\n if (this.config.rpData.preferredIdp === IDP.AAD) {\n // try to get to AAD after this...\n return setQueryParams(signOutUrl, { wreply: signInUrl });\n } else {\n // try to get to MSA after this...\n return setQueryParams(signOutUrl, { ru: signInUrl, lru: signInUrl });\n }\n } else {\n // no good answer to \"what if no signOutUrl\", but we should at least try to get to the sign in, I guess...\n return signInUrl;\n }\n } else {\n // just return the signInUrl as it appears that the partner is trying to handle this themselves...\n return signInUrl;\n }\n }\n }\n}\n\n/**\n * Tests if the given URL is valid and is hosted on login.live.com.\n * @param url The url string to validate.\n */\nfunction isLoginLiveUrl(url: string | undefined): boolean {\n if (!url) {\n return false;\n }\n\n return getHostname(url).toLowerCase().indexOf('login.live.com') > -1;\n}\n","import Promise from 'promise-polyfill';\nimport {\n IAccount,\n SignInExperienceType,\n AccountType,\n IMsalJsConfig,\n AuthProviderConfigType\n} from '@mecontrol/public-api';\nimport {\n IAuthProvider,\n IAuthOperations,\n ISignInArgs, ISignInToArgs,\n ISignOutFromAppArgs, ISignOutFromIdpArgs, ISignOutAndForgetFromIdpArgs,\n ISwitchArgs, ISwitchToArgs\n} from '@mecontrol/common';\nimport { ME, createError } from '@mecontrol/web-inline';\nimport { isStringOrFunction } from '../../../utilities';\nimport { IRememberedAccountsProvider, createAadAccountsProvider } from './webAccountProviders';\nimport { canLeverageRememberedAccounts } from './operationHelpers';\n\nexport function createMsalJsAuthProvider(config: IMsalJsConfig): IAuthProvider {\n return new MsalJsProvider(config);\n}\n\nclass MsalJsProvider implements IAuthProvider {\n\n public navProvider: undefined;\n public supportedSignInAccountTypes: SignInExperienceType = SignInExperienceType.Aad;\n private webAadIdpProvider: IRememberedAccountsProvider;\n\n constructor(private config: IMsalJsConfig) {\n this.webAadIdpProvider = createAadAccountsProvider(config.aad);\n }\n\n private supportsMsa(): boolean {\n return this.config.type === AuthProviderConfigType.MsalJsWithMsa;\n }\n\n public isOperationSupported(authOperation: keyof IAuthOperations, accountType: AccountType): boolean {\n switch (authOperation) {\n case \"signOutFromIdp\":\n return isStringOrFunction(this.config.aad?.signOutUrl);\n\n case \"signOutAndForgetFromIdp\":\n return isStringOrFunction(this.config.aad?.signOutAndForgetUrl);\n\n case \"getRememberedAccounts\":\n return ME.Config.aad\n && ME.Config.remAcc\n && canLeverageRememberedAccounts(this, AccountType.AAD)\n && isStringOrFunction(this.config.aad?.rememberedAccountsUrl);\n\n // signIn, signInTo, switch, switchTo, signOutFromApp\n default:\n return typeof this.config[authOperation] === 'function';\n }\n }\n\n public signIn(args: ISignInArgs): void {\n this.config.signIn(args);\n }\n\n public signInTo(args: ISignInToArgs): void {\n if (this.isOperationSupported('signInTo', args.nextAccount.type)) {\n this.config.signInTo!(args);\n } else {\n throw createError('signInTo is not supported');\n }\n }\n\n public signOutFromApp(args: ISignOutFromAppArgs): void {\n this.config.signOutFromApp(args);\n }\n\n public switch(args: ISwitchArgs): void {\n if (this.isOperationSupported('switch', AccountType.AAD)) {\n this.config.switch!(args);\n } else {\n throw createError('switch is not supported');\n }\n }\n\n public switchTo(args: ISwitchToArgs): void {\n if (this.isOperationSupported('switchTo', args.nextAccount.type)) {\n this.config.switchTo!(args);\n } else {\n throw createError('switchTo is not supported');\n }\n }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n if (this.isOperationSupported('signOutFromIdp', args.account.type)) {\n return this.webAadIdpProvider.signOutFromIdp(args);\n }\n\n return Promise.reject(createError('signOutFromIdp is not supported'));\n }\n\n public signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs): Promise {\n if (this.isOperationSupported('signOutAndForgetFromIdp', args.account.type)) {\n return this.webAadIdpProvider.signOutAndForgetFromIdp(args);\n }\n\n return Promise.reject(createError('signOutAndForgetFromIdp is not supported'));\n }\n\n public getRememberedAccounts(): Promise {\n if (this.isOperationSupported('getRememberedAccounts', AccountType.AAD)) {\n // Filter out MSA_FED accounts if MSA is supported\n if (this.supportsMsa()) {\n return this.webAadIdpProvider.getRememberedAccounts();\n } else {\n // Filter out both MSA_FED and MSA\n return this.webAadIdpProvider.getRememberedAccounts()\n .then(accounts => accounts.filter(acc => acc.type === AccountType.AAD));\n }\n }\n return Promise.reject(createError('getRememberedAccounts is not supported'));\n }\n}\n","import {\n IAccount,\n SignInExperienceType,\n AccountType,\n IWebMsaWithAadProxyConfig\n} from '@mecontrol/public-api';\nimport {\n IAuthOperations,\n IAuthProvider,\n IAuthNavigationProvider,\n ISignInArgs,\n ISignInToArgs,\n ISignOutFromAppArgs,\n ISignOutFromIdpArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutAndForgetFromIdpArgs\n} from '@mecontrol/common';\nimport {\n Promise,\n ME,\n assertNever,\n logTelemetryEvent,\n toJsonable,\n createError\n} from '@mecontrol/web-inline';\nimport {\n createMsaAccountsProvider,\n createAadAccountsProvider,\n IRememberedAccountsProvider\n} from './webAccountProviders';\nimport { isStringOrFunction } from '../../../utilities';\nimport { canLeverageRememberedAccounts } from './operationHelpers';\nimport { WebAuthNavProvider } from './navProviders';\n\nexport function createWebMsaWithAadProxyProvider(\n config: IWebMsaWithAadProxyConfig\n): IAuthProvider {\n return new WebMsaWithAadProxyProvider(config);\n}\n\nclass WebMsaWithAadProxyProvider implements IAuthProvider {\n private msaAccountsProvider: IRememberedAccountsProvider;\n private aadAccountsProvider: IRememberedAccountsProvider;\n\n public navProvider: IAuthNavigationProvider;\n\n //TODO: I really don't know how this is used yet - it seems like it's always Default in all of the providers\n public supportedSignInAccountTypes: SignInExperienceType =\n SignInExperienceType.Converged;\n\n constructor(private config: IWebMsaWithAadProxyConfig) {\n this.navProvider = new WebAuthNavProvider(this.config);\n this.msaAccountsProvider = createMsaAccountsProvider(this.config.msa, {\n proxyToOtherIdp: true\n });\n this.aadAccountsProvider = createAadAccountsProvider(this.config.aad);\n }\n\n public isOperationSupported(\n authOperation: keyof IAuthOperations,\n accountType: AccountType\n ): boolean {\n switch (authOperation) {\n case 'signIn':\n return isStringOrFunction(this.config.appSignInUrl);\n case 'signInTo':\n return isStringOrFunction(this.config.appSignInToUrl);\n case 'signOutFromApp':\n return isStringOrFunction(this.config.appSignOutUrl);\n case 'signOutFromIdp':\n return (\n (accountType === AccountType.AAD ||\n accountType === AccountType.MSA_FED) &&\n isStringOrFunction(this.config.aad?.signOutUrl)\n );\n case 'signOutAndForgetFromIdp':\n return (\n ((accountType === AccountType.AAD || accountType === AccountType.MSA_FED) &&\n isStringOrFunction(\n this.config.aad?.signOutAndForgetUrl\n )) ||\n (accountType === AccountType.MSA &&\n isStringOrFunction(\n this.config.msa?.signOutAndForgetUrl\n ))\n );\n case 'switch':\n return isStringOrFunction(this.config.appSwitchUrl);\n case 'switchTo':\n return isStringOrFunction(this.config.appSwitchToUrl);\n case 'getRememberedAccounts':\n return (\n ME.Config.remAcc &&\n canLeverageRememberedAccounts(this, accountType) &&\n isStringOrFunction(this.config.msa?.rememberedAccountsUrl)\n );\n }\n\n assertNever(\n authOperation,\n `Operation \"${authOperation}\" was unhandled.`\n );\n }\n\n public signIn(args: ISignInArgs): void {\n // Do nothing\n }\n\n public signInTo(args: ISignInToArgs): void {\n // Do nothing\n }\n\n public signOutFromApp(args: ISignOutFromAppArgs): void {\n // Do nothing\n }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n const acctType = args.account.type;\n if (this.isOperationSupported('signOutFromIdp', acctType)) {\n switch (acctType) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n // The AAD Account provider in this scenario isn't configured with rememberedAccounts\n // so we need the remembered accounts call to go through this authProvider so we\n // pass in the authProvider as a parameter\n return this.aadAccountsProvider.signOutFromIdp(args, this);\n case AccountType.MSA:\n return this.msaAccountsProvider.signOutFromIdp(args);\n }\n }\n\n return Promise.reject(createError('signOutFromIdp is not supported'));\n }\n\n public signOutAndForgetFromIdp(\n args: ISignOutAndForgetFromIdpArgs\n ): Promise {\n const acctType = args.account.type;\n if (this.isOperationSupported('signOutAndForgetFromIdp', acctType)) {\n switch (acctType) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n // The AAD Account provider in this scenario isn't configured with rememberedAccounts\n // so we need the remembered accounts call to go through this authProvider so we\n // pass in the authProvider as a parameter\n return this.aadAccountsProvider.signOutAndForgetFromIdp(args, this);\n case AccountType.MSA:\n return this.msaAccountsProvider.signOutAndForgetFromIdp(args);\n }\n }\n\n return Promise.reject(\n createError('signOutAndForgetFromIdp is not supported')\n );\n }\n\n public switch(args: ISwitchArgs): void {\n // Do nothing\n }\n\n public switchTo(args: ISwitchToArgs): void {\n // Do nothing\n }\n\n public getRememberedAccounts(): Promise {\n const handleFailure = (type: AccountType) => (error: Error) => {\n logTelemetryEvent({\n eventType: 'ClientError',\n name: 'Failed to retrieve remembered accounts for ' + type,\n type: 'RememberedAccountsFailure',\n details: JSON.stringify(toJsonable(error)),\n displayed: false\n });\n\n let empty: IAccount[] = [];\n return empty;\n };\n\n const msaSupported = this.isOperationSupported(\n 'getRememberedAccounts',\n AccountType.MSA\n );\n const aadSupported = this.isOperationSupported(\n 'getRememberedAccounts',\n AccountType.AAD\n );\n\n if (!msaSupported && !aadSupported) {\n return Promise.reject(\n createError('getRememberedAccounts is not supported')\n );\n }\n\n return this.msaAccountsProvider\n .getRememberedAccounts()\n .catch(handleFailure(AccountType.MSA))\n .then(accList =>\n accList.filter(acc => acc.type != AccountType.MSA_FED)\n );\n }\n}\n","import {\n IAccount,\n SignInExperienceType,\n AccountType,\n IWebAadWithMsaProxyConfig\n} from '@mecontrol/public-api';\nimport {\n IAuthOperations,\n IAuthProvider,\n IAuthNavigationProvider,\n ISignInArgs,\n ISignInToArgs,\n ISignOutFromAppArgs,\n ISignOutFromIdpArgs,\n ISwitchArgs,\n ISwitchToArgs,\n ISignOutAndForgetFromIdpArgs\n} from '@mecontrol/common';\nimport {\n Promise,\n ME,\n assertNever,\n logTelemetryEvent,\n toJsonable,\n createError\n} from '@mecontrol/web-inline';\nimport {\n createMsaAccountsProvider,\n createAadAccountsProvider,\n IRememberedAccountsProvider\n} from './webAccountProviders';\nimport { isStringOrFunction } from '../../../utilities';\nimport { canLeverageRememberedAccounts } from './operationHelpers';\nimport { WebAuthNavProvider } from './navProviders';\n\nexport function createWebAadWithMsaProxyProvider(\n config: IWebAadWithMsaProxyConfig\n): IAuthProvider {\n return new WebAadWithMsaProxyProvider(config);\n}\n\nclass WebAadWithMsaProxyProvider implements IAuthProvider {\n private msaAccountsProvider: IRememberedAccountsProvider;\n private aadAccountsProvider: IRememberedAccountsProvider;\n\n public navProvider: IAuthNavigationProvider;\n\n //TODO: I really don't know how this is used yet - it seems like it's always Default in all of the providers\n public supportedSignInAccountTypes: SignInExperienceType =\n SignInExperienceType.Converged;\n\n constructor(private config: IWebAadWithMsaProxyConfig) {\n this.navProvider = new WebAuthNavProvider(this.config);\n this.aadAccountsProvider = createAadAccountsProvider(this.config.aad, {\n proxyToOtherIdp: true\n });\n this.msaAccountsProvider = createMsaAccountsProvider(this.config.msa);\n }\n\n public isOperationSupported(\n authOperation: keyof IAuthOperations,\n accountType: AccountType\n ): boolean {\n switch (authOperation) {\n case 'signIn':\n return isStringOrFunction(this.config.appSignInUrl);\n case 'signInTo':\n return isStringOrFunction(this.config.appSignInToUrl);\n case 'signOutFromApp':\n return isStringOrFunction(this.config.appSignOutUrl);\n case 'signOutFromIdp':\n return (\n (accountType === AccountType.AAD ||\n accountType === AccountType.MSA_FED) &&\n isStringOrFunction(this.config.aad?.signOutUrl)\n );\n case 'signOutAndForgetFromIdp':\n return (\n ((accountType === AccountType.AAD || accountType === AccountType.MSA_FED) &&\n isStringOrFunction(\n this.config.aad?.signOutAndForgetUrl\n )) ||\n (accountType === AccountType.MSA &&\n isStringOrFunction(\n this.config.msa?.signOutAndForgetUrl\n ))\n );\n case 'switch':\n return isStringOrFunction(this.config.appSwitchUrl);\n case 'switchTo':\n return isStringOrFunction(this.config.appSwitchToUrl);\n case 'getRememberedAccounts':\n return (\n ME.Config.remAcc &&\n canLeverageRememberedAccounts(this, accountType) &&\n isStringOrFunction(this.config.aad?.rememberedAccountsUrl)\n );\n }\n\n assertNever(\n authOperation,\n `Operation \"${authOperation}\" was unhandled.`\n );\n }\n\n public signIn(args: ISignInArgs): void {\n // Do nothing\n }\n\n public signInTo(args: ISignInToArgs): void {\n // Do nothing\n }\n\n public signOutFromApp(args: ISignOutFromAppArgs): void {\n // Do nothing\n }\n\n public signOutFromIdp(args: ISignOutFromIdpArgs): Promise {\n const acctType = args.account.type;\n if (this.isOperationSupported('signOutFromIdp', acctType)) {\n switch (acctType) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n return this.aadAccountsProvider.signOutFromIdp(args);\n case AccountType.MSA:\n // The MSA Account provider in this scenario isn't configured with rememberedAccounts\n // so we need the remembered accounts call to go through this authProvider so we\n // pass in the authProvider as a parameter\n return this.msaAccountsProvider.signOutFromIdp(args, this);\n }\n }\n\n return Promise.reject(createError('signOutFromIdp is not supported'));\n }\n\n public signOutAndForgetFromIdp(\n args: ISignOutAndForgetFromIdpArgs\n ): Promise {\n const acctType = args.account.type;\n if (this.isOperationSupported('signOutAndForgetFromIdp', acctType)) {\n switch (acctType) {\n case AccountType.AAD:\n case AccountType.MSA_FED:\n return this.aadAccountsProvider.signOutAndForgetFromIdp(args);\n case AccountType.MSA:\n // The MSA Account provider in this scenario isn't configured with rememberedAccounts\n // so we need the remembered accounts call to go through this authProvider so we\n // pass in the authProvider as a parameter\n return this.msaAccountsProvider.signOutAndForgetFromIdp(args, this);\n }\n }\n\n return Promise.reject(\n createError('signOutAndForgetFromIdp is not supported')\n );\n }\n\n public switch(args: ISwitchArgs): void {\n // Do nothing\n }\n\n public switchTo(args: ISwitchToArgs): void {\n // Do nothing\n }\n\n public getRememberedAccounts(): Promise {\n const handleFailure = (type: AccountType) => (error: Error) => {\n logTelemetryEvent({\n eventType: 'ClientError',\n name: 'Failed to retrieve remembered accounts for ' + type,\n type: 'RememberedAccountsFailure',\n details: JSON.stringify(toJsonable(error)),\n displayed: false\n });\n\n let empty: IAccount[] = [];\n return empty;\n };\n\n const msaSupported = this.isOperationSupported(\n 'getRememberedAccounts',\n AccountType.MSA\n );\n const aadSupported = this.isOperationSupported(\n 'getRememberedAccounts',\n AccountType.AAD\n );\n\n if (!msaSupported && !aadSupported) {\n return Promise.reject(\n createError('getRememberedAccounts is not supported')\n );\n }\n\n return this.aadAccountsProvider\n .getRememberedAccounts()\n .catch(handleFailure(AccountType.AAD))\n .then(accList =>\n accList.filter(acc => acc.type != AccountType.MSA_FED)\n );\n }\n}\n","import { Promise, ME, createError } from '@mecontrol/web-inline';\r\nimport { AuthProviderConfigType, IAuthProviderConfig, SignInExperienceType, AccountType } from '@mecontrol/public-api';\r\nimport { IAuthProvider, GetAuthProvider } from '@mecontrol/common';\r\nimport { createPartnerManagedAuthProvider } from './providers/partnerManaged';\r\nimport { createWebDualStackAuthProvider } from './providers/webDualStackProvider';\r\nimport { createWebMsaOnlyAuthProvider } from './providers/webMsaOnlyProvider';\r\nimport { createWebAadOnlyAuthProvider } from './providers/webAadOnlyProvider';\r\nimport { createWebAadWithMsaFedAuthProvider } from './providers/webAadWithMSAFedProvider';\r\nimport { createAdalJsAuthProvider } from './providers/adaljsProvider';\r\nimport { createV1BackCompatAuthProvider } from './providers/v1AuthProvider';\r\nimport { createMsalJsAuthProvider } from './providers/msaljsProvider';\r\nimport { createWebMsaWithAadProxyProvider } from './providers/webMsaWithAadProxy';\r\nimport { createWebAadWithMsaProxyProvider } from './providers/webAadWithMsaProxy';\r\n\r\nexport { isRememberedAccountsSupported } from './providers/operationHelpers';\r\n\r\ntype AuthProviderFactory = (config: T) => IAuthProvider;\r\n\r\ntype AuthProviderConfigToFactoryMap = {\r\n [key in AuthProviderConfigType]: AuthProviderFactory // TODO: Try making this\r\n};\r\n\r\nconst authProviderConfigToFactoryMap: AuthProviderConfigToFactoryMap = {\r\n [AuthProviderConfigType.PartnerManaged]: createPartnerManagedAuthProvider,\r\n [AuthProviderConfigType.WebDualStack]: createWebDualStackAuthProvider,\r\n [AuthProviderConfigType.WebMsaOnly]: createWebMsaOnlyAuthProvider,\r\n [AuthProviderConfigType.WebAadOnly]: createWebAadOnlyAuthProvider,\r\n [AuthProviderConfigType.WebAadWithMsaFed]: createWebAadWithMsaFedAuthProvider,\r\n [AuthProviderConfigType.WebAadWithMsaProxy]: createWebAadWithMsaProxyProvider,\r\n [AuthProviderConfigType.WebMsaWithAadProxy]: createWebMsaWithAadProxyProvider,\r\n [AuthProviderConfigType.AdalJsWithMsaFed]: createAdalJsAuthProvider,\r\n [AuthProviderConfigType.AdalJsAadOnly]: createAdalJsAuthProvider,\r\n [AuthProviderConfigType.MsalJsAadOnly]: createMsalJsAuthProvider,\r\n [AuthProviderConfigType.MsalJsWithMsa]: createMsalJsAuthProvider,\r\n [AuthProviderConfigType.V1BackCompat]: createV1BackCompatAuthProvider\r\n};\r\n\r\nexport const getAuthProvider: GetAuthProvider = options => {\r\n const configType = options.authProviderConfig.type;\r\n\r\n let authProvider: IAuthProvider;\r\n if (configType in authProviderConfigToFactoryMap) {\r\n authProvider = authProviderConfigToFactoryMap[configType](options.authProviderConfig);\r\n }\r\n else {\r\n throw createError(`No AuthProvider factory matches given AuthProvider config type: ${configType}`);\r\n }\r\n\r\n // TODO: Consider a separate flag for web and native\r\n // TODO: Put this check in each auth providers isOperationSupported check\r\n if (ME.Config.remAcc == false) {\r\n authProvider.getRememberedAccounts = () => Promise.reject(createError('RememberedAccountsDisabled'));\r\n }\r\n\r\n return authProvider;\r\n};\r\n\r\n/**\r\n * Converts the given supported account type flags to a usable list object.\r\n * @param accountTypes The flag enum value to conver to a list.\r\n */\r\nexport function supportedAccountTypesToList(accountTypes: SignInExperienceType): SignInExperienceType[] {\r\n\r\n let supportedTypes: SignInExperienceType[] = [];\r\n if (accountTypes !== SignInExperienceType.Converged) {\r\n // Not default, result can be either option or both.\r\n if ((accountTypes & SignInExperienceType.Aad) == SignInExperienceType.Aad) {\r\n supportedTypes.push(SignInExperienceType.Aad);\r\n }\r\n\r\n if ((accountTypes & SignInExperienceType.Msa) == SignInExperienceType.Msa) {\r\n supportedTypes.push(SignInExperienceType.Msa);\r\n }\r\n }\r\n else {\r\n // Default\r\n supportedTypes.push(SignInExperienceType.Converged);\r\n }\r\n\r\n return supportedTypes;\r\n}\r\n\r\n/**\r\n * Converts an AccountType enum into a valid SignInExperienceType enum value.\r\n * @param accountType The AccountType to be converted.\r\n */\r\nexport function getSupportedAccountType(accountType: AccountType): SignInExperienceType {\r\n switch (accountType) {\r\n case AccountType.AAD:\r\n return SignInExperienceType.Aad;\r\n\r\n default:\r\n return SignInExperienceType.Msa;\r\n }\r\n}\r\n","import { IAccount, IOnAfterGetRememberedAccountsEventDetail, AuthenticatedState } from '@meControl/public-api';\r\nimport {\r\n IAuthActionCreators,\r\n AuthActionCreator,\r\n RememberedAccountActions,\r\n AsyncThunkAction,\r\n ActionTypes,\r\n ISignOutFromIdpArgs,\r\n ISignOutAndForgetFromIdpArgs,\r\n MeControlDispatch,\r\n AuthArgs\r\n} from '@mecontrol/common';\r\nimport { SyntheticEvent, Promise, getString } from '@mecontrol/web-inline';\r\nimport { getAccountId, announce, format, getVerbalFriendlyName, getCurrentAccount, isAadLike } from '../utilities';\r\nimport { isRememberedAccountsSupported } from '../api/auth';\r\n\r\ntype MeControlAuthEventType = \"beforesignin\" | \"beforesigninto\" | \"beforeswitch\" | \"beforeswitchto\" | \"beforesignoutfromapp\";\r\n\r\nconst AuthOpToEventMap = {\r\n signIn: \"beforesignin\",\r\n signInTo: \"beforesigninto\",\r\n switch: \"beforeswitch\",\r\n switchTo: \"beforeswitchto\",\r\n signOutFromApp: \"beforesignoutfromapp\"\r\n} as const;\r\n\r\nfunction authActionFactory<\r\n AuthOp extends keyof typeof AuthOpToEventMap,\r\n Args extends AuthArgs[AuthOp]\r\n>(operation: AuthOp): AuthActionCreator {\r\n return (args, event) => (dispatch, _, { authProvider, syntheticEventTarget }) => {\r\n const eventType: MeControlAuthEventType = AuthOpToEventMap[operation];\r\n if (eventType) {\r\n // one special case - beforesignin has no args at all (undefined), but the rest mirror the auth args here...\r\n let dispatchedEvent =\r\n eventType === \"beforesignin\"\r\n ? new SyntheticEvent(eventType, undefined)\r\n : new SyntheticEvent(eventType, args as any);\r\n\r\n if (!syntheticEventTarget.dispatchEvent(dispatchedEvent)) {\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n\r\n // The result of these auth operations will come either when the webpage refreshes and re-inits\r\n // the MeControl with the new account state, or the app calls setActiveAccount with the\r\n // newly signed in account or no account if all signed out\r\n (authProvider[operation] as any).apply(authProvider, [args]);\r\n };\r\n}\r\n\r\nfunction signOutStart(dispatch: MeControlDispatch, account: IAccount, forget: boolean): void {\r\n dispatch({\r\n type: ActionTypes.SIGNOUT_ACCOUNT_START,\r\n payload: {\r\n accountId: getAccountId(account),\r\n forget\r\n }\r\n });\r\n let ariaString = account.authenticatedState == AuthenticatedState.NotSignedIn ?\r\n 'forgetloadinga11yformat1' : 'signoutloadinga11yformat1';\r\n announce(format(getString(ariaString), getVerbalFriendlyName(account)));\r\n}\r\n\r\nfunction signOutSuccess(dispatch: MeControlDispatch, account: IAccount, forget: boolean): void {\r\n dispatch({\r\n type: ActionTypes.SIGNOUT_ACCOUNT_SUCCESS,\r\n payload: {\r\n accountId: getAccountId(account),\r\n forget\r\n }\r\n });\r\n let ariaString = forget ? 'signoutandforgetsuccessa11yformat1' : 'signoutsuccessa11yformat1';\r\n ariaString = forget && account.authenticatedState == AuthenticatedState.NotSignedIn ?\r\n 'forgetsuccessa11yformat1' : 'signoutandforgetsuccessa11yformat1';\r\n announce(format(getString(ariaString), getVerbalFriendlyName(account)));\r\n}\r\n\r\nfunction signOutFailed(dispatch: MeControlDispatch, account: IAccount, forget: boolean, error: Error): void {\r\n dispatch({\r\n type: ActionTypes.SIGNOUT_ACCOUNT_FAILED,\r\n error: true,\r\n payload: error,\r\n meta: {\r\n accountId: getAccountId(account),\r\n forget\r\n }\r\n });\r\n let ariaString = account.authenticatedState == AuthenticatedState.NotSignedIn ?\r\n 'forgeterrora11yformat1' : 'signouterrora11yformat1';\r\n announce(format(getString(ariaString), getVerbalFriendlyName(account)));\r\n}\r\n\r\n/** Fire off an async process to retrieve remembered accounts */\r\nexport function getRememberedAccounts(): AsyncThunkAction {\r\n return (dispatch, getState, { authProvider, syntheticEventTarget }) => {\r\n\r\n // Only do any logic around rememebered accounts if they are actually\r\n // supported for some type of account (in which case we will trust\r\n // the auth provider to do the right thing)\r\n if (isRememberedAccountsSupported(authProvider)) {\r\n\r\n dispatch({\r\n type: ActionTypes.REMEMBERED_ACCOUNTS_START\r\n });\r\n\r\n return authProvider.getRememberedAccounts().then(accounts => {\r\n let currentAccount = getCurrentAccount(getState().accounts);\r\n let currentId = currentAccount && getAccountId(currentAccount);\r\n let hasAuthenticator = (currentAccount && !isAadLike(currentAccount) && currentAccount.hA) || false;\r\n\r\n dispatch({\r\n type: ActionTypes.REMEMBERED_ACCOUNTS_SUCCESS,\r\n payload: {\r\n accounts,\r\n currentId,\r\n hasAuthenticator\r\n }\r\n });\r\n\r\n let eventDetails: IOnAfterGetRememberedAccountsEventDetail = { rememberedAccounts: accounts };\r\n\r\n let dispatchedEvent = new SyntheticEvent(\"aftergetrememberedaccounts\", eventDetails);\r\n syntheticEventTarget.dispatchEvent(dispatchedEvent);\r\n return accounts;\r\n }).catch((error: Error) => {\r\n dispatch({\r\n type: ActionTypes.REMEMBERED_ACCOUNTS_FAILED,\r\n error: true,\r\n payload: error\r\n });\r\n\r\n return [];\r\n }).then(accounts => {\r\n dispatch({\r\n type: ActionTypes.REMEMBERED_ACCOUNTS_COMPLETED\r\n })\r\n if (accounts && accounts.length > 0) {\r\n // trigger dispatch to get remembered accounts pictures from catch\r\n // dispatch(getPictureFromCache())\r\n }\r\n\r\n return accounts;\r\n });\r\n }\r\n else {\r\n dispatch({\r\n type: ActionTypes.REMEMBERED_ACCOUNTS_COMPLETED\r\n })\r\n return Promise.resolve([]);\r\n }\r\n };\r\n}\r\n\r\nexport function signOutFromIdp(args: ISignOutFromIdpArgs, event: Event): AsyncThunkAction {\r\n return (dispatch, _, { authProvider, syntheticEventTarget }) => {\r\n let dispatchedEvent = new SyntheticEvent(\"beforesignoutfromidp\", args);\r\n\r\n if (!syntheticEventTarget.dispatchEvent(dispatchedEvent)) {\r\n event.preventDefault();\r\n return Promise.resolve();\r\n }\r\n\r\n signOutStart(dispatch, args.account, false);\r\n\r\n return authProvider.signOutFromIdp(args).then(() => {\r\n signOutSuccess(dispatch, args.account, false);\r\n }).catch((error: Error) => {\r\n signOutFailed(dispatch, args.account, false, error);\r\n });\r\n };\r\n}\r\n\r\nexport function signOutAndForgetFromIdp(args: ISignOutAndForgetFromIdpArgs, event: Event): AsyncThunkAction {\r\n return (dispatch, _, { authProvider, syntheticEventTarget }) => {\r\n let dispatchedEvent = new SyntheticEvent(\"beforesignoutandforgetfromidp\", args);\r\n\r\n if (!syntheticEventTarget.dispatchEvent(dispatchedEvent)) {\r\n event.preventDefault();\r\n return Promise.resolve();\r\n }\r\n\r\n signOutStart(dispatch, args.account, true);\r\n\r\n return authProvider.signOutAndForgetFromIdp(args).then(() => {\r\n let afterEvent = new SyntheticEvent(\"aftersignoutandforgetfromidp\", args);\r\n syntheticEventTarget.dispatchEvent(afterEvent);\r\n signOutSuccess(dispatch, args.account, true);\r\n }).catch((error: Error) => {\r\n signOutFailed(dispatch, args.account, true, error);\r\n });\r\n };\r\n}\r\n\r\nexport const authActions: IAuthActionCreators = {\r\n signIn: authActionFactory(\"signIn\"),\r\n signInTo: authActionFactory(\"signInTo\"),\r\n switch: authActionFactory(\"switch\"),\r\n switchTo: authActionFactory(\"switchTo\"),\r\n signOutFromApp: authActionFactory(\"signOutFromApp\"),\r\n signOutFromIdp,\r\n signOutAndForgetFromIdp,\r\n getRememberedAccounts,\r\n};\r\n","import { h, FunctionalComponent, ComponentFactory } from 'preact';\r\nimport { bindActionCreators } from 'redux';\r\nimport cc from 'classcat';\r\nimport { ICommand, ITheme, SignInExperienceType } from '@mecontrol/public-api';\r\nimport {\r\n IMeControlAppState, IMeControlAccounts, IMeControlDisplayMode, IAccountState,\r\n IAuthProvider, IAuthActions,\r\n PageName, PageAction, ContentSource,\r\n AnchorPosition, AnchorAlignment, ToggleAction\r\n} from '@mecontrol/common';\r\nimport {\r\n Promise, SyntheticEvent,\r\n logTelemetryEvent, createId,\r\n getOptions, getString, getTimeSinceStart\r\n} from '@mecontrol/web-inline';\r\nimport { MapStateToProps, MapDispatchToProps, connect } from '../core/connect';\r\nimport { RenderAsync } from '../core/RenderAsync';\r\nimport { Header } from './Header';\r\nimport { LinkButton } from './LinkButton';\r\nimport { FocusVisible } from './FocusVisible';\r\nimport { Breakpoint } from './Breakpoint';\r\nimport { ScreenReaderText } from './ScreenReaderText';\r\nimport { authActions } from '../actions/authActions';\r\nimport {\r\n getCurrentAccount, getOtherAccounts, toIAccount,\r\n getThemeClass, getHeaderLabel, loadCore, isIE, setUrgent\r\n} from '../utilities';\r\nimport { IDropdownProps, IBodyProps } from '@mecontrol/web-core';\r\n\r\nexport interface RootOwnProps {\r\n authProvider: IAuthProvider;\r\n\r\n // TODO: add a prop for the SyntheticEventTarget to pass down so that we can use it later in Root for expand/collapse events\r\n}\r\n\r\nexport interface RootStateProps {\r\n accounts: IMeControlAccounts;\r\n commands?: ICommand[];\r\n displayMode: IMeControlDisplayMode;\r\n theme: ITheme;\r\n headerTheme: ITheme;\r\n}\r\n\r\nexport interface RootDispatchProps extends IAuthActions { }\r\n\r\nexport type RootProps = RootStateProps & RootDispatchProps & RootOwnProps;\r\n\r\ninterface MeCoreComponents {\r\n Body: FunctionalComponent;\r\n Dropdown: FunctionalComponent;\r\n}\r\n\r\nconst rootClass = 'mectrl_root';\r\nconst ieClass = 'mectrl_ie';\r\n\r\nconst RootImpl: FunctionalComponent = props => {\r\n // bool value to know if the supported types is flagged as BOTH items independantly (not converged).\r\n const isBothTypes = ((props.authProvider.supportedSignInAccountTypes & SignInExperienceType.Msa) == SignInExperienceType.Msa\r\n && (props.authProvider.supportedSignInAccountTypes & SignInExperienceType.Aad) == SignInExperienceType.Aad);\r\n const currentAccount = getCurrentAccount(props.accounts);\r\n const cssClass = cc([rootClass, getThemeClass(props.theme), getThemeClass(props.headerTheme, true), { [ieClass]: isIE(navigator.userAgent) }]);\r\n const ariaLabel = getHeaderLabel(currentAccount);\r\n\r\n const auth = props.authProvider;\r\n const renderSignIn = renderSignInLinkButton(auth, props.signIn);\r\n\r\n const defaultExpanded = getOptions()?.primaryUXConfig?.defaultExpanded;\r\n if (defaultExpanded === true) {\r\n // Immediately download meCore if we are going to immediately expand the\r\n // dropdown\r\n setUrgent();\r\n }\r\n\r\n /* Conditionaly choose to show the dropdown body based on the following critiera:\r\n * 1) Does the IDP support both types of accounts? OR\r\n * 2) Is there a current (active) account? OR\r\n * 3) Is there any remembered account types that the auth provider supports 'signInTo' for?\r\n * */\r\n let rootContentsRender: (exceeded: boolean) => JSX.Element;\r\n if (isBothTypes || currentAccount !== undefined || doesSupportSigningInToRemembered(props.authProvider, getOtherAccounts(props.accounts))) {\r\n rootContentsRender = exceeded => {\r\n const renderHeader = () => (\r\n
\r\n {ariaLabel}\r\n \r\n
\r\n );\r\n\r\n return Promise}\r\n render={meCore =>\r\n }\r\n onToggle={handleDropdownStateChange}\r\n cssClass='mectrl_mainDropdown'\r\n ariaLabel={ariaLabel}\r\n tooltip={true}\r\n position={AnchorPosition.Bottom}\r\n alignment={AnchorAlignment.End}\r\n defaultExpanded={defaultExpanded}\r\n />\r\n }\r\n renderLoading={renderHeader}\r\n renderError={error => {\r\n if (currentAccount) {\r\n return renderSignOutLinkButton(auth, currentAccount, props.signOutFromApp)(exceeded);\r\n }\r\n else {\r\n return renderSignIn(exceeded);\r\n }\r\n }}\r\n />;\r\n };\r\n }\r\n else {\r\n rootContentsRender = renderSignIn;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nRootImpl.displayName = 'Root';\r\n\r\n/**\r\n * Given the auth provider and list of remembered accounts, this method will loop through each account and determine if\r\n * at least ONE of the accounts is supported for a 'signInTo' action.\r\n * @param authProvider The current auth provider for the IDP.\r\n * @param rememberedAccounts The list of remembered accounts to check.\r\n */\r\nfunction doesSupportSigningInToRemembered(authProvider: IAuthProvider, rememberedAccounts: IAccountState[]): boolean {\r\n if (rememberedAccounts.length > 0) {\r\n return rememberedAccounts.reduce((isSupported, account) => {\r\n return isSupported || authProvider.isOperationSupported('signInTo', account.type);\r\n }, false as boolean);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Function to respond to changes in the dropdown's collapsed state. When called\r\n * with the current account type (if any) returns the actual handler.\r\n * Mainly fires telemetry and notifies partners about the changes.\r\n * @param accountType Type of the current account (if any)\r\n * @param expanded New state for the dropdown\r\n * @param action Type of action that triggered the change\r\n */\r\nconst handleDropdownStateChange = (expanded: boolean, action?: ToggleAction) => {\r\n // First, notify any listeners - in particular, UHF can (will?) use this to handle\r\n // cookie compliance - they listen for this to know that the user has interacted\r\n // with the MeControl which implies acceptance of cookie policy\r\n\r\n // TODO: use the passed in (once we pass it down in props) SyntheticEventTarget rather\r\n // than pulling options out of thin air...\r\n let meControlConfig = getOptions();\r\n if (meControlConfig) {\r\n let dispatchedEvent = new SyntheticEvent(expanded ? \"controlexpanded\" : \"controlcollapsed\", undefined);\r\n meControlConfig.syntheticEventTarget.dispatchEvent(dispatchedEvent);\r\n }\r\n\r\n // Now fire our own telemtry on this:\r\n // Log click action that closed/opened the dropdown\r\n // Interactions are handled by whatever component was interacted with\r\n if (action !== ToggleAction.Interaction) {\r\n logTelemetryEvent({\r\n eventType: 'PageAction',\r\n content: {\r\n id: action === ToggleAction.Trigger ? PageAction.openCloseControl : PageAction.dismissControl,\r\n source: ContentSource.Action\r\n }\r\n });\r\n }\r\n\r\n // Log new page view for the dropdown\r\n logTelemetryEvent({\r\n eventType: 'ContentUpdate',\r\n content: {\r\n id: expanded ? PageName.expanded : PageName.collapsed,\r\n source: ContentSource.UX\r\n },\r\n loadTime: getTimeSinceStart()\r\n });\r\n};\r\n\r\n/**\r\n * Function to create another function that renders a SignIn LinkButton\r\n * @param auth Authprovider from the MeControl configuration\r\n * @param signIn Sign In Auth action\r\n */\r\nconst renderSignInLinkButton = (auth: IAuthProvider, signIn: IAuthActions['signIn']) =>\r\n (exceeded: boolean) => {\r\n const nav = auth.navProvider;\r\n const label = getString('signinlabel');\r\n return nav && nav.getSignInUrl({ signInType: auth.supportedSignInAccountTypes })}\r\n onClick={(event: Event) => signIn({ signInType: auth.supportedSignInAccountTypes }, event)}\r\n title={exceeded ? undefined : label}\r\n >\r\n {label}\r\n \r\n ;\r\n };\r\n\r\n/**\r\n * Creates a function that itself renders a sign out link.\r\n * Only used as a fallback when loading meCore fails and the user is signed in\r\n * @param auth AuthProvider from the MeControl configuration\r\n * @param account Currently signed in account\r\n * @param signOut Sign Out From App action\r\n */\r\nconst renderSignOutLinkButton = (auth: IAuthProvider, account: IAccountState, signOut: IAuthActions['signOutFromApp']) =>\r\n (exceeded: boolean) => {\r\n const nav = auth.navProvider;\r\n const currentAccount = toIAccount(account);\r\n const label = getString('signout');\r\n return nav && nav.getSignOutFromAppUrl({ currentAccount })}\r\n onClick={(event: Event) => signOut({ currentAccount }, event)}\r\n title={exceeded ? undefined : label}\r\n >\r\n {label}\r\n \r\n ;\r\n };\r\n\r\nexport const mapStateToProps: MapStateToProps = state => state;\r\n\r\nexport const mapDispatchToProps: MapDispatchToProps = dispatch => {\r\n return {\r\n ...bindActionCreators(authActions as any, dispatch)\r\n };\r\n};\r\n\r\nexport const Root: ComponentFactory = connect(mapStateToProps, mapDispatchToProps)(RootImpl);\r\n","function createThunkMiddleware(extraArgument) {\n return function (_ref) {\n var dispatch = _ref.dispatch,\n getState = _ref.getState;\n return function (next) {\n return function (action) {\n if (typeof action === 'function') {\n return action(dispatch, getState, extraArgument);\n }\n\n return next(action);\n };\n };\n };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","import { Reducer } from 'redux';\r\nimport { IAccount, AuthenticatedState, AccountType, IAccountPropTypes } from '@meControl/public-api';\r\nimport {\r\n IAccountStateMap, IAccountState, AccountItemStatus, AllActions, ActionTypes, DeepPartial, IGraphData\r\n} from '@mecontrol/common';\r\nimport { getAccountId, merge, createNewStateGuid } from '../../utilities';\r\n\r\n/**\r\n * Reducer function to handle the object from the accounts state containing all Account information (account map)\r\n * @param state Map of accounts keyed by their computed IDs\r\n * @param action Dispatched action to change the state\r\n * @returns The new state given the action\r\n */\r\nexport const byId: Reducer = (state = {}, action: AllActions) => {\r\n\r\n switch (action.type) {\r\n\r\n // When initializing with options, we create a new map of accounts and,\r\n // if available, add the active account to it\r\n case ActionTypes.INIT_OPTIONS:\r\n const currentAccount = action.payload.options.currentAccount;\r\n\r\n if (currentAccount) {\r\n if (currentAccount?.uaid == null) {\r\n currentAccount.uaid = createNewStateGuid();\r\n }\r\n\r\n return addAccounts(state, [currentAccount]);\r\n }\r\n\r\n return state;\r\n\r\n // When setting the active account, we only add the account to the map if\r\n // it was not already there\r\n // Additionally, we reset the account's accountItemState\r\n case ActionTypes.SET_ACTIVE_ACCOUNT:\r\n if (action.payload.account.uaid == null) {\r\n action.payload.account.uaid = createNewStateGuid();\r\n }\r\n return addAccounts(state, [action.payload.account]);\r\n\r\n // Remove the currently active account\r\n // Effect is the same as successful signout and forget\r\n case ActionTypes.REMOVE_ACTIVE_ACCOUNT:\r\n return removeAccount(state, action.payload.accountId);\r\n\r\n // Add the remebered accounts retrieved by the API\r\n case ActionTypes.REMEMBERED_ACCOUNTS_SUCCESS:\r\n let currentId = action.payload.currentId;\r\n let preserveIds = currentId ? [currentId] : undefined;\r\n return addAccounts(state, action.payload.accounts, preserveIds, action.payload.hasAuthenticator);\r\n\r\n // Remove an account that has been already signed out (if we need to forget it)\r\n // or updates its AuthenticatedState to signed out otherwise\r\n case ActionTypes.SIGNOUT_ACCOUNT_SUCCESS:\r\n const accountId = action.payload.accountId;\r\n if (action.payload.forget) {\r\n return removeAccount(state, accountId);\r\n }\r\n else {\r\n return updateAccountState(state, action.payload.accountId, {\r\n authenticatedState: AuthenticatedState.NotSignedIn,\r\n accountItemStatus: AccountItemStatus.Normal\r\n });\r\n }\r\n\r\n // Update the Account Item Status to display an error\r\n case ActionTypes.SIGNOUT_ACCOUNT_FAILED:\r\n return updateAccountState(state, action.meta.accountId, { accountItemStatus: AccountItemStatus.Error });\r\n\r\n // Update the Account Item Status to indicate loading while signing out in the background\r\n case ActionTypes.SIGNOUT_ACCOUNT_START:\r\n return updateAccountState(state, action.payload.accountId, { accountItemStatus: AccountItemStatus.Loading });\r\n\r\n // Update the state of the account when the profile picture is changed\r\n case ActionTypes.SET_PROFILE_PICTURE:\r\n return updateAccountState(state, action.payload.accountId, {\r\n profile: {\r\n profilePictureUrl: action.payload.newUrl\r\n }\r\n });\r\n\r\n // Update account state with a new value for pictureUrl, and reset its load status\r\n case ActionTypes.SET_ACCOUNT_PICTURE:\r\n return updateAccountState(state, action.payload.accountId, {\r\n pictureUrl: action.payload.newUrl\r\n });\r\n\r\n // Update the account picture from that returned from Graph.\r\n case ActionTypes.GET_GRAPH_PICTURE_SUCCESS:\r\n return updateAccountState(state, action.payload.accountId, {\r\n pictureUrl: action.payload.pictureUrl\r\n });\r\n\r\n // Update all remembered account pictures that were found in cache.\r\n case ActionTypes.GET_CACHED_PICTURES_SUCCESS:\r\n let cachedResults: IGraphData[] = action.payload.cachedData;\r\n let newState = state;\r\n for (let ii = 0; ii < cachedResults.length; ii++) {\r\n const accountId =\r\n cachedResults[ii].accountId ??\r\n cachedResults[ii].payload.key;\r\n const account = newState[accountId];\r\n if (account) {\r\n const { payload } = cachedResults[ii];\r\n account.pictureUrl = account.pictureUrl ?? payload.resource;\r\n if (account.cacheMeta) {\r\n account.cacheMeta[IAccountPropTypes.PIC_URL_PROPTYPE] =\r\n payload.resourceETag;\r\n } else {\r\n account.cacheMeta = {\r\n [IAccountPropTypes.PIC_URL_PROPTYPE]:\r\n payload.resourceETag\r\n };\r\n }\r\n }\r\n }\r\n\r\n return { ...newState };\r\n case ActionTypes.GET_CACHED_SHOW_AUTH_APP:\r\n let resultAuthApp: IGraphData[] = action.payload.cachedData;\r\n let newStateAuthApp = state;\r\n for (let ii = 0; ii < resultAuthApp.length; ii++) {\r\n const accountId =\r\n resultAuthApp[ii].accountId ??\r\n resultAuthApp[ii].payload.key;\r\n const account = newStateAuthApp[accountId];\r\n if (account) {\r\n const { payload } = resultAuthApp[ii];\r\n account.showAuthApp = payload.resource;\r\n }\r\n }\r\n\r\n return { ...newStateAuthApp };\r\n case ActionTypes.DISMISS_AUTH_APP:\r\n return updateAccountState(state, action.payload.accountId, {showAuthApp: false});\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n/**\r\n * Add an array of accounts to an Account state map\r\n * @param state Account state map object onto which the accounts will be added\r\n * @param accounts Array of accounts to add to the state\r\n * @param preserveIds Array of account IDs in state that will receive priority during merging (i.e.\r\n * will not be overriden but rather only complemented)\r\n * @returns A new Account state map with the added (and de-duped) accounts\r\n */\r\nfunction addAccounts(state: IAccountStateMap, accounts: IAccount[], preserveIds?: string[], hasAuthenticator?: boolean): IAccountStateMap {\r\n if (accounts.length < 1) {\r\n return state; // avoid some unnecessary work\r\n }\r\n\r\n // Populate addedAccountsMap with AccountStates for the added accounts\r\n let addedAccountsMap: IAccountStateMap = {};\r\n for (let account of accounts) {\r\n const accountId = getAccountId(account);\r\n\r\n account[IAccountPropTypes.SHOW_AUTH_APP] = !hasAuthenticator;\r\n // For MSA accounts, construct the picture URL using the CID in order to download the profile image.\r\n if ((account.type === AccountType.MSA || account.type === AccountType.MSA_FED) && account.cid) {\r\n // \"upck\" == \"user picture cache key\".\r\n // After picture is changed, this cookie is supposed to be set for a day on *.microsoft.com. By the\r\n // time the cookie expires, the storage is expected to be serving updated picture.\r\n account.pictureUrl = account.pictureUrl;\r\n }\r\n\r\n // If the account is in the state already, we will merge its\r\n // values with the ones from the duplicated added account\r\n if (accountId in state) {\r\n // When adding accounts, we will give priority to new data coming in, except for\r\n // accounts whose IDs are in the preserveIds array. The purpose of this is,\r\n // particulary when merging remembered accounts, to avoid overwriting data\r\n // for certain accounts (namely the current one) so that we keep whatever\r\n // data a partner may have given us about it.\r\n let mergeOrder: any[] = preserveIds && preserveIds.indexOf(accountId) !== -1 ?\r\n [account, state[accountId]] : // Keep information from state\r\n [state[accountId], account]; // Override information from state\r\n\r\n addedAccountsMap[accountId] = merge({},\r\n ...mergeOrder,\r\n { accountItemStatus: AccountItemStatus.Normal }\r\n );\r\n }\r\n // Otherwise, we just add the extra fields that the state\r\n // requires\r\n else {\r\n addedAccountsMap[accountId] = {\r\n ...account,\r\n accountItemStatus: AccountItemStatus.Normal\r\n };\r\n }\r\n }\r\n\r\n // Merge current account map with the one for the added accounts\r\n return {\r\n ...state,\r\n ...addedAccountsMap\r\n };\r\n}\r\n\r\n/**\r\n * Remove a given account from the Account state map\r\n * @param accountMap Account state map object from which the account will be removed\r\n * @param accountId Id of the Account to remove\r\n * @returns A new Account state map with the passed in account removed (if it was there)\r\n */\r\nfunction removeAccount(accountMap: IAccountStateMap, accountId: string): IAccountStateMap {\r\n let newAccountMap: IAccountStateMap = { ...accountMap };\r\n delete newAccountMap[accountId];\r\n return newAccountMap;\r\n}\r\n\r\n/**\r\n * Update a given account's state\r\n * @param state Acccount state map from which we need to update the account\r\n * @param accountId Id of the account to update the status of\r\n * @param newStatus New state of the account. Only set values are updated.\r\n * @returns New account state map with the updated account\r\n */\r\nfunction updateAccountState(state: IAccountStateMap, accountId: string, newAccountState: DeepPartial): IAccountStateMap {\r\n const account: IAccountState | undefined = state[accountId];\r\n if (account) {\r\n if (account.profile && newAccountState.profile && newAccountState.profile.profileName === '') {\r\n newAccountState.profile.profileName = account.profile.profileName;\r\n }\r\n return {\r\n ...state,\r\n [accountId]: {\r\n ...account,\r\n ...newAccountState as any\r\n }\r\n };\r\n }\r\n\r\n return state;\r\n}\r\n","import { Reducer } from 'redux';\r\nimport { IAccount } from '@meControl/public-api';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\nimport { getAccountId } from '../../utilities/accounts';\r\n\r\n/**\r\n * Reducer function to handle the array from the accounts state containing all the account IDs\r\n * @param state Array of account IDs\r\n * @param action Dispatched action to change the state\r\n * @returns The new state given the action\r\n */\r\nexport const allIds: Reducer = (state = [], action: AllActions) => {\r\n switch (action.type) {\r\n\r\n // When initializing options, we create a new array of IDs, and only\r\n // add one for the active account if it is provided\r\n case ActionTypes.INIT_OPTIONS:\r\n const currentAccount = action.payload.options.currentAccount;\r\n if (currentAccount) {\r\n return addAccountIds(state, [currentAccount]);\r\n }\r\n\r\n return state;\r\n\r\n // When setting the active account, we only add the account's ID if it is\r\n // not already present in the array\r\n case ActionTypes.SET_ACTIVE_ACCOUNT:\r\n return addAccountIds(state, [action.payload.account]);\r\n\r\n // Remove the currently active account\r\n // Effect is the same as a succesful signout and forget\r\n case ActionTypes.REMOVE_ACTIVE_ACCOUNT:\r\n return removeAccountId(state, action.payload.accountId);\r\n\r\n\r\n // Add the remembered accounts' Ids that were recevied from the API\r\n case ActionTypes.REMEMBERED_ACCOUNTS_SUCCESS:\r\n return addAccountIds(state, action.payload.accounts);\r\n\r\n // Remove a signed out account's Id (if we need to forget it)\r\n case ActionTypes.SIGNOUT_ACCOUNT_SUCCESS:\r\n if (action.payload.forget) {\r\n return removeAccountId(state, action.payload.accountId);\r\n }\r\n else {\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n/**\r\n * Add an array of accounts's Ids to an array of account Ids\r\n * @param state Array of current account Ids\r\n * @param accounts Array of accounts whose Ids will be added to the current array\r\n * @returns A new array of account Ids with those from the accounts added (and de-duped)\r\n */\r\nfunction addAccountIds(state: string[], accounts: IAccount[]): string[] {\r\n let newAccountIds = accounts\r\n // Convert accounts to Ids\r\n .map(account => getAccountId(account))\r\n // Dedupe Ids\r\n .reduce((dedupedIds: string[], accountId: string) => {\r\n if (dedupedIds.indexOf(accountId) === -1 && state.indexOf(accountId) === -1) {\r\n dedupedIds.push(accountId);\r\n }\r\n return dedupedIds;\r\n }, []);\r\n\r\n if (newAccountIds.length > 0) {\r\n return [\r\n ...state,\r\n ...newAccountIds\r\n ];\r\n }\r\n else {\r\n return state;\r\n }\r\n}\r\n\r\n/**\r\n * Remove the provided account's Id from the array of account Ids\r\n * @param accountIds Array of current account Ids\r\n * @param accountId Id of the Account to remove\r\n * @returns A new array of account Ids without the passed-in account's Id\r\n */\r\nexport function removeAccountId(accountIds: string[], accountId: string): string[] {\r\n return accountIds.filter(accId => accId !== accountId);\r\n}\r\n","import { Reducer } from 'redux';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\nimport { getAccountId } from '../../utilities/accounts';\r\n\r\n/**\r\n * Reducer function to handle the string from the accounts state that stores the active account's ID (if any)\r\n * @param state Current active account's ID (or empty string for no active accounts)\r\n * @param action Dispatched action to change the state\r\n * @returns The new state given the action\r\n */\r\nexport const currentId: Reducer = (state = '', action: AllActions) => {\r\n switch (action.type) {\r\n // When initializing options, we only set the string if the options\r\n // include an active account\r\n case ActionTypes.INIT_OPTIONS:\r\n if (action.payload.options.currentAccount) {\r\n return getAccountId(action.payload.options.currentAccount);\r\n }\r\n\r\n return '';\r\n\r\n // When setting an active account, we just replace the current value\r\n // with the new one's ID\r\n case ActionTypes.SET_ACTIVE_ACCOUNT:\r\n return getAccountId(action.payload.account);\r\n\r\n // Remove the active account\r\n case ActionTypes.REMOVE_ACTIVE_ACCOUNT:\r\n return '';\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { Reducer, combineReducers } from 'redux';\r\nimport { IMeControlAccounts } from '@mecontrol/common';\r\nimport { byId } from './byId';\r\nimport { allIds } from './allIds';\r\nimport { currentId } from './currentId';\r\n\r\n/** Reducer for the accounts part of the state */\r\nexport const accounts: Reducer = combineReducers({\r\n byId,\r\n allIds,\r\n currentId\r\n});\r\n","import { Reducer } from 'redux';\r\nimport { ICommand } from '@mecontrol/public-api';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\n\r\nexport const commands: Reducer = (state = [], action: AllActions) => {\r\n switch (action.type) {\r\n case ActionTypes.INIT_OPTIONS:\r\n return (action.payload.options.appContextConfig && action.payload.options.appContextConfig.commands) || [];\r\n case ActionTypes.SET_COMMANDS:\r\n return action.payload.commands;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { Reducer } from 'redux';\r\nimport { RuntimeDisplayMode } from '@mecontrol/public-api';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\n\r\nexport const current: Reducer = (state = RuntimeDisplayMode.Auto, action: AllActions) => {\r\n switch (action.type) {\r\n case ActionTypes.SET_DISPLAY_MODE:\r\n return action.payload.mode;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { Reducer } from 'redux';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\n\r\nexport const breakpoint: Reducer = (state = -1, action: AllActions) => {\r\n switch (action.type) {\r\n case ActionTypes.INIT_OPTIONS:\r\n // Get first valid displayMode or return a negative number\r\n const displayModes = action.payload.options.primaryUXConfig.displayModes;\r\n if (displayModes.length > 0) {\r\n return displayModes[0].widthBreakpoint;\r\n }\r\n else {\r\n return -1;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { Reducer, combineReducers } from 'redux';\r\nimport { IMeControlDisplayMode } from '@mecontrol/common';\r\nimport { current } from './current';\r\nimport { breakpoint } from './breakpoint';\r\n\r\n/** Reducer for the ui part of the state */\r\nexport const displayMode: Reducer = combineReducers({\r\n current,\r\n breakpoint\r\n});\r\n","import { Reducer } from 'redux';\nimport {\n IPictureStatusDictionary, PictureLoadStatus, AllActions, ActionTypes\n} from '@mecontrol/common';\nimport { GRAPH_PIC_STATUS_KEY } from '../actions/pictureActions';\nimport { CACHED_DONE_KEY, REMEMBERED_DONE_KEY } from '../actions/cacheActions';\n\nexport const picturesStatus: Reducer = (state = {}, action: AllActions) => {\n switch (action.type) {\n case ActionTypes.REMEMBERED_ACCOUNTS_START:\n return UpdateStatus(state, REMEMBERED_DONE_KEY, PictureLoadStatus.Loading);\n case ActionTypes.REMEMBERED_ACCOUNTS_FAILED:\n return UpdateStatus(state, REMEMBERED_DONE_KEY, PictureLoadStatus.Failed);\n case ActionTypes.REMEMBERED_ACCOUNTS_COMPLETED:\n return UpdateStatus(state, REMEMBERED_DONE_KEY, PictureLoadStatus.Succeeded);\n case ActionTypes.GET_CACHED_COMPLETED:\n case ActionTypes.GET_CACHED_DISABLED:\n case ActionTypes.GET_CACHED_PICTURES_BLANK:\n case ActionTypes.GET_CACHED_PICTURES_SUCCESS:\n return UpdateStatus(state, CACHED_DONE_KEY, PictureLoadStatus.Succeeded);\n // Update state after the account picture has been refreshed\n case ActionTypes.REFRESH_PICTURE:\n return UpdateStatus(state, action.payload.url, PictureLoadStatus.None);\n\n // Update state after the profile picture has loaded successfully\n case ActionTypes.LOAD_PICTURE_URL_SUCCESS:\n return UpdateStatus(state, action.payload.pictureUrl, PictureLoadStatus.Succeeded);\n\n // Update the state when the profile picture failed to load\n case ActionTypes.LOAD_PICTURE_URL_FAILED:\n return UpdateStatus(state, action.meta.pictureUrl, PictureLoadStatus.Failed);\n\n // Update the state when the profile picture started loading\n case ActionTypes.LOAD_PICTURE_URL_START:\n return UpdateStatus(state, action.payload.pictureUrl, PictureLoadStatus.Loading);\n\n case ActionTypes.GET_GRAPH_PICTURE_START:\n return UpdateStatus(state, GRAPH_PIC_STATUS_KEY, PictureLoadStatus.Loading);\n case ActionTypes.GET_GRAPH_PICTURE_SUCCESS:\n return UpdateStatus(state, GRAPH_PIC_STATUS_KEY, PictureLoadStatus.Succeeded);\n default:\n return state;\n }\n};\n\n/**\n * Helper method to update the state based on the specified status.\n * @param state The state being updated\n * @param pictureUrl The URL key that is being updated by cound and status.\n * @param status The status to adjust the pictureStatus to be.\n */\nfunction UpdateStatus(state: IPictureStatusDictionary, pictureUrl: string | undefined, status: PictureLoadStatus): IPictureStatusDictionary\n{\n if (!pictureUrl) {\n return state;\n }\n\n // Set default start for tries count.\n let tries: number = 0;\n\n // Try and get any previous state value for the picture Url and attain the current tries for that item.\n let picStatus = state[pictureUrl];\n\n if (picStatus) {\n tries = picStatus.tries;\n }\n\n if (status === PictureLoadStatus.None) {\n if (picStatus && picStatus.status === PictureLoadStatus.Succeeded) {\n return state;\n }\n tries = 0;\n }\n\n // Increment if loading started\n if (status === PictureLoadStatus.Loading) {\n tries++;\n }\n\n // Return updated state and status.\n return {\n ...state,\n [pictureUrl]: {\n status,\n tries\n }\n };\n}\n","import { Reducer } from 'redux';\r\nimport { AllActions, ActionTypes } from '@mecontrol/common';\r\nimport { ITheme } from '@mecontrol/public-api';\r\n\r\nexport const theme: Reducer = (state = {type: \"light\"} as ITheme, action: AllActions) => {\r\n let newState = state;\r\n if (action.type == ActionTypes.INIT_OPTIONS && action.payload.options.primaryUXConfig && action.payload.options.primaryUXConfig.theme) {\r\n newState = action.payload.options.primaryUXConfig.theme;\r\n }\r\n if (action.type == ActionTypes.SET_THEME && action.payload.theme.type !== state.type) {\r\n newState = action.payload.theme;\r\n }\r\n\r\n return newState;\r\n};\r\n","import { Reducer } from 'redux';\nimport { IPresenceConfig } from '@mecontrol/public-api';\nimport { AllActions, ActionTypes } from '@mecontrol/common';\n\nexport const presenceConfig: Reducer = (state = {}, action: AllActions) => {\n if (action.type == ActionTypes.INIT_OPTIONS && action.payload.options.presenceConfig) {\n return action.payload.options.presenceConfig;\n }\n if (action.type == ActionTypes.UPDATE_PRESENCE_CONFIG) {\n return action.payload.presenceConfig;\n }\n if (action.type == ActionTypes.UPDATE_PRESENCE_STATE || action.type == ActionTypes.UPDATE_PRESENCE_STATE_TO_PARTNER_SUCCESS) {\n const newState = {\n ...state,\n };\n newState.currentPresence = action.payload.currentPresence;\n return newState;\n }\n return state;\n};\n","import { Reducer } from 'redux';\nimport { AllActions, ActionTypes } from '@mecontrol/common';\nimport { ITheme } from '@mecontrol/public-api';\n\nexport const headerTheme: Reducer = (state = {type: \"light\"} as ITheme, action: AllActions) => {\n let newState = state;\n if (action.type == ActionTypes.INIT_OPTIONS && action.payload.options.primaryUXConfig && action.payload.options.primaryUXConfig.headerTheme) {\n newState = action.payload.options.primaryUXConfig.headerTheme;\n }\n if (action.type == ActionTypes.SET_HEADER_THEME && action.payload.headerTheme.type !== state.type) {\n newState = action.payload.headerTheme;\n }\n\n return newState;\n};\n","import { Reducer, combineReducers } from 'redux';\r\nimport { IMeControlAppState } from '@mecontrol/common';\r\nimport { accounts } from './accounts';\r\nimport { commands } from './commands';\r\nimport { displayMode } from './displayMode';\r\nimport { picturesStatus } from './picturesStatus';\r\nimport { theme } from './theme';\r\nimport { presenceConfig } from './presenceConfig';\r\nimport { headerTheme } from './headerTheme';\r\n\r\nexport const rootReducer: Reducer = combineReducers({\r\n accounts,\r\n commands,\r\n displayMode,\r\n picturesStatus,\r\n theme,\r\n headerTheme,\r\n presenceConfig\r\n});\r\n","import { Middleware } from 'redux';\r\nimport {\r\n IMeControlAppState, IMeControlAccounts, FluxStandardAction, IClientErrorParams,\r\n ActionTypes, ErrorSeverity, IPictureStatusDictionary\r\n} from '@mecontrol/common';\r\nimport { logTelemetryEvent, hasOwn, toJsonable, scrubUrl } from '@mecontrol/web-inline';\r\nimport { filterObject } from '../utilities/telemetry';\r\n\r\n/**\r\n * Error handling middleware that catches any errors in our reducers and logs them\r\n * using our telemetry pipeline\r\n * @param store Store instance used in the middleware\r\n * @param next The middleware-enhanced version of dispatch that this middleware will wrap around.\r\n * This is what should be called to actually dispatch the passed-in action\r\n * @param action Redux action to be dispatched\r\n */\r\nexport const errorHandler: Middleware = store => next => action => {\r\n // Dispatch the action that was received\r\n // If the action is an error action (except for picture load ones, which are expected)\r\n // we log that to our telemetry pipeline\r\n try {\r\n if (action.error && action.type !== ActionTypes.LOAD_PICTURE_URL_FAILED) {\r\n logErrors(store.getState(), action);\r\n }\r\n\r\n return next(action);\r\n }\r\n // The catch block will handle firing any telemetry for errors inside of reducers\r\n catch (err) {\r\n logErrors(store.getState(), action, err);\r\n\r\n // Only re-throw the error if we are in a dev environment\r\n if (process.env.NODE_ENV === 'development') {\r\n //tslint:disable-next-line:no-console\r\n console.error(err);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Log telemetry on errors in our Redux app. If an error, is explicitly passed, then its information\r\n * will be included alongside the current state and action. Otherwise, just the action and state will\r\n * be included.\r\n * @param state Current Redux state when the error handler was invoked\r\n * @param action Action that was being dispatched when the error occurred\r\n * @param error Possible error that is being logged\r\n */\r\nfunction logErrors(state: IMeControlAppState, action: FluxStandardAction, error?: Error): void {\r\n let { state: fState, action: fAction } = filterStateAndAction(state, action);\r\n let errorParams: IClientErrorParams;\r\n let errorDetails: any = {\r\n state: fState,\r\n action: fAction\r\n };\r\n\r\n // When an actual error is being logged, we extract it's details\r\n // for the ClientError event\r\n if (error) {\r\n errorDetails.stackTrace = error.stack;\r\n errorParams = {\r\n eventType: 'ClientError',\r\n name: error.message,\r\n type: 'ReducerError',\r\n details: JSON.stringify(errorDetails),\r\n displayed: false\r\n };\r\n }\r\n // For FAIL Redux actions, we use as message the one from the action itself\r\n else if (action.error) {\r\n let actionErr = action.payload as Error;\r\n errorParams = {\r\n eventType: 'ClientError',\r\n name: actionErr.message,\r\n type: `FailedAction.${action.type}`,\r\n details: JSON.stringify(errorDetails),\r\n displayed: true,\r\n severity: ErrorSeverity.Warning\r\n };\r\n }\r\n // This case should not happen, but we handle it to catch strange errors\r\n else {\r\n errorParams = {\r\n eventType: \"ClientError\",\r\n name: 'No error passed to error handler middleware',\r\n type: 'UnkownErrorHandlerCall',\r\n details: JSON.stringify(errorDetails),\r\n displayed: false,\r\n };\r\n }\r\n\r\n logTelemetryEvent(errorParams);\r\n}\r\n\r\n// Fields to NOT filter out of account state for telemetry\r\n// These are basically our own redux state variables and the type and sign-in status of the account\r\nconst accountFilters = ['*', '!type', '!authenticatedState', '!accountItemStatus'];\r\n\r\n// Filed to NOT filter out of actions for telemetry\r\n// We won't filter accountId because the filtering for that is different (see filterStateAndAction())\r\nconst actionFilters = ['*', '!type', '!error', '!accountId'];\r\n\r\ninterface StateAndAction {\r\n state: IMeControlAppState;\r\n action: FluxStandardAction;\r\n}\r\n\r\n/**\r\n * Filters out the current state and fired action for the purposes of telemetry logging. This means that all\r\n * PII will be filtered out from the accounts part of state (while the rest of it, which is internal and not\r\n * sensitive remains) as well as the action. AccountIds will be replaced with a number and be consistent with\r\n * their previous values (meaning that currentId will match an id in byId and if the action had an account ID\r\n * from a known account, that will match too)\r\n * @param currentState State of the app when an error occurred\r\n * @param action Action that was being fired when an error occurred\r\n */\r\nfunction filterStateAndAction(currentState: IMeControlAppState, action: FluxStandardAction): StateAndAction {\r\n const accounts = currentState.accounts;\r\n const commands = currentState.commands;\r\n const picturesStatus = currentState.picturesStatus;\r\n\r\n // Used to replace account IDs, which are sensitive, with numerical ones\r\n const accountMap = createTranslationMap();\r\n\r\n // Used to replace picture URLs, which may contain sensitive data\r\n const pictureMap = createTranslationMap();\r\n\r\n // Object that will be populated with filtered data from the state\r\n let filteredAccounts: IMeControlAccounts = {\r\n byId: {},\r\n allIds: [],\r\n currentId: ''\r\n };\r\n\r\n // Filter byId portion of state\r\n //tslint:disable-next-line:forin\r\n for (let accountId in accounts.byId) {\r\n if (hasOwn(accounts.byId, accountId)) {\r\n // Log the Id for conversion to a numerical one\r\n // Then filter the account\r\n // Then log the pictureUrl for conversion to number (if there is one)\r\n let account = accounts.byId[accountId];\r\n let newId = accountMap.getValue(accountId);\r\n filteredAccounts.byId[newId] = filterObject(account, accountFilters) as any;\r\n if (account.pictureUrl) {\r\n filteredAccounts.byId[newId].pictureUrl = pictureMap.getValue(account.pictureUrl);\r\n }\r\n }\r\n }\r\n\r\n // Filter allIds\r\n // We do this separately in case there was a lack of consistency between byId and allIds\r\n // (which could be a part of the error)\r\n filteredAccounts.allIds = accounts.allIds.map(accountMap.getValue);\r\n\r\n // Finally, filter our currentId\r\n filteredAccounts.currentId = accounts.currentId && accountMap.getValue(accounts.currentId);\r\n\r\n // Filter commands URLs (just in case)\r\n let filteredCommands = commands && commands.map(com => ({\r\n ...com,\r\n url: typeof com.url === 'string' ? scrubUrl(com.url) : com.url\r\n }));\r\n\r\n // Filter picture URLs (just in case too)\r\n let filteredPicturesStatus: IPictureStatusDictionary = {};\r\n //tslint:disable-next-line:forin\r\n for (let pictureUrl in picturesStatus) {\r\n if (hasOwn(picturesStatus, pictureUrl)) {\r\n let newPictureUrl = pictureMap.getValue(pictureUrl);\r\n filteredPicturesStatus[newPictureUrl] = picturesStatus[pictureUrl];\r\n }\r\n }\r\n\r\n // Filter the action\r\n // Error actions will restore the payload, as it contains an error\r\n // For accountId, we will use the idMap to replace it with a numerical id\r\n let filteredAction = filterObject(action, actionFilters) as FluxStandardAction;\r\n if (action.error) {\r\n // Restore payload, as it contains error information\r\n // It requires special JSON handling though\r\n filteredAction.payload = toJsonable(action.payload);\r\n if (action.meta && action.meta.accountId) {\r\n filteredAction.meta.accountId = accountMap.getValue(action.meta.accountId);\r\n }\r\n }\r\n else {\r\n if (action.payload && action.payload.accountId) {\r\n filteredAction.payload.accountId = accountMap.getValue(action.payload.accountId);\r\n }\r\n }\r\n\r\n return {\r\n state: {\r\n ...currentState,\r\n accounts: filteredAccounts,\r\n commands: filteredCommands,\r\n picturesStatus: filteredPicturesStatus\r\n },\r\n action: filteredAction\r\n };\r\n}\r\n\r\n/**\r\n * Create a map to store values and map them to numbers as a translation\r\n * to scrub the original values away\r\n */\r\nconst createTranslationMap = () => {\r\n let internalMap: Record = {};\r\n let currentValue = 0; // Value to add to the map\r\n\r\n return {\r\n getValue: (value: string) => {\r\n // Any values that are not found in the map, are added to it\r\n let mappedValue = internalMap[value];\r\n if (mappedValue === undefined) {\r\n internalMap[value] = mappedValue = currentValue++;\r\n }\r\n return mappedValue.toString();\r\n }\r\n };\r\n};\r\n","import { Middleware } from 'redux';\nimport { IMeControlAppState } from '@mecontrol/common';\nimport { updateMoment } from '@mecontrol/web-inline';\nimport { getCurrentAccountType } from '../utilities';\n\n/**\n * Middleware meant to be used for telemetry purposes related to our\n * redux state and action\n * @param store Store instance used in the middleware\n * @param next The middleware-enhanced version of dispatch that this middleware\n * will wrap around. This is what should be called to actually dispatch the passed-in action\n * @param action Redux action to be dispatched\n */\nexport const telemetryLayer: Middleware = store => next => action => {\n // Telemetry-related logic to run before an action changes the state goes here\n // doTelemetryStuff();\n\n // Let the action do its thing\n let result = next(action);\n\n // Telemetry-related logic after the state has been changed from the action\n const newState: IMeControlAppState = store.getState();\n const currentAccountType = getCurrentAccountType(newState);\n const totalAccounts = newState.accounts.allIds.length;\n updateMoment(currentAccountType, totalAccounts);\n\n // Return action's result\n return result;\n};\n","import { createStore, compose, applyMiddleware } from 'redux';\r\nimport thunk, { ThunkMiddleware } from 'redux-thunk';\r\nimport { IMeControlAppState, IReduxThunkExtraArg, AllActions, MeControlStore } from '@mecontrol/common';\r\nimport { rootReducer } from '../reducers';\r\nimport { errorHandler } from './errorHandling';\r\nimport { telemetryLayer } from './telemetryLayer';\r\n\r\ndeclare global {\r\n interface Window {\r\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: (options: any) => typeof compose;\r\n }\r\n}\r\n\r\nexport function configureStore(reduxThunkExtraArg: IReduxThunkExtraArg): MeControlStore {\r\n const extensionCompose = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;\r\n const composeEnhancers = (extensionCompose && extensionCompose({ serialize: true })) || compose;\r\n\r\n return createStore(\r\n rootReducer,\r\n composeEnhancers(applyMiddleware(\r\n thunk.withExtraArgument(reduxThunkExtraArg) as ThunkMiddleware,\r\n errorHandler,\r\n telemetryLayer\r\n ))\r\n );\r\n}\r\n","import { Component, RenderableProps } from \"preact\";\nimport { Store } from \"redux\";\nimport { toChildArray } from './toChildArray';\n\n// TODO: Consider the following file which has a smaller Provider implementation\n// https://github.com/developit/unistore/blob/7b1d868b977c1730e277dd74de61867272cc2706/src/integrations/preact.js\n\nexport interface ProviderContext {\n store: Store;\n}\n\nexport interface ProviderProps {\n store: Store;\n}\n\n/**\n * Provider exposes a store (passed as `props.store`) into context.\n * Generally, an entire application is wrapped in a single `` at the root.\n */\nexport class Provider extends Component, never> {\n private store: Store;\n\n constructor(props: ProviderProps) {\n super(props);\n this.store = props.store;\n }\n\n public getChildContext(): ProviderContext {\n return {\n store: this.store\n };\n }\n\n public render(props: RenderableProps>): JSX.Element | null {\n if (props.children) {\n return toChildArray(props.children)[0];\n }\n\n return null;\n }\n}\n","import { ActionTypes, InitOptionsAction, IValidatedMeControlConfiguration } from '@mecontrol/common';\r\n\r\nexport function initOptions(options: IValidatedMeControlConfiguration): InitOptionsAction {\r\n return {\r\n type: ActionTypes.INIT_OPTIONS,\r\n payload: {\r\n options\r\n }\r\n };\r\n}\r\n","import { IAccount, RuntimeDisplayMode, ITheme, ICommand } from '@meControl/public-api';\r\nimport {\r\n ActionTypes,\r\n SetActiveAccountAction,\r\n SetDisplayModeAction,\r\n SetThemeAction,\r\n SetCommandsAction,\r\n SetProfilePictureAction,\r\n SetAccountPictureAction,\r\n RemoveActiveAccountAction,\r\n SetHeaderThemeAction,\r\n RefreshPictureAction,\r\n} from '@mecontrol/common';\r\n\r\n/**\r\n * Replace the currently active account in the control\r\n * @param account Account to set as active\r\n */\r\nexport function setActiveAccount(account: IAccount): SetActiveAccountAction {\r\n return {\r\n type: ActionTypes.SET_ACTIVE_ACCOUNT,\r\n payload: {\r\n account\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Remove the currently active account from state\r\n * @param accountId Id of the currently active account\r\n */\r\nexport function removeActiveAccount(accountId: string): RemoveActiveAccountAction {\r\n return {\r\n type: ActionTypes.REMOVE_ACTIVE_ACCOUNT,\r\n payload: {\r\n accountId\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Sets the display mode of the control\r\n * @param mode Display mode to be configured\r\n */\r\nexport function setDisplayMode(mode: RuntimeDisplayMode): SetDisplayModeAction {\r\n return {\r\n type: ActionTypes.SET_DISPLAY_MODE,\r\n payload: {\r\n mode\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Sets the theme of the control\r\n * @param theme Dark or Light theme\r\n */\r\nexport function setTheme(theme: ITheme): SetThemeAction {\r\n return {\r\n type: ActionTypes.SET_THEME,\r\n payload: {\r\n theme\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Sets the theme of the control\r\n * @param headerTheme Dark or Light theme for the MeControl header\r\n */\r\nexport function setHeaderTheme(headerTheme: ITheme): SetHeaderThemeAction {\r\n return {\r\n type: ActionTypes.SET_HEADER_THEME,\r\n payload: {\r\n headerTheme\r\n }\r\n };\r\n}\r\n\r\nexport function setCommands(commands: ICommand[]): SetCommandsAction {\r\n return {\r\n type: ActionTypes.SET_COMMANDS,\r\n payload: {\r\n commands\r\n }\r\n };\r\n}\r\n\r\nexport function setProfilePicture(newUrl: string, accountId: string): SetProfilePictureAction {\r\n return {\r\n type: ActionTypes.SET_PROFILE_PICTURE,\r\n payload: {\r\n newUrl,\r\n accountId\r\n }\r\n };\r\n}\r\n\r\nexport function setAccountPicture(newUrl: string, accountId: string): SetAccountPictureAction {\r\n return {\r\n type: ActionTypes.SET_ACCOUNT_PICTURE,\r\n payload: {\r\n newUrl,\r\n accountId\r\n }\r\n };\r\n}\r\n\r\nexport function refreshPicture(url: string, apiName: string): RefreshPictureAction {\r\n return {\r\n type: ActionTypes.REFRESH_PICTURE,\r\n payload: {\r\n url\r\n },\r\n meta: {\r\n apiName\r\n }\r\n };\r\n}\r\n","import { PresenceActions, ActionTypes, MeControlThunkAction, UpdatePresenceConfig, UpdatePresenceState } from '@mecontrol/common';\r\nimport { IPresenceState, IPresenceConfig, OnErrorDetail } from '@mecontrol/public-api';\r\nimport { SyntheticEvent } from '@mecontrol/web-inline';\r\n\r\nexport function setPresenceConfig(presenceConfig: IPresenceConfig): UpdatePresenceConfig {\r\n return {\r\n type: ActionTypes.UPDATE_PRESENCE_CONFIG,\r\n payload: {\r\n presenceConfig\r\n }\r\n };\r\n}\r\n\r\nexport function setPresence(presenceState: IPresenceState): UpdatePresenceState {\r\n return {\r\n type: ActionTypes.UPDATE_PRESENCE_STATE,\r\n payload: {\r\n currentPresence: presenceState\r\n }\r\n };\r\n}\r\n\r\nexport function setPresenceToPartner(presenceState: IPresenceState): MeControlThunkAction {\r\n return (dispatch, getState, { syntheticEventTarget }) => {\r\n try {\r\n dispatch({\r\n type: ActionTypes.UPDATE_PRESENCE_STATE_TO_PARTNER_SUCCESS,\r\n payload: {\r\n currentPresence: presenceState\r\n }\r\n });\r\n syntheticEventTarget.dispatchEvent(new SyntheticEvent(\"presenceupdated\", presenceState));\r\n } catch (e) {\r\n dispatch({\r\n type: ActionTypes.UPDATE_PRESENCE_STATE_TO_PARTNER_FAIL,\r\n });\r\n const detail: OnErrorDetail = { type: \"PresenceError\", error: e, data: presenceState };\r\n syntheticEventTarget.dispatchEvent(new SyntheticEvent(\"error\", detail));\r\n }\r\n };\r\n}\r\n","import { IAccount, ICommand, IPublicApiProxy, MeControlEventType, RuntimeDisplayMode, ITheme, IPresenceConfig, IPresenceState } from '@meControl/public-api';\r\nimport { MeControlStore, ISyntheticEventTarget } from '@mecontrol/common';\r\nimport {\r\n setActiveAccount, setDisplayMode, setTheme, setCommands,\r\n setProfilePicture, setAccountPicture, removeActiveAccount, setHeaderTheme, refreshPicture\r\n} from './actions/publicApiActions';\r\nimport { getCurrentAccount, getAccountId } from '../src/utilities/accounts';\r\nimport { getRememberedAccounts } from './actions/authActions';\r\nimport { setPresence, setPresenceConfig } from './actions/presenceActions';\r\nimport { setQueryParams, getCookie } from './utilities';\r\n\r\nexport function createController(store: MeControlStore, eventTarget: ISyntheticEventTarget): IPublicApiProxy {\r\n const currentAccount = () => getCurrentAccount(store.getState().accounts);\r\n\r\n return {\r\n setActiveAccount(activeAccount: IAccount | null): void {\r\n if (activeAccount) {\r\n store.dispatch(setActiveAccount(activeAccount));\r\n }\r\n else {\r\n const account = currentAccount();\r\n if (account) {\r\n store.dispatch(removeActiveAccount(getAccountId(account)));\r\n }\r\n }\r\n\r\n // Fire off getting remembered accounts to get the latest state\r\n // and stay up to date\r\n store.dispatch(getRememberedAccounts());\r\n },\r\n\r\n setCommands(commands: ICommand[]): void {\r\n store.dispatch(setCommands(commands));\r\n },\r\n\r\n setAccountPicture(newUrl: string): void {\r\n const account = currentAccount();\r\n if (account) {\r\n store.dispatch(setAccountPicture(newUrl, getAccountId(account)));\r\n }\r\n },\r\n\r\n setProfilePicture(newUrl: string): void {\r\n const account = currentAccount();\r\n if (account) {\r\n store.dispatch(setProfilePicture(newUrl, getAccountId(account)));\r\n }\r\n },\r\n\r\n refreshAccountPicture(breakCache?: boolean): void {\r\n const account = currentAccount();\r\n\r\n if (account && account.pictureUrl) {\r\n if (breakCache) {\r\n const newPictureUrl = setQueryParams(account.pictureUrl, {ck: getCookie('upck') || `${Math.floor(Math.random() * 100000000)}`});\r\n store.dispatch(setAccountPicture(newPictureUrl, getAccountId(account)));\r\n } else {\r\n store.dispatch(refreshPicture(account.pictureUrl, 'refreshAccountPicture()'));\r\n }\r\n }\r\n },\r\n\r\n refreshProfilePicture(breakCache?: boolean): void {\r\n const account = currentAccount();\r\n\r\n if (account && account.profile && account.profile.profilePictureUrl) {\r\n if (breakCache) {\r\n const newPictureUrl = setQueryParams(account.profile.profilePictureUrl, {ck: getCookie('upck') || `${Math.floor(Math.random() * 100000000)}`});\r\n store.dispatch(setProfilePicture(newPictureUrl, getAccountId(account)));\r\n } else {\r\n store.dispatch(refreshPicture(account.profile.profilePictureUrl, 'refreshProfilePicture()'));\r\n }\r\n }\r\n },\r\n\r\n setTheme(theme: ITheme): void {\r\n store.dispatch(setTheme(theme));\r\n store.dispatch(setHeaderTheme(theme));\r\n },\r\n\r\n setHeaderTheme(headerTheme: ITheme): void {\r\n store.dispatch(setHeaderTheme(headerTheme));\r\n },\r\n\r\n setDisplayMode(mode: RuntimeDisplayMode): void {\r\n store.dispatch(setDisplayMode(mode));\r\n },\r\n\r\n loadPresenceConfig(config: IPresenceConfig): void {\r\n store.dispatch(setPresenceConfig(config));\r\n },\r\n\r\n setPresence(presence: IPresenceState): void {\r\n store.dispatch(setPresence(presence));\r\n },\r\n\r\n addEventListener(type: MeControlEventType, callback: any): void {\r\n eventTarget.addEventListener(type, callback);\r\n },\r\n\r\n removeEventListener(type: MeControlEventType, callback: any): void {\r\n eventTarget.removeEventListener(type, callback);\r\n }\r\n };\r\n}\r\n","import { h, FunctionalComponent } from 'preact';\r\nimport { IAccountState, PageAction } from '@mecontrol/common';\r\nimport { getString, createId } from '@mecontrol/web-inline';\r\nimport { LinkButton } from './LinkButton';\r\nimport { ProfilePicture } from './ProfilePicture';\r\nimport { format, isAadWithEditPicUrl, raiseSyntheticEvent } from '../utilities';\r\n\r\nexport interface IProfilePictureOverlayProps {\r\n id: string;\r\n currentAccount: IAccountState;\r\n glyphClassOverride?: string;\r\n ariaLabel?: string;\r\n title?: string;\r\n}\r\n\r\nexport const ProfilePictureOverlay: FunctionalComponent = props => {\r\n // Assumption is made that a verification that the profile.editProfilePictureUrl was specified before loading this component.\r\n // In other cases,\r\n // when account type is AAD and editPictureUrl field is present, use the value of editPictureUrl\r\n // use the default edit picture url\r\n let uri = props.currentAccount && props.currentAccount.profile\r\n ? (props.currentAccount.profile.editProfilePictureUrl)\r\n : (props.currentAccount && isAadWithEditPicUrl(props.currentAccount))\r\n ? props.currentAccount.editPictureUrl\r\n : format('https://account.microsoft.com/profile/edit-picture?username={0}&ref=MeControl', props.currentAccount ? encodeURIComponent(props.currentAccount.memberName) : '');\r\n\r\n return (\r\n uri}\r\n ariaLabel={getString('updatephotoa11y')}\r\n title={getString('updatephotoa11y')}\r\n onClick={mouseEvent =>\r\n raiseSyntheticEvent(\r\n 'photochangeclick',\r\n { uri, account: props.currentAccount },\r\n mouseEvent\r\n )\r\n }\r\n openInNewTab={true}\r\n >\r\n \r\n \r\n );\r\n};\r\n","import { ComponentFactory, FunctionalComponent, h } from 'preact';\nimport { createId, ME } from '@mecontrol/web-inline';\nimport {\n IMeControlAccounts,\n IMeControlAppState\n} from '@mecontrol/common';\nimport { getCurrentAccount, setQueryParams, isAadLike } from '../utilities';\nimport { LinkButton } from './LinkButton';\nimport { connect, MapDispatchToProps, MapStateToProps } from '../core/connect';\nimport { cacheAuthAppDismissal } from '../actions/cacheActions';\n\nexport interface IAuthAppUpsellProps {\n currentAccountid?: string;\n}\nexport interface IAuthAppUpsellStateProps {\n accounts: IMeControlAccounts;\n}\nexport interface IAuthAppUpsellStateDispatch {\n dismissAuthApp: (accountId: string) => void;\n}\nexport type IAuthAppUpsellFullProps = IAuthAppUpsellProps &\n IAuthAppUpsellStateProps &\n IAuthAppUpsellStateDispatch;\n\nconst AuthAppUpsellImpl: FunctionalComponent | null =\nprops => {\n let uri = ME.Config.authAppUpsellUrl;\n // for now, don't display banner for non english-speaking market\n if (!uri || ME.Config.mkt.substring(0,2).toLowerCase() !== \"en\") {\n return null;\n }\n const { accounts, dismissAuthApp } = props;\n const currentAccount = getCurrentAccount(accounts);\n // Do not show Auth App Upsell\n if (\n !currentAccount ||\n currentAccount.showAuthApp === false ||\n isAadLike(currentAccount) || // TODO: REMOVE WHEN ENABLED FOR AAD\n (!isAadLike(currentAccount) && currentAccount.hA)\n ) {\n return null;\n }\n let banner = 'Set up Microsoft Authenticator';\n let CloseButton = (\n {\n dismissAuthApp(accounts.currentId);\n }}\n >\n
\n \n );\n\n return (\n
\n setQueryParams(uri, {\"uaid\": currentAccount.uaid})}\n openInNewTab={true}\n uaid={currentAccount.uaid}\n >\n
\n {banner}\n \n {CloseButton}\n
\n );\n };\n\nconst mapStateToProps: MapStateToProps<\n IMeControlAppState,\n IAuthAppUpsellStateProps\n> = state => ({ accounts: state.accounts });\nconst mapDispatchToProps: MapDispatchToProps<\n IMeControlAppState,\n IAuthAppUpsellStateDispatch\n> = dispatch => ({\n dismissAuthApp(accountId): void {\n dispatch(cacheAuthAppDismissal(accountId));\n }\n});\nexport const AuthAppUpsell: ComponentFactory = connect(\n mapStateToProps,\n mapDispatchToProps\n)(AuthAppUpsellImpl) as any;\n","import { render, h } from 'preact';\r\n// import \"preact/debug\"; // Preact debug is wrapped in a NODE_ENV check and so is only included in debug builds\r\nimport { IPublicApiProxy } from '@mecontrol/public-api';\r\nimport { PageName, Scenario, ScenarioStage, ContentSource } from '@mecontrol/common';\r\nimport { MainInit, ME, loadCss, createError, logTelemetryEvent, getTimeSinceStart } from '@mecontrol/web-inline';\r\nimport { Root } from './components/Root';\r\nimport { configureStore } from './store/configureStore';\r\nimport { Provider } from './core/Provider';\r\nimport { initOptions } from './actions/initOptions';\r\nimport { getRememberedAccounts } from './actions/authActions';\r\nimport { createController } from './publicApiController';\r\nimport { getAuthProvider } from './api/auth';\r\nimport { onLoadUntilUrgent, delayUntilAnimationFrame, loadCore } from './utilities';\r\nimport { hydrateFromCache } from './actions/cacheActions';\r\n\r\nexport { h, Component, FunctionalComponent } from 'preact';\r\nexport * from './core/Provider';\r\nexport * from './core/connect';\r\nexport * from './core/toChildArray';\r\nexport * from './utilities';\r\nexport * from './components/ProfilePicture';\r\nexport * from './components/ProfilePictureOverlay';\r\nexport * from './components/LinkButton';\r\nexport * from './components/Tooltip';\r\nexport * from './components/TruncateText';\r\nexport * from './components/ScreenReaderText';\r\nexport * from './components/FocusVisible';\r\nexport * from './components/AuthAppUpsell';\r\nexport * from './actions/presenceActions';\r\n\r\nexport * from './api/auth';\r\n\r\nexport const init: MainInit = (options, setController) => {\r\n if (!options) {\r\n throw createError(\"Options required\");\r\n }\r\n\r\n const container = options.shadowDOMContainerElement || document.getElementById(options.containerId);\r\n if (!container) {\r\n throw createError(`Could not find element with id ${options.containerId}`);\r\n }\r\n\r\n while (container.firstChild) {\r\n container.removeChild(container.firstChild);\r\n }\r\n\r\n loadCss(ME.CssmeBoot);\r\n\r\n const authProvider = getAuthProvider(options);\r\n const syntheticEventTarget = options.syntheticEventTarget;\r\n\r\n const store = configureStore({ authProvider, syntheticEventTarget });\r\n\r\n store.dispatch(initOptions(options));\r\n\r\n // setup the new controller, but keep a handle to it because...\r\n let publicApiProxy: IPublicApiProxy = createController(store, syntheticEventTarget);\r\n setController(publicApiProxy);\r\n\r\n // TODO: add a prop for the SyntheticEventTarget to pass down so that we can use it later in Root for expand/collapse events\r\n render(\r\n \r\n \r\n ,\r\n container\r\n );\r\n\r\n logTelemetryEvent({\r\n eventType: 'ContentUpdate',\r\n content: {\r\n id: PageName.initial,\r\n source: ContentSource.UX\r\n },\r\n loadTime: getTimeSinceStart()\r\n });\r\n\r\n onLoadUntilUrgent().then(() => {\r\n store.dispatch(getRememberedAccounts()).then(() => {\r\n store.dispatch(hydrateFromCache());\r\n });\r\n });\r\n\r\n loadCore().then(meCore => {\r\n meCore.enhanceTelemetry();\r\n });\r\n\r\n delayUntilAnimationFrame(() => {\r\n logTelemetryEvent({\r\n eventType: 'TrackedScenario',\r\n scenario: Scenario.Interactive,\r\n previousAction: ScenarioStage.Start,\r\n action: ScenarioStage.End,\r\n success: true,\r\n durationMs: getTimeSinceStart(),\r\n details: 'Web header'\r\n });\r\n });\r\n};\r\n"],"names":["VNode","options","stack","EMPTY_CHILDREN","h","nodeName","attributes","children","lastSimple","child","simple","i","arguments","length","push","pop","undefined","String","p","key","extend","obj","props","applyRef","ref","value","current","defer","Promise","resolve","then","bind","setTimeout","cloneElement","vnode","slice","call","NO_RENDER","SYNC_RENDER","isSameNodeType","hydrating","node","isNamedNode","normalizedNodeName","document","removeChild","old","name","style","toLowerCase","parent","idiff","flushMounts","vnodeName","dom","vchildren","dangerouslySetInnerHTML","originalChildren","keyed","min","childrenLen","vlen","recollectNodeTree","_component","removeChildren","next","attrs","Ctor","prototype","context","nextBase","constructor","component","state","previousProps","previousState","isUpdate","base","snapshot","_dirty","render","childComponent","inst","cbase","mountAll","isChild","c","oldDom","originalComponent","beforeUnmount","_disable","_renderCallbacks","ponyfill","$$observable","createError","hasOwn","ME","getRootDomainUrl","w","getPageLocation","perfNow","logTelemetryEvent","getString","requestAnimationFrame","assertNever","meImport","getOptions","SyntheticEvent","isArray","promiseFinally","createId","mapStateToProps","mapDispatchToProps","id","toJsonable","_a","getRememberedAccounts","getTimeSinceStart","scrubUrl","updateMoment","loadCss"],"mappings":"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"}