{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/(webpack)-polyfill-injector/src/loader.js?4fc5","webpack://[name]/./src/ps/index.js"],"names":["root","factory","exports","module","define","amd","this","webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","5","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","oldJsonpFunction","slice","main","polyfills","Array","self","String","Request","e","window","indexOf","js","document","createElement","src","join","onload","onerror","message","console","error","head","appendChild","postRobot","require","whitelist","process","split","map","trim","Storages","_timestamp","Date","now","getTime","hexEncode","charCodeAt","toString","hexDecode","hexes","match","back","fromCharCode","parseInt","_ctx","context","storage","initNamespaceStorage","localStorage","set","clean_item","item","entity","entityID","entity_id","icon","entity_icon","domains","domain","last_refresh","last_use","title","get_entity","id","isSet","check_access","event","some","origin","endsWith","on","parent","ts","undefined","is_valid","keys","filter","k","sort","a","b","forEach","remove","gc","count","Error"],"mappings":"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","file":"ps.0c088da65e7fb4f40a8c.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ps\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ps\"] = factory();\n\telse\n\t\troot[\"ps\"] = factory();\n})(this, function() {\nreturn "," \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t5: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = this[\"webpackJsonp_name_\"] = this[\"webpackJsonp_name_\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([67,0,7]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// Webpack Polyfill Injector\nfunction main() {\n require(\"./src/ps/index.js\");\n}\nvar polyfills = function() {\n return [\n /* Array.prototype.filter */ (\"filter\"in Array.prototype\n) ? 0 : 1,\n /* Array.prototype.findIndex */ (\"findIndex\"in Array.prototype\n) ? 0 : 1,\n /* Object.values */ (\"values\"in Object\n) ? 0 : 1,\n /* Promise */ (\"Promise\"in self\n) ? 0 : 1,\n /* String.prototype.endsWith */ (\"endsWith\"in String.prototype\n) ? 0 : 1,\n /* String.prototype.includes */ (\"includes\"in String.prototype\n) ? 0 : 1,\n /* fetch */ (\"fetch\"in self&&\"Request\"in self&&function(){try{return\"signal\"in new Request(\"\")}catch(e){return!1}}()\n) ? 0 : 1\n ];\n}.call(window);\nif (polyfills.indexOf(1) === -1) {\n main();\n} else {\n var js = document.createElement('script');\n js.src = \"/polyfills.5ecd3369cdb391f75a87acfb794e6904.\" + polyfills.join('') + '.js';\n js.onload = main;\n js.onerror = function onError(message) {\n console.error('Could not load the polyfills: ' + message);\n };\n document.head.appendChild(js);\n}","const postRobot = require(\"post-robot\");\nlet whitelist = [];\nif (process.env.WHITELIST && process.env.WHITELIST.length > 0) {\n whitelist = process.env.WHITELIST.split(',').map(s => s.trim())\n}\nconst Storages = require('@theidentityselector/js-storage');\n\nconst cache_time = 60 * 10 * 1000;\n\nif (!Date.now) {\n Date.now = function() { return new Date().getTime(); }\n}\n\nfunction _timestamp() {\n return Date.now();\n}\n\nString.prototype.hexEncode = function(){\n let hex, i;\n\n let result = \"\";\n for (i=0; i _ctx(n));\n }\n\n keys() {\n let _keys = {};\n this.contexts.forEach(ctx => ctx.keys().forEach(k => _keys[k]=true));\n return _keys.keys();\n }\n\n get(k) {\n let ctx = this.contexts.find(ctx => ctx.isSet(k));\n return ctx ? ctx.get(k) : undefined;\n }\n\n set(k, v) {\n this.contexts[0].set(k,v)\n }\n\n isSet(k) {\n let ctx = this.contexts.find(ctx => ctx.isSet(k));\n return ctx ? true : false;\n }\n\n distance(context) {\n return this.contexts.findIndex(ctx => ctx.get('_name') === context);\n }\n}\n\nfunction _ctx(context) {\n if (!context) {\n context = process.env.DEFAULT_CONTEXT\n }\n let ns = Storages.initNamespaceStorage(context);\n let storage = ns.localStorage;\n storage.set('_name', context);\n return storage;\n}\n\nfunction is_valid(item, ts) {\n return item !== undefined && item.last_refresh !== undefined && item.last_refresh + cache_time > ts;\n}\n\nfunction clean_item(item) {\n if (item.entity) {\n let entity = item.entity;\n if (entity.entityID && !entity.entity_id) {\n entity.entity_id = entity.entityID;\n }\n if (entity.icon && !entity.entity_icon) {\n entity.entity_icon = entity.icon;\n }\n if (entity.domains) {\n let domains = entity.domains.split(';') || [];\n entity.domain = domains[0];\n }\n if (entity.last_refresh && !entity.last_use) {\n entity.last_use = entity.last_refresh;\n }\n if (!entity.title) {\n entity.title = entity.entity_id;\n }\n }\n return item;\n}\n\nfunction gc(storage) {\n storage.keys().filter(k => k !== undefined && k !== '_name')\n .map(k => clean_item(get_entity(storage, k)))\n .sort(function(a,b) {\n return b.last_use - a.last_use;\n }).slice(3).forEach(function (item) {\n storage.remove(item.entity.entity_id.hexEncode());\n });\n}\n\nfunction get_entity(storage, id) {\n if (storage.isSet(id)) {\n return storage.get(id);\n } else {\n return undefined;\n }\n}\n\nfunction check_access(event) {\n if (whitelist && whitelist.length > 0) {\n if (!whitelist.some(o => { return event.origin.endsWith(o) })) {\n throw `Access denied from ${event.origin}`\n }\n }\n}\n\npostRobot.on('update', {window: window.parent}, function(event) {\n check_access(event);\n let entity = event.data.entity;\n let storage = _ctx(event.data.context);\n let now = _timestamp();\n if (entity.entityID && !entity.entity_id) {\n entity.entity_id = entity.entityID;\n }\n let id = entity.entity_id.hexEncode();\n let item = get_entity(storage, id);\n if (!is_valid(item, now)) {\n item = { \"last_refresh\": now, \"last_use\": now, \"entity\": entity };\n } else {\n item.last_refresh = now;\n item.last_use = now;\n item.entity = entity;\n }\n storage.set(id, clean_item(item));\n gc(storage);\n return item;\n});\n\npostRobot.on('entities', {window: window.parent}, function(event) {\n check_access(event);\n let storage = _ctx(event.data.context);\n let count = event.data.count;\n if (count === undefined) {\n count = 3;\n }\n let now = _timestamp();\n return storage.keys().filter(k => k !== undefined && k !== '_name')\n .map(k => clean_item(get_entity(storage, k)))\n .sort(function(a,b) {\n return a.last_use - b.last_use;\n }).slice(0, count);\n});\n\npostRobot.on('entity', {window: window.parent}, function(event) {\n check_access(event);\n let storage = _ctx(event.data.context);\n let entity_id = event.data.entity_id;\n if (!entity_id) {\n throw new Error(\"Unable to find entity_id in request\")\n }\n let id = entity_id.hexEncode();\n let item = get_entity(storage, id);\n if (item) {\n let now = _timestamp();\n item.last_use = now;\n storage.set(id, clean_item(item));\n }\n return item;\n});\n\npostRobot.on('remove', {window: window.parent}, function(event) {\n check_access(event);\n let storage = _ctx(event.data.context);\n let entity_id = event.data.entity_id;\n if (entity_id === undefined) {\n } else {\n storage.remove(entity_id.hexEncode());\n }\n});\n"],"sourceRoot":""}