From c977018c01dccfe026bc96ca21ca17913564656e Mon Sep 17 00:00:00 2001 From: Wytamma Wirth Date: Sat, 2 Mar 2024 16:56:29 +1100 Subject: [PATCH] :art: fix login loading --- backend/beastiary/webapp-dist/index.html | 2 +- .../js/{app.e86e758b.js => app.ae01b4f2.js} | 4 ++-- .../js/{app.e86e758b.js.map => app.ae01b4f2.js.map} | 2 +- backend/beastiary/webapp-dist/js/login.a133ba4e.js | 2 ++ .../beastiary/webapp-dist/js/login.a133ba4e.js.map | 1 + backend/beastiary/webapp-dist/js/login.d0ac523d.js | 2 -- .../beastiary/webapp-dist/js/login.d0ac523d.js.map | 1 - ...he-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js} | 12 ++++++------ backend/beastiary/webapp-dist/service-worker.js | 2 +- frontend/src/views/Login.vue | 13 ++++++++++--- 10 files changed, 24 insertions(+), 17 deletions(-) rename backend/beastiary/webapp-dist/js/{app.e86e758b.js => app.ae01b4f2.js} (99%) rename backend/beastiary/webapp-dist/js/{app.e86e758b.js.map => app.ae01b4f2.js.map} (99%) create mode 100644 backend/beastiary/webapp-dist/js/login.a133ba4e.js create mode 100644 backend/beastiary/webapp-dist/js/login.a133ba4e.js.map delete mode 100644 backend/beastiary/webapp-dist/js/login.d0ac523d.js delete mode 100644 backend/beastiary/webapp-dist/js/login.d0ac523d.js.map rename backend/beastiary/webapp-dist/{precache-manifest.fa6a2a3a4d2c58c79b67d9d3c6f38b5f.js => precache-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js} (89%) diff --git a/backend/beastiary/webapp-dist/index.html b/backend/beastiary/webapp-dist/index.html index 4ad3612..14d5c0b 100644 --- a/backend/beastiary/webapp-dist/index.html +++ b/backend/beastiary/webapp-dist/index.html @@ -1,3 +1,3 @@ Beastiary
\ No newline at end of file + }
\ No newline at end of file diff --git a/backend/beastiary/webapp-dist/js/app.e86e758b.js b/backend/beastiary/webapp-dist/js/app.ae01b4f2.js similarity index 99% rename from backend/beastiary/webapp-dist/js/app.e86e758b.js rename to backend/beastiary/webapp-dist/js/app.ae01b4f2.js index 1232a9c..66054a6 100644 --- a/backend/beastiary/webapp-dist/js/app.e86e758b.js +++ b/backend/beastiary/webapp-dist/js/app.ae01b4f2.js @@ -1,2 +1,2 @@ -!function(t){function webpackJsonpCallback(r){for(var a,u,l=r[0],p=r[1],_=r[2],h=r[3]||[],b=0,m=[];b0&&t.notifications[0]}},i=Object(o.getStoreAccessors)("").read,u=i(c.dashboardMiniDrawer),l=i(c.dashboardShowDrawer),p=i(c.isLoggedIn),d=i(c.loginError),_=(i(c.token),i(c.firstNotification)),h=i(c.disconnected)},"5f03":function(t,r,a){"use strict";a.d(r,"a",(function(){return o})),a.d(r,"b",(function(){return c}));var o="".concat(""),c="Beastiary"},"5f86":function(t,r,a){"use strict";var o=a("2b0e"),c=a("8c4f");o.default.use(c.a),r.a=new c.a({mode:"history",base:"/",routes:[{path:"/",component:function component(){return a.e("start").then(a.bind(null,"cd28"))},children:[{path:"login",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("login~main-dashboard"),a.e("login")]).then(a.bind(null,"a55b"))}},{path:"404",component:function component(){return a.e("not-found").then(a.bind(null,"8cdb"))}},{path:"main",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("main")]).then(a.bind(null,"6b61"))},children:[{path:"dashboard",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("login~main-dashboard"),a.e("main-dashboard")]).then(a.bind(null,"f021"))}}]}]},{path:"/*",redirect:"/404"}]})},"635a":function(t,r,a){"use strict";a.d(r,"i",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"e",(function(){return l})),a.d(r,"g",(function(){return p})),a.d(r,"f",(function(){return d})),a.d(r,"h",(function(){return _})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"b",(function(){return m}));var o=a("e8fb"),c={setToken:function setToken(t,r){t.token=r},setLoggedIn:function setLoggedIn(t,r){t.isLoggedIn=r},setLogInError:function setLogInError(t,r){t.logInError=r},setDisconnected:function setDisconnected(t,r){t.disconnected=r},setDashboardMiniDrawer:function setDashboardMiniDrawer(t,r){t.dashboardMiniDrawer=r},setDashboardShowDrawer:function setDashboardShowDrawer(t,r){t.dashboardShowDrawer=r},addNotification:function addNotification(t,r){t.notifications.push(r)},removeNotification:function removeNotification(t,r){t.notifications=t.notifications.filter((function(t){return t!==r}))}},i=Object(o.getStoreAccessors)("").commit,u=i(c.setDashboardMiniDrawer),l=i(c.setDashboardShowDrawer),p=i(c.setLoggedIn),d=i(c.setLogInError),_=i(c.setToken),h=i(c.addNotification),b=i(c.removeNotification),m=i(c.setDisconnected)},"72e7":function(t,r,a){"use strict";a.d(r,"a",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"c",(function(){return l})),a.d(r,"b",(function(){return p}));var o=a("e8fb"),c={traces:function traces(t){return t.traces},loadingSamples:function loadingSamples(t){return t.loadingSamples},activeTraceIDs:function activeTraceIDs(t){return Object.values(t.traces).filter((function(t){return t.isActive})).map((function(t){return t.id}))}},i=Object(o.getStoreAccessors)("").read,u=i(c.traces),l=i(c.loadingSamples),p=i(c.activeTraceIDs)},"7f5d":function(t,r,a){"use strict";a.d(r,"a",(function(){return p}));var o=a("a34a"),c=a.n(o),i=a("5f03"),u=a("bc3a"),l=a.n(u);function asyncGeneratorStep(t,r,a,o,c,i,u){try{var l=t[i](u),p=l.value}catch(t){return void a(t)}l.done?r(p):Promise.resolve(p).then(o,c)}function _asyncToGenerator(t){return function(){var r=this,a=arguments;return new Promise((function(o,c){var i=t.apply(r,a);function _next(t){asyncGeneratorStep(i,o,c,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(i,o,c,_next,_throw,"throw",t)}_next(void 0)}))}}function authHeaders(t){return{headers:{Authorization:"Bearer ".concat(t)},params:{}}}var p={getToken:function getToken(t){return _asyncToGenerator(c.a.mark((function _callee(){return c.a.wrap((function _callee$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/security/token"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee)})))()},getTraces:function getTraces(t){return _asyncToGenerator(c.a.mark((function _callee2(){return c.a.wrap((function _callee2$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/traces/"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee2)})))()},createTrace:function createTrace(t,r){return _asyncToGenerator(c.a.mark((function _callee3(){return c.a.wrap((function _callee3$(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",l.a.post("".concat(i.a,"/api/traces/"),r,authHeaders(t)));case 1:case"end":return a.stop()}}),_callee3)})))()},getSamples:function getSamples(t,r){var a=arguments;return _asyncToGenerator(c.a.mark((function _callee4(){var o,u,p;return c.a.wrap((function _callee4$(c){for(;;)switch(c.prev=c.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:0,u=a.length>3&&void 0!==a[3]?a[3]:100,(p=authHeaders(t)).params={skip:o,limit:u},c.abrupt("return",l.a.get("".concat(i.a,"/api/traces/").concat(r.id,"/samples"),p));case 5:case"end":return c.stop()}}),_callee4)})))()},listDirectory:function listDirectory(t,r){return _asyncToGenerator(c.a.mark((function _callee5(){var a;return c.a.wrap((function _callee5$(o){for(;;)switch(o.prev=o.next){case 0:return(a=authHeaders(t)).params={path:r},o.abrupt("return",l.a.get("".concat(i.a,"/api/explorer/"),a));case 3:case"end":return o.stop()}}),_callee5)})))()}}},8041:function(t,r,a){"use strict";a.d(r,"h",(function(){return i})),a.d(r,"g",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"b",(function(){return d})),a.d(r,"e",(function(){return _})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"d",(function(){return m}));var o=a("e8fb"),c=a("2b0e");function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,r);var a=Object.prototype.toString.call(t).slice(8,-1);"Object"===a&&t.constructor&&(a=t.constructor.name);if("Map"===a||"Set"===a)return Array.from(t);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return _arrayLikeToArray(t,r)}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,c=function F(){};return{s:c,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){l=!0,i=t},f:function f(){try{u||null==a.return||a.return()}finally{if(l)throw i}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=new Array(r);a0&&t.notifications[0]}},i=Object(o.getStoreAccessors)("").read,u=i(c.dashboardMiniDrawer),l=i(c.dashboardShowDrawer),p=i(c.isLoggedIn),d=i(c.loginError),_=(i(c.token),i(c.firstNotification)),h=i(c.disconnected)},"5f03":function(t,r,a){"use strict";a.d(r,"a",(function(){return o})),a.d(r,"b",(function(){return c}));var o="".concat(""),c="Beastiary"},"5f86":function(t,r,a){"use strict";var o=a("2b0e"),c=a("8c4f");o.default.use(c.a),r.a=new c.a({mode:"history",base:"/",routes:[{path:"/",component:function component(){return a.e("start").then(a.bind(null,"cd28"))},children:[{path:"login",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("login~main-dashboard"),a.e("login")]).then(a.bind(null,"a55b"))}},{path:"404",component:function component(){return a.e("not-found").then(a.bind(null,"8cdb"))}},{path:"main",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("main")]).then(a.bind(null,"6b61"))},children:[{path:"dashboard",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("login~main-dashboard"),a.e("main-dashboard")]).then(a.bind(null,"f021"))}}]}]},{path:"/*",redirect:"/404"}]})},"635a":function(t,r,a){"use strict";a.d(r,"i",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"e",(function(){return l})),a.d(r,"g",(function(){return p})),a.d(r,"f",(function(){return d})),a.d(r,"h",(function(){return _})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"b",(function(){return m}));var o=a("e8fb"),c={setToken:function setToken(t,r){t.token=r},setLoggedIn:function setLoggedIn(t,r){t.isLoggedIn=r},setLogInError:function setLogInError(t,r){t.logInError=r},setDisconnected:function setDisconnected(t,r){t.disconnected=r},setDashboardMiniDrawer:function setDashboardMiniDrawer(t,r){t.dashboardMiniDrawer=r},setDashboardShowDrawer:function setDashboardShowDrawer(t,r){t.dashboardShowDrawer=r},addNotification:function addNotification(t,r){t.notifications.push(r)},removeNotification:function removeNotification(t,r){t.notifications=t.notifications.filter((function(t){return t!==r}))}},i=Object(o.getStoreAccessors)("").commit,u=i(c.setDashboardMiniDrawer),l=i(c.setDashboardShowDrawer),p=i(c.setLoggedIn),d=i(c.setLogInError),_=i(c.setToken),h=i(c.addNotification),b=i(c.removeNotification),m=i(c.setDisconnected)},"72e7":function(t,r,a){"use strict";a.d(r,"a",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"c",(function(){return l})),a.d(r,"b",(function(){return p}));var o=a("e8fb"),c={traces:function traces(t){return t.traces},loadingSamples:function loadingSamples(t){return t.loadingSamples},activeTraceIDs:function activeTraceIDs(t){return Object.values(t.traces).filter((function(t){return t.isActive})).map((function(t){return t.id}))}},i=Object(o.getStoreAccessors)("").read,u=i(c.traces),l=i(c.loadingSamples),p=i(c.activeTraceIDs)},"7f5d":function(t,r,a){"use strict";a.d(r,"a",(function(){return p}));var o=a("a34a"),c=a.n(o),i=a("5f03"),u=a("bc3a"),l=a.n(u);function asyncGeneratorStep(t,r,a,o,c,i,u){try{var l=t[i](u),p=l.value}catch(t){return void a(t)}l.done?r(p):Promise.resolve(p).then(o,c)}function _asyncToGenerator(t){return function(){var r=this,a=arguments;return new Promise((function(o,c){var i=t.apply(r,a);function _next(t){asyncGeneratorStep(i,o,c,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(i,o,c,_next,_throw,"throw",t)}_next(void 0)}))}}function authHeaders(t){return{headers:{Authorization:"Bearer ".concat(t)},params:{}}}var p={getToken:function getToken(t){return _asyncToGenerator(c.a.mark((function _callee(){return c.a.wrap((function _callee$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/security/token"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee)})))()},getTraces:function getTraces(t){return _asyncToGenerator(c.a.mark((function _callee2(){return c.a.wrap((function _callee2$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/traces/"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee2)})))()},createTrace:function createTrace(t,r){return _asyncToGenerator(c.a.mark((function _callee3(){return c.a.wrap((function _callee3$(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",l.a.post("".concat(i.a,"/api/traces/"),r,authHeaders(t)));case 1:case"end":return a.stop()}}),_callee3)})))()},getSamples:function getSamples(t,r){var a=arguments;return _asyncToGenerator(c.a.mark((function _callee4(){var o,u,p;return c.a.wrap((function _callee4$(c){for(;;)switch(c.prev=c.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:0,u=a.length>3&&void 0!==a[3]?a[3]:100,(p=authHeaders(t)).params={skip:o,limit:u},c.abrupt("return",l.a.get("".concat(i.a,"/api/traces/").concat(r.id,"/samples"),p));case 5:case"end":return c.stop()}}),_callee4)})))()},listDirectory:function listDirectory(t,r){return _asyncToGenerator(c.a.mark((function _callee5(){var a;return c.a.wrap((function _callee5$(o){for(;;)switch(o.prev=o.next){case 0:return(a=authHeaders(t)).params={path:r},o.abrupt("return",l.a.get("".concat(i.a,"/api/explorer/"),a));case 3:case"end":return o.stop()}}),_callee5)})))()}}},8041:function(t,r,a){"use strict";a.d(r,"h",(function(){return i})),a.d(r,"g",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"b",(function(){return d})),a.d(r,"e",(function(){return _})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"d",(function(){return m}));var o=a("e8fb"),c=a("2b0e");function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,r);var a=Object.prototype.toString.call(t).slice(8,-1);"Object"===a&&t.constructor&&(a=t.constructor.name);if("Map"===a||"Set"===a)return Array.from(t);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return _arrayLikeToArray(t,r)}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,c=function F(){};return{s:c,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){l=!0,i=t},f:function f(){try{u||null==a.return||a.return()}finally{if(l)throw i}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=new Array(r);a = {\n modules: {\n main: mainModule,\n data: dataModule,\n },\n};\n\nexport const store = new Vuex.Store(storeOptions);\n\nexport default store;\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { MainState } from './state';\n\nexport const getters = {\n loginError: (state: MainState) => state.logInError,\n disconnected: (state: MainState) => state.disconnected,\n dashboardShowDrawer: (state: MainState) => state.dashboardShowDrawer,\n dashboardMiniDrawer: (state: MainState) => state.dashboardMiniDrawer,\n token: (state: MainState) => state.token,\n isLoggedIn: (state: MainState) => state.isLoggedIn,\n firstNotification: (state: MainState) => state.notifications.length > 0 && state.notifications[0],\n};\n\nconst {read} = getStoreAccessors('');\n\nexport const readDashboardMiniDrawer = read(getters.dashboardMiniDrawer);\nexport const readDashboardShowDrawer = read(getters.dashboardShowDrawer);\nexport const readIsLoggedIn = read(getters.isLoggedIn);\nexport const readLoginError = read(getters.loginError);\nexport const readToken = read(getters.token);\nexport const readFirstNotification = read(getters.firstNotification);\nexport const readDisconnected = read(getters.disconnected);\n","const env = process.env.VUE_APP_ENV;\n\nlet envApiUrl = '';\n\nif (env === 'production') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_PROD}`;\n} else if (env === 'staging') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_STAG}`;\n} else {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_DEV}`;\n}\n\nexport const apiUrl = envApiUrl;\nexport const appName = process.env.VUE_APP_NAME;\n","import Vue from 'vue';\nimport Router from 'vue-router';\n\nimport RouterComponent from './components/RouterComponent.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n component: () => import(/* webpackChunkName: \"start\", webpackPrefetch: true */ './views/main/Start.vue'),\n children: [\n {\n path: 'login',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"login\", webpackPrefetch: true */ './views/Login.vue'),\n },\n {\n path: '404',\n component: () => import(/* webpackChunkName: \"not-found\", webpackPrefetch: true */ './views/404.vue'),\n },\n {\n path: 'main',\n component: () => import(/* webpackChunkName: \"main\", webpackPrefetch: true */ './views/main/Main.vue'),\n children: [\n {\n path: 'dashboard',\n component: () => import(/* webpackChunkName: \"main-dashboard\", webpackPrefetch: true */ './views/main/Dashboard.vue'),\n },\n ],\n },\n ],\n },\n {\n path: '/*', redirect: '/404',\n },\n ],\n});\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { AppNotification, MainState } from './state';\n\n\nexport const mutations = {\n setToken(state: MainState, payload: string) {\n state.token = payload;\n },\n setLoggedIn(state: MainState, payload: boolean) {\n state.isLoggedIn = payload;\n },\n setLogInError(state: MainState, payload: boolean) {\n state.logInError = payload;\n },\n setDisconnected(state: MainState, payload: boolean) {\n state.disconnected = payload;\n },\n setDashboardMiniDrawer(state: MainState, payload: boolean) {\n state.dashboardMiniDrawer = payload;\n },\n setDashboardShowDrawer(state: MainState, payload: boolean) {\n state.dashboardShowDrawer = payload;\n },\n addNotification(state: MainState, payload: AppNotification) {\n state.notifications.push(payload);\n },\n removeNotification(state: MainState, payload: AppNotification) {\n state.notifications = state.notifications.filter((notification) => notification !== payload);\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetDashboardMiniDrawer = commit(mutations.setDashboardMiniDrawer);\nexport const commitSetDashboardShowDrawer = commit(mutations.setDashboardShowDrawer);\nexport const commitSetLoggedIn = commit(mutations.setLoggedIn);\nexport const commitSetLogInError = commit(mutations.setLogInError);\nexport const commitSetToken = commit(mutations.setToken);\nexport const commitAddNotification = commit(mutations.addNotification);\nexport const commitRemoveNotification = commit(mutations.removeNotification);\nexport const commitDisconnected = commit(mutations.setDisconnected);\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nexport const getters = {\n traces: (state: DataState) => state.traces,\n loadingSamples: (state: DataState) => state.loadingSamples,\n activeTraceIDs: (state: DataState) => Object.values(state.traces).filter((t) => t.isActive).map((t) => t.id),\n};\nconst {read} = getStoreAccessors('');\n\nexport const readTraces = read(getters.traces);\nexport const readLoadingSamples = read(getters.loadingSamples);\nexport const readActiveTraceIDs = read(getters.activeTraceIDs);\n\n","import { apiUrl } from '@/env';\nimport { InSample, Trace, TraceCreate } from '@/interfaces';\nimport axios from 'axios';\nimport { config } from 'vue/types/umd';\n\nfunction authHeaders(token: string) {\n return {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n params: {},\n };\n}\n\nexport const api = {\n async getToken(token: string) {\n return axios.get(`${apiUrl}/api/security/token`, authHeaders(token));\n },\n async getTraces(token: string) {\n return axios.get(`${apiUrl}/api/traces/`, authHeaders(token));\n },\n async createTrace(token: string, data: TraceCreate) {\n return axios.post(`${apiUrl}/api/traces/`, data, authHeaders(token));\n },\n async getSamples(token: string, trace: Trace, skip: number = 0, limit: number = 100) {\n const options = authHeaders(token);\n options.params = {skip, limit};\n return axios.get(`${apiUrl}/api/traces/${trace.id}/samples`, options);\n },\n async listDirectory(token: string, path: string) {\n const options = authHeaders(token);\n options.params = {path};\n return axios.get(`${apiUrl}/api/explorer/`, options);\n },\n};\n","import { Data, InSample, SetSample, Trace } from '@/interfaces';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport Vue from 'vue';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nfunction formatData(samples: InSample[]) {\n const parameters: { [key: string]: Data[] } = {};\n for (let index = 0; index < samples.length; index++) {\n const row = samples[index].data;\n const state = samples[index].state;\n for (const param in row) {\n if (param) {\n if (index === 0) {\n parameters[param] = [];\n }\n parameters[param].push({ state, value: row[param] });\n }\n }\n\n }\n\n return parameters;\n}\n\nfunction setTraceDefaults(trace: Trace) {\n trace.parameters = {};\n trace.activeParams = [];\n trace.isActive = false;\n trace.burnIn = 10;\n trace.isLoading = false;\n}\n\nexport const mutations = {\n setTraces(state: DataState, payload: Trace[]) {\n for (const trace of payload) {\n setTraceDefaults(trace);\n }\n const traces = payload.reduce((obj, trace) => {\n obj[trace.id] = trace;\n return obj;\n }, {});\n state.traces = traces;\n },\n setTrace(state: DataState, payload: Trace) {\n setTraceDefaults(payload);\n // https://vuex.vuejs.org/guide/mutations.html#mutations-follow-vue-s-reactivity-rules\n Vue.set(state.traces, payload.id, payload);\n },\n setActiveTrace(state: DataState, payload: Trace) {\n state.traces[payload.id].isActive = true;\n\n },\n setActiveParams(state: DataState, payload: {traceID: number, params: string[]}) {\n state.traces[payload.traceID].activeParams = payload.params;\n },\n setBurnIn(state: DataState, payload: {traceID: number, burnIn: number}) {\n state.traces[payload.traceID].burnIn = payload.burnIn;\n },\n setLoadingSamples(state: DataState, payload: {traceID: number, loading: boolean}) {\n state.loadingSamples = payload.loading;\n state.traces[payload.traceID].isLoading = payload.loading;\n },\n setSetSamples(state: DataState, payload: {traceID: number, data: InSample[]}) {\n const data = formatData(payload.data);\n const trace = state.traces[payload.traceID];\n if (Object.keys(trace.parameters).length === 0) {\n trace.parameters = data;\n } else {\n for (const paramName in data) {\n if (paramName) {\n trace.parameters[paramName] = trace.parameters[paramName].concat(\n data[paramName], // ).sort((a, b) => a.state - b.state,\n );\n }\n }\n }\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetTraces = commit(mutations.setTraces);\nexport const commitSetTrace = commit(mutations.setTrace);\nexport const commitSetActiveTrace = commit(mutations.setActiveTrace);\nexport const commitSetSamples = commit(mutations.setSetSamples);\nexport const commitSetActiveParams = commit(mutations.setActiveParams);\nexport const commitSetBurnIn = commit(mutations.setBurnIn);\nexport const commitSetLoadingSamples = commit(mutations.setLoadingSamples);\n\n","import { api } from '@/api';\nimport { Trace, TraceCreate } from '@/interfaces';\nimport { AxiosResponse } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { dispatchCheckApiError } from '../main/actions';\nimport { commitAddNotification, commitRemoveNotification } from '../main/mutations';\nimport { State } from '../state';\nimport {\n commitSetActiveParams,\n commitSetActiveTrace,\n commitSetBurnIn,\n commitSetLoadingSamples,\n commitSetSamples,\n commitSetTrace,\n commitSetTraces,\n} from './mutations';\nimport { DataState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionGetTraces(context: MainContext) {\n let response: AxiosResponse | null = null;\n try {\n response = await api.getTraces(context.rootState.main.token);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response) {\n commitSetTraces(context, response.data);\n }\n },\n async actionCreateTrace(context: MainContext, payload: TraceCreate) {\n const loadingNotification = { content: 'saving', showProgress: true };\n commitAddNotification(context, loadingNotification);\n let response: AxiosResponse | null = null;\n try {\n response = await api.createTrace(context.rootState.main.token, payload);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n commitSetTrace(context, response.data);\n commitAddNotification(context, { content: 'Trace successfully created', color: 'success' });\n }\n },\n async actionSetActiveTrace(context: MainContext, payload: Trace) {\n commitSetActiveTrace(context, payload);\n },\n async actionSetActiveParams(context: MainContext, payload: {traceID: number, params: string[]}) {\n commitSetActiveParams(context, payload);\n },\n async actionGetSamples(\n context: MainContext,\n payload: {trace: Trace,\n skip?: number,\n limit?: number,\n all?: boolean}) {\n const trace = payload.trace;\n const skip = payload.skip ? payload.skip : 0;\n const limit = payload.limit ? payload.limit : 100;\n const all = payload.all ? payload.all : false;\n const loadingNotification = { content: 'Loading samples...', showProgress: true };\n if (skip === 0) {\n commitAddNotification(context, loadingNotification);\n }\n let response: AxiosResponse | null = null;\n try {\n response = await api.getSamples(context.rootState.main.token, trace, skip, limit);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response != null) {\n commitSetSamples(context, {traceID: trace.id, data: response.data});\n if (all === true && response.data.length === limit) {\n // if you get back what you request go again\n await dispatchGetSamples(context, {trace, skip: skip + limit, limit, all: true});\n }}\n commitRemoveNotification(context, loadingNotification);\n },\n async actionSetBurnIn(context: MainContext, payload: {traceID: number, burnIn: number}) {\n commitSetBurnIn(context, payload);\n },\n async actionSetLoadingSamples(context: MainContext, payload: {traceID: number, loading: boolean}) {\n commitSetLoadingSamples(context, payload);\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchGetTraces = dispatch(actions.actionGetTraces);\nexport const dispatchCreateTrace = dispatch(actions.actionCreateTrace);\nexport const dispatchSetActiveTrace = dispatch(actions.actionSetActiveTrace);\nexport const dispatchGetSamples = dispatch(actions.actionGetSamples);\nexport const dispatchSetActiveParams = dispatch(actions.actionSetActiveParams);\nexport const dispatchSetBurnIn = dispatch(actions.actionSetBurnIn);\nexport const dispatchSetLoadingSamples = dispatch(actions.actionSetLoadingSamples);\n\n\n","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { dispatchRemoveNotification } from '@/store/main/actions';\nimport { readFirstNotification } from '@/store/main/getters';\nimport { commitRemoveNotification } from '@/store/main/mutations';\nimport { AppNotification } from '@/store/main/state';\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\n\n@Component\nexport default class NotificationsManager extends Vue {\n public show: boolean = false;\n public text: string = '';\n public showProgress: boolean = false;\n public notFound: boolean = false;\n public currentNotification: AppNotification | false = false;\n\n public async hide() {\n this.show = false;\n await new Promise((resolve, reject) => setTimeout(() => resolve(), 500));\n }\n\n public async close() {\n await this.hide();\n await this.removeCurrentNotification();\n }\n\n public async removeCurrentNotification() {\n if (this.currentNotification) {\n commitRemoveNotification(this.$store, this.currentNotification);\n }\n }\n\n public get firstNotification() {\n return readFirstNotification(this.$store);\n }\n\n public async setNotification(notification: AppNotification | false) {\n if (this.show) {\n await this.hide();\n }\n if (notification) {\n this.currentNotification = notification;\n this.showProgress = notification.showProgress || false;\n this.notFound = notification.notFound || false;\n this.show = true;\n } else {\n this.currentNotification = false;\n }\n }\n\n @Watch('firstNotification')\n public async onNotificationChange(\n newNotification: AppNotification | false,\n oldNotification: AppNotification | false,\n ) {\n if (newNotification !== this.currentNotification) {\n await this.setNotification(newNotification);\n if (newNotification) {\n dispatchRemoveNotification(this.$store, { notification: newNotification, timeout: 10000 });\n }\n }\n }\n\n public get currentNotificationContent() {\n return this.currentNotification && this.currentNotification.content || '';\n }\n\n public get currentNotificationColor() {\n return this.currentNotification && this.currentNotification.color || 'info';\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./NotificationsManager.vue?vue&type=template&id=2b4f56c1\"\nimport script from \"./NotificationsManager.vue?vue&type=script&lang=ts\"\nexport * from \"./NotificationsManager.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VIcon,VProgressCircular,VSnackbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-snackbar',{attrs:{\"color\":_vm.currentNotificationColor},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"d-flex justify-space-between align-center \"},[_c('v-progress-circular',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showProgress),expression:\"showProgress\"}],staticClass:\"ma-1\",attrs:{\"indeterminate\":\"\"}}),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notFound),expression:\"notFound\"}],staticClass:\"ma-1\",attrs:{\"large\":\"\"}},[_vm._v(\"mdi-cancel\")]),_vm._v(\" \"+_vm._s(_vm.currentNotificationContent)+\" \"),_c('v-btn',{attrs:{\"text\":\"\"},nativeOn:{\"click\":function($event){return _vm.close.apply(null, arguments)}}},[_vm._v(\"Close\")])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport NotificationsManager from '@/components/NotificationsManager.vue';\nimport { dispatchCheckLoggedIn } from '@/store/main/actions';\nimport { readIsLoggedIn } from '@/store/main/getters';\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n components: {\n NotificationsManager,\n },\n})\nexport default class App extends Vue {\n\n get loggedIn() {\n return readIsLoggedIn(this.$store);\n }\n\n public async created() {\n await dispatchCheckLoggedIn(this.$store);\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=12c528ee\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VApp,VContainer,VContent,VFlex,VProgressCircular,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('v-app',[(_vm.loggedIn===null)?_c('v-content',[_c('v-container',{attrs:{\"fill-height\":\"\"}},[_c('v-row',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',[_c('div',{staticClass:\"text-xs-center\"},[_c('div',{staticClass:\"headline my-5\"},[_vm._v(\"Loading...\")]),_c('v-progress-circular',{attrs:{\"size\":\"100\",\"indeterminate\":\"\",\"color\":\"primary\"}})],1)])],1)],1)],1):_c('router-view'),_c('NotificationsManager')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Component from 'vue-class-component';\n\n// Register the router hooks with their names\nComponent.registerHooks([\n 'beforeRouteEnter',\n 'beforeRouteLeave',\n 'beforeRouteUpdate', // for vue-router 2.2+\n]);\n","import VeeValidate from 'vee-validate';\nimport Vue from 'vue';\n\nVue.use(VeeValidate);\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\nimport colors from 'vuetify/lib/util/colors';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: {\n themes: {\n light: {\n primary: colors.teal.lighten1,\n },\n dark: {\n primary: colors.teal.lighten1,\n },\n },\n },\n});\n","import store from '@/store';\nimport '@babel/polyfill';\nimport Vue from 'vue';\nimport VueWorker from 'vue-worker';\nimport App from './App.vue';\n// Import Component hooks before component definitions\nimport './component-hooks';\nimport './plugins/vee-validate';\nimport vuetify from './plugins/vuetify';\nimport router from './router';\n\nVue.config.productionTip = false;\n\nVue.use(VueWorker);\n\nnew Vue({\n router,\n store,\n vuetify,\n render: (h) => h(App),\n}).$mount('#app');\n","import { api } from '@/api';\nimport router from '@/router';\nimport { AxiosError } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { State } from '../state';\nimport {\n commitAddNotification,\n commitDisconnected,\n commitRemoveNotification,\n commitSetLoggedIn,\n commitSetLogInError,\n commitSetToken,\n} from './mutations';\nimport { AppNotification, MainState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionCheckToken(context: MainContext, payload: { token: string }) {\n try {\n const response = await api.getToken(payload.token);\n const token = response.data.token;\n if (token) {\n commitSetToken(context, token);\n commitSetLoggedIn(context, true);\n commitSetLogInError(context, false);\n await dispatchRouteLoggedIn(context);\n commitAddNotification(context, { content: 'Logged in', color: 'success' });\n } else {\n await dispatchLogOut(context);\n }\n } catch (err) {\n commitSetLogInError(context, true);\n await dispatchLogOut(context);\n }\n },\n async actionCheckLoggedIn(context: MainContext) {\n if (!context.state.isLoggedIn) {\n const token = context.state.token;\n if (token) {\n try {\n commitSetLoggedIn(context, true);\n } catch (error) {\n await dispatchRemoveLogIn(context);\n }\n } else {\n await dispatchRemoveLogIn(context);\n }\n }\n },\n async actionRemoveLogIn(context: MainContext) {\n commitSetToken(context, '');\n commitSetLoggedIn(context, false);\n },\n async actionLogOut(context: MainContext) {\n await dispatchRemoveLogIn(context);\n await dispatchRouteLogOut(context);\n },\n async actionUserLogOut(context: MainContext) {\n await dispatchLogOut(context);\n commitAddNotification(context, { content: 'Logged out', color: 'success' });\n },\n actionRouteLogOut(context: MainContext) {\n if (router.currentRoute.path !== '/login') {\n router.push('/login');\n }\n },\n async actionCheckApiError(context: MainContext, payload: AxiosError) {\n // check for general errors e.g. CORS or network issues\n if (!payload.response) {\n console.log('Network error');\n return commitDisconnected(context, true);\n }\n console.log('API error', payload.response);\n commitDisconnected(context, false);\n if (payload.response!.status === 401) {\n return await dispatchLogOut(context);\n }\n if (payload.response!.status === 404) {\n return commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n if (payload.response!.status === 500) {\n return commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n },\n actionRouteLoggedIn(context: MainContext) {\n if (router.currentRoute.path === '/login' || router.currentRoute.path === '/') {\n router.push('/main/dashboard');\n }\n },\n async removeNotification(context: MainContext, payload: { notification: AppNotification, timeout: number }) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n commitRemoveNotification(context, payload.notification);\n resolve(true);\n }, payload.timeout);\n });\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchCheckApiError = dispatch(actions.actionCheckApiError);\nexport const dispatchCheckLoggedIn = dispatch(actions.actionCheckLoggedIn);\nexport const dispatchCheckToken = dispatch(actions.actionCheckToken);\nexport const dispatchLogOut = dispatch(actions.actionLogOut);\nexport const dispatchUserLogOut = dispatch(actions.actionUserLogOut);\nexport const dispatchRemoveLogIn = dispatch(actions.actionRemoveLogIn);\nexport const dispatchRouteLoggedIn = dispatch(actions.actionRouteLoggedIn);\nexport const dispatchRouteLogOut = dispatch(actions.actionRouteLogOut);\nexport const dispatchRemoveNotification = dispatch(actions.removeNotification);\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/data/index.ts","webpack:///./src/store/main/index.ts","webpack:///./src/store/index.ts","webpack:///./src/store/main/getters.ts","webpack:///./src/env.ts","webpack:///./src/router.ts","webpack:///./src/store/main/mutations.ts","webpack:///./src/store/data/getters.ts","webpack:///./src/api.ts","webpack:///./src/store/data/mutations.ts","webpack:///./src/store/data/actions.ts","webpack:///./src/components/NotificationsManager.vue","webpack:///./src/components/NotificationsManager.vue?3667","webpack:///./src/components/NotificationsManager.vue?0809","webpack:///./src/components/NotificationsManager.vue?34a0","webpack:///./src/App.vue","webpack:///./src/App.vue?0e28","webpack:///./src/App.vue?8d77","webpack:///./src/App.vue?d4f1","webpack:///./src/component-hooks.ts","webpack:///./src/plugins/vee-validate.ts","webpack:///./src/plugins/vuetify.ts","webpack:///./src/main.ts","webpack:///./src/store/main/actions.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","prefetchChunks","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","deferredPrefetch","apply","shift","deferredModules","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","forEach","undefined","link","document","createElement","nc","setAttribute","rel","as","href","jsonpScriptSrc","head","appendChild","installedModules","installedCssChunks","p","exports","module","l","e","requireEnsure","promises","Promise","resolve","reject","fullhref","existingLinkTags","getElementsByTagName","dataHref","tag","getAttribute","existingStyleTags","linkTag","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","error","clearTimeout","chunk","errorType","realSrc","message","name","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","startupResult","dataModule","state","traces","loadingSamples","mutations","actions","getters","mainModule","isLoggedIn","token","logInError","disconnected","dashboardMiniDrawer","dashboardShowDrawer","notifications","use","storeOptions","main","store","Store","loginError","firstNotification","read","readDashboardMiniDrawer","readDashboardShowDrawer","readIsLoggedIn","readLoginError","readFirstNotification","readDisconnected","apiUrl","appName","base","routes","path","component","children","redirect","setToken","payload","setLoggedIn","setLogInError","setDisconnected","setDashboardMiniDrawer","setDashboardShowDrawer","addNotification","removeNotification","filter","notification","commit","commitSetDashboardMiniDrawer","commitSetDashboardShowDrawer","commitSetLoggedIn","commitSetLogInError","commitSetToken","commitAddNotification","commitRemoveNotification","commitDisconnected","activeTraceIDs","values","isActive","map","id","readTraces","readLoadingSamples","readActiveTraceIDs","authHeaders","headers","Authorization","params","api","getToken","a","getTraces","createTrace","post","getSamples","trace","skip","limit","options","listDirectory","setTraceDefaults","parameters","activeParams","burnIn","isLoading","setTraces","reduce","obj","setTrace","set","setActiveTrace","setActiveParams","traceID","setBurnIn","setLoadingSamples","loading","setSetSamples","formatData","samples","index","row","param","keys","paramName","concat","commitSetTraces","commitSetTrace","commitSetActiveTrace","commitSetSamples","commitSetActiveParams","commitSetBurnIn","commitSetLoadingSamples","actionGetTraces","context","response","rootState","actionCreateTrace","loadingNotification","content","showProgress","color","actionSetActiveTrace","actionSetActiveParams","actionGetSamples","dispatchGetSamples","actionSetBurnIn","actionSetLoadingSamples","dispatch","dispatchGetTraces","dispatchCreateTrace","dispatchSetActiveTrace","dispatchSetActiveParams","dispatchSetBurnIn","dispatchSetLoadingSamples","show","text","notFound","currentNotification","this","hide","removeCurrentNotification","$store","newNotification","oldNotification","setNotification","_vm","_h","$createElement","_c","_self","attrs","currentNotificationColor","model","callback","$$v","expression","staticClass","directives","rawName","_v","_s","currentNotificationContent","nativeOn","$event","close","arguments","VBtn","VIcon","VProgressCircular","VSnackbar","components","NotificationsManager","loggedIn","VApp","VContainer","VContent","VFlex","VRow","registerHooks","theme","themes","light","primary","colors","teal","lighten1","dark","config","productionTip","router","vuetify","render","h","$mount","actionCheckToken","dispatchRouteLoggedIn","dispatchLogOut","actionCheckLoggedIn","dispatchRemoveLogIn","actionRemoveLogIn","actionLogOut","dispatchRouteLogOut","actionUserLogOut","actionRouteLogOut","currentRoute","actionCheckApiError","log","status","detail","actionRouteLoggedIn","dispatchCheckApiError","dispatchCheckLoggedIn","dispatchCheckToken","dispatchUserLogOut","dispatchRemoveNotification"],"mappings":"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","file":"js/app.ae01b4f2.js","sourcesContent":[" \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 \t\tvar prefetchChunks = data[3] || [];\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 \t\tdeferredPrefetch.push.apply(deferredPrefetch, prefetchChunks);\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 \t\tif(deferredModules.length === 0) {\n \t\t\t// chunk prefetching for javascript\n \t\t\tdeferredPrefetch.forEach(function(chunkId) {\n \t\t\t\tif(installedChunks[chunkId] === undefined) {\n \t\t\t\t\tinstalledChunks[chunkId] = null;\n \t\t\t\t\tvar link = document.createElement('link');\n\n \t\t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\t\tlink.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t\t}\n \t\t\t\t\tlink.rel = \"prefetch\";\n \t\t\t\t\tlink.as = \"script\";\n \t\t\t\t\tlink.href = jsonpScriptSrc(chunkId);\n \t\t\t\t\tdocument.head.appendChild(link);\n \t\t\t\t}\n \t\t\t});\n \t\t\tdeferredPrefetch.length = 0;\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\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\t\"app\": 0\n \t};\n\n \tvar deferredModules = [], deferredPrefetch = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"login~main~main-dashboard\":\"login~main~main-dashboard\",\"login~main-dashboard\":\"login~main-dashboard\",\"login\":\"login\",\"main~main-dashboard\":\"main~main-dashboard\",\"main-dashboard\":\"main-dashboard\",\"main\":\"main\",\"not-found\":\"not-found\",\"start\":\"start\"}[chunkId]||chunkId) + \".\" + {\"login~main~main-dashboard\":\"fe81a9da\",\"login~main-dashboard\":\"ada10ab4\",\"login\":\"a133ba4e\",\"main~main-dashboard\":\"52fc0832\",\"main-dashboard\":\"1aa0cef9\",\"main\":\"6e01feb4\",\"not-found\":\"f69bd5d3\",\"start\":\"430244e8\"}[chunkId] + \".js\"\n \t}\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 \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"login~main~main-dashboard\":1,\"login~main-dashboard\":1,\"login\":1,\"main~main-dashboard\":1,\"main-dashboard\":1,\"main\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"login~main~main-dashboard\":\"login~main~main-dashboard\",\"login~main-dashboard\":\"login~main-dashboard\",\"login\":\"login\",\"main~main-dashboard\":\"main~main-dashboard\",\"main-dashboard\":\"main-dashboard\",\"main\":\"main\",\"not-found\":\"not-found\",\"start\":\"start\"}[chunkId]||chunkId) + \".\" + {\"login~main~main-dashboard\":\"31439c1e\",\"login~main-dashboard\":\"f3d66085\",\"login\":\"e537a9fa\",\"main~main-dashboard\":\"00152d94\",\"main-dashboard\":\"e2aaff73\",\"main\":\"f21905bc\",\"not-found\":\"31d6cfe0\",\"start\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\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 \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\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 \tvar startupResult = (function() {\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n \t})();\n\n \twebpackJsonpCallback([[], {}, 0, [\"login~main~main-dashboard\",\"main~main-dashboard\",\"login~main-dashboard\",\"main-dashboard\",\"login\",\"main\",\"not-found\",\"start\"]]);\n \treturn startupResult;\n","import { actions } from './actions';\nimport { getters } from './getters';\nimport { mutations } from './mutations';\nimport { DataState } from './state';\n\nconst defaultState: DataState = {\n traces: {},\n loadingSamples: false,\n};\n\nexport const dataModule = {\n state: defaultState,\n mutations,\n actions,\n getters,\n};\n","import { actions } from './actions';\nimport { getters } from './getters';\nimport { mutations } from './mutations';\nimport { MainState } from './state';\n\nconst defaultState: MainState = {\n isLoggedIn: null,\n token: '',\n logInError: false,\n disconnected: false,\n dashboardMiniDrawer: false,\n dashboardShowDrawer: false,\n notifications: [],\n};\n\nexport const mainModule = {\n state: defaultState,\n mutations,\n actions,\n getters,\n};\n","import Vue from 'vue';\nimport Vuex, { StoreOptions } from 'vuex';\n\nimport { dataModule } from './data';\nimport { mainModule } from './main';\nimport { State } from './state';\n\nVue.use(Vuex);\n\nconst storeOptions: StoreOptions = {\n modules: {\n main: mainModule,\n data: dataModule,\n },\n};\n\nexport const store = new Vuex.Store(storeOptions);\n\nexport default store;\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { MainState } from './state';\n\nexport const getters = {\n loginError: (state: MainState) => state.logInError,\n disconnected: (state: MainState) => state.disconnected,\n dashboardShowDrawer: (state: MainState) => state.dashboardShowDrawer,\n dashboardMiniDrawer: (state: MainState) => state.dashboardMiniDrawer,\n token: (state: MainState) => state.token,\n isLoggedIn: (state: MainState) => state.isLoggedIn,\n firstNotification: (state: MainState) => state.notifications.length > 0 && state.notifications[0],\n};\n\nconst {read} = getStoreAccessors('');\n\nexport const readDashboardMiniDrawer = read(getters.dashboardMiniDrawer);\nexport const readDashboardShowDrawer = read(getters.dashboardShowDrawer);\nexport const readIsLoggedIn = read(getters.isLoggedIn);\nexport const readLoginError = read(getters.loginError);\nexport const readToken = read(getters.token);\nexport const readFirstNotification = read(getters.firstNotification);\nexport const readDisconnected = read(getters.disconnected);\n","const env = process.env.VUE_APP_ENV;\n\nlet envApiUrl = '';\n\nif (env === 'production') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_PROD}`;\n} else if (env === 'staging') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_STAG}`;\n} else {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_DEV}`;\n}\n\nexport const apiUrl = envApiUrl;\nexport const appName = process.env.VUE_APP_NAME;\n","import Vue from 'vue';\nimport Router from 'vue-router';\n\nimport RouterComponent from './components/RouterComponent.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n component: () => import(/* webpackChunkName: \"start\", webpackPrefetch: true */ './views/main/Start.vue'),\n children: [\n {\n path: 'login',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"login\", webpackPrefetch: true */ './views/Login.vue'),\n },\n {\n path: '404',\n component: () => import(/* webpackChunkName: \"not-found\", webpackPrefetch: true */ './views/404.vue'),\n },\n {\n path: 'main',\n component: () => import(/* webpackChunkName: \"main\", webpackPrefetch: true */ './views/main/Main.vue'),\n children: [\n {\n path: 'dashboard',\n component: () => import(/* webpackChunkName: \"main-dashboard\", webpackPrefetch: true */ './views/main/Dashboard.vue'),\n },\n ],\n },\n ],\n },\n {\n path: '/*', redirect: '/404',\n },\n ],\n});\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { AppNotification, MainState } from './state';\n\n\nexport const mutations = {\n setToken(state: MainState, payload: string) {\n state.token = payload;\n },\n setLoggedIn(state: MainState, payload: boolean) {\n state.isLoggedIn = payload;\n },\n setLogInError(state: MainState, payload: boolean) {\n state.logInError = payload;\n },\n setDisconnected(state: MainState, payload: boolean) {\n state.disconnected = payload;\n },\n setDashboardMiniDrawer(state: MainState, payload: boolean) {\n state.dashboardMiniDrawer = payload;\n },\n setDashboardShowDrawer(state: MainState, payload: boolean) {\n state.dashboardShowDrawer = payload;\n },\n addNotification(state: MainState, payload: AppNotification) {\n state.notifications.push(payload);\n },\n removeNotification(state: MainState, payload: AppNotification) {\n state.notifications = state.notifications.filter((notification) => notification !== payload);\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetDashboardMiniDrawer = commit(mutations.setDashboardMiniDrawer);\nexport const commitSetDashboardShowDrawer = commit(mutations.setDashboardShowDrawer);\nexport const commitSetLoggedIn = commit(mutations.setLoggedIn);\nexport const commitSetLogInError = commit(mutations.setLogInError);\nexport const commitSetToken = commit(mutations.setToken);\nexport const commitAddNotification = commit(mutations.addNotification);\nexport const commitRemoveNotification = commit(mutations.removeNotification);\nexport const commitDisconnected = commit(mutations.setDisconnected);\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nexport const getters = {\n traces: (state: DataState) => state.traces,\n loadingSamples: (state: DataState) => state.loadingSamples,\n activeTraceIDs: (state: DataState) => Object.values(state.traces).filter((t) => t.isActive).map((t) => t.id),\n};\nconst {read} = getStoreAccessors('');\n\nexport const readTraces = read(getters.traces);\nexport const readLoadingSamples = read(getters.loadingSamples);\nexport const readActiveTraceIDs = read(getters.activeTraceIDs);\n\n","import { apiUrl } from '@/env';\nimport { InSample, Trace, TraceCreate } from '@/interfaces';\nimport axios from 'axios';\nimport { config } from 'vue/types/umd';\n\nfunction authHeaders(token: string) {\n return {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n params: {},\n };\n}\n\nexport const api = {\n async getToken(token: string) {\n return axios.get(`${apiUrl}/api/security/token`, authHeaders(token));\n },\n async getTraces(token: string) {\n return axios.get(`${apiUrl}/api/traces/`, authHeaders(token));\n },\n async createTrace(token: string, data: TraceCreate) {\n return axios.post(`${apiUrl}/api/traces/`, data, authHeaders(token));\n },\n async getSamples(token: string, trace: Trace, skip: number = 0, limit: number = 100) {\n const options = authHeaders(token);\n options.params = {skip, limit};\n return axios.get(`${apiUrl}/api/traces/${trace.id}/samples`, options);\n },\n async listDirectory(token: string, path: string) {\n const options = authHeaders(token);\n options.params = {path};\n return axios.get(`${apiUrl}/api/explorer/`, options);\n },\n};\n","import { Data, InSample, SetSample, Trace } from '@/interfaces';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport Vue from 'vue';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nfunction formatData(samples: InSample[]) {\n const parameters: { [key: string]: Data[] } = {};\n for (let index = 0; index < samples.length; index++) {\n const row = samples[index].data;\n const state = samples[index].state;\n for (const param in row) {\n if (param) {\n if (index === 0) {\n parameters[param] = [];\n }\n parameters[param].push({ state, value: row[param] });\n }\n }\n\n }\n\n return parameters;\n}\n\nfunction setTraceDefaults(trace: Trace) {\n trace.parameters = {};\n trace.activeParams = [];\n trace.isActive = false;\n trace.burnIn = 10;\n trace.isLoading = false;\n}\n\nexport const mutations = {\n setTraces(state: DataState, payload: Trace[]) {\n for (const trace of payload) {\n setTraceDefaults(trace);\n }\n const traces = payload.reduce((obj, trace) => {\n obj[trace.id] = trace;\n return obj;\n }, {});\n state.traces = traces;\n },\n setTrace(state: DataState, payload: Trace) {\n setTraceDefaults(payload);\n // https://vuex.vuejs.org/guide/mutations.html#mutations-follow-vue-s-reactivity-rules\n Vue.set(state.traces, payload.id, payload);\n },\n setActiveTrace(state: DataState, payload: Trace) {\n state.traces[payload.id].isActive = true;\n\n },\n setActiveParams(state: DataState, payload: {traceID: number, params: string[]}) {\n state.traces[payload.traceID].activeParams = payload.params;\n },\n setBurnIn(state: DataState, payload: {traceID: number, burnIn: number}) {\n state.traces[payload.traceID].burnIn = payload.burnIn;\n },\n setLoadingSamples(state: DataState, payload: {traceID: number, loading: boolean}) {\n state.loadingSamples = payload.loading;\n state.traces[payload.traceID].isLoading = payload.loading;\n },\n setSetSamples(state: DataState, payload: {traceID: number, data: InSample[]}) {\n const data = formatData(payload.data);\n const trace = state.traces[payload.traceID];\n if (Object.keys(trace.parameters).length === 0) {\n trace.parameters = data;\n } else {\n for (const paramName in data) {\n if (paramName) {\n trace.parameters[paramName] = trace.parameters[paramName].concat(\n data[paramName], // ).sort((a, b) => a.state - b.state,\n );\n }\n }\n }\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetTraces = commit(mutations.setTraces);\nexport const commitSetTrace = commit(mutations.setTrace);\nexport const commitSetActiveTrace = commit(mutations.setActiveTrace);\nexport const commitSetSamples = commit(mutations.setSetSamples);\nexport const commitSetActiveParams = commit(mutations.setActiveParams);\nexport const commitSetBurnIn = commit(mutations.setBurnIn);\nexport const commitSetLoadingSamples = commit(mutations.setLoadingSamples);\n\n","import { api } from '@/api';\nimport { Trace, TraceCreate } from '@/interfaces';\nimport { AxiosResponse } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { dispatchCheckApiError } from '../main/actions';\nimport { commitAddNotification, commitRemoveNotification } from '../main/mutations';\nimport { State } from '../state';\nimport {\n commitSetActiveParams,\n commitSetActiveTrace,\n commitSetBurnIn,\n commitSetLoadingSamples,\n commitSetSamples,\n commitSetTrace,\n commitSetTraces,\n} from './mutations';\nimport { DataState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionGetTraces(context: MainContext) {\n let response: AxiosResponse | null = null;\n try {\n response = await api.getTraces(context.rootState.main.token);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response) {\n commitSetTraces(context, response.data);\n }\n },\n async actionCreateTrace(context: MainContext, payload: TraceCreate) {\n const loadingNotification = { content: 'saving', showProgress: true };\n commitAddNotification(context, loadingNotification);\n let response: AxiosResponse | null = null;\n try {\n response = await api.createTrace(context.rootState.main.token, payload);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n commitSetTrace(context, response.data);\n commitAddNotification(context, { content: 'Trace successfully created', color: 'success' });\n }\n },\n async actionSetActiveTrace(context: MainContext, payload: Trace) {\n commitSetActiveTrace(context, payload);\n },\n async actionSetActiveParams(context: MainContext, payload: {traceID: number, params: string[]}) {\n commitSetActiveParams(context, payload);\n },\n async actionGetSamples(\n context: MainContext,\n payload: {trace: Trace,\n skip?: number,\n limit?: number,\n all?: boolean}) {\n const trace = payload.trace;\n const skip = payload.skip ? payload.skip : 0;\n const limit = payload.limit ? payload.limit : 100;\n const all = payload.all ? payload.all : false;\n const loadingNotification = { content: 'Loading samples...', showProgress: true };\n if (skip === 0) {\n commitAddNotification(context, loadingNotification);\n }\n let response: AxiosResponse | null = null;\n try {\n response = await api.getSamples(context.rootState.main.token, trace, skip, limit);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response != null) {\n commitSetSamples(context, {traceID: trace.id, data: response.data});\n if (all === true && response.data.length === limit) {\n // if you get back what you request go again\n await dispatchGetSamples(context, {trace, skip: skip + limit, limit, all: true});\n }}\n commitRemoveNotification(context, loadingNotification);\n },\n async actionSetBurnIn(context: MainContext, payload: {traceID: number, burnIn: number}) {\n commitSetBurnIn(context, payload);\n },\n async actionSetLoadingSamples(context: MainContext, payload: {traceID: number, loading: boolean}) {\n commitSetLoadingSamples(context, payload);\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchGetTraces = dispatch(actions.actionGetTraces);\nexport const dispatchCreateTrace = dispatch(actions.actionCreateTrace);\nexport const dispatchSetActiveTrace = dispatch(actions.actionSetActiveTrace);\nexport const dispatchGetSamples = dispatch(actions.actionGetSamples);\nexport const dispatchSetActiveParams = dispatch(actions.actionSetActiveParams);\nexport const dispatchSetBurnIn = dispatch(actions.actionSetBurnIn);\nexport const dispatchSetLoadingSamples = dispatch(actions.actionSetLoadingSamples);\n\n\n","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { dispatchRemoveNotification } from '@/store/main/actions';\nimport { readFirstNotification } from '@/store/main/getters';\nimport { commitRemoveNotification } from '@/store/main/mutations';\nimport { AppNotification } from '@/store/main/state';\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\n\n@Component\nexport default class NotificationsManager extends Vue {\n public show: boolean = false;\n public text: string = '';\n public showProgress: boolean = false;\n public notFound: boolean = false;\n public currentNotification: AppNotification | false = false;\n\n public async hide() {\n this.show = false;\n await new Promise((resolve, reject) => setTimeout(() => resolve(), 500));\n }\n\n public async close() {\n await this.hide();\n await this.removeCurrentNotification();\n }\n\n public async removeCurrentNotification() {\n if (this.currentNotification) {\n commitRemoveNotification(this.$store, this.currentNotification);\n }\n }\n\n public get firstNotification() {\n return readFirstNotification(this.$store);\n }\n\n public async setNotification(notification: AppNotification | false) {\n if (this.show) {\n await this.hide();\n }\n if (notification) {\n this.currentNotification = notification;\n this.showProgress = notification.showProgress || false;\n this.notFound = notification.notFound || false;\n this.show = true;\n } else {\n this.currentNotification = false;\n }\n }\n\n @Watch('firstNotification')\n public async onNotificationChange(\n newNotification: AppNotification | false,\n oldNotification: AppNotification | false,\n ) {\n if (newNotification !== this.currentNotification) {\n await this.setNotification(newNotification);\n if (newNotification) {\n dispatchRemoveNotification(this.$store, { notification: newNotification, timeout: 10000 });\n }\n }\n }\n\n public get currentNotificationContent() {\n return this.currentNotification && this.currentNotification.content || '';\n }\n\n public get currentNotificationColor() {\n return this.currentNotification && this.currentNotification.color || 'info';\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./NotificationsManager.vue?vue&type=template&id=2b4f56c1\"\nimport script from \"./NotificationsManager.vue?vue&type=script&lang=ts\"\nexport * from \"./NotificationsManager.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VIcon,VProgressCircular,VSnackbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-snackbar',{attrs:{\"color\":_vm.currentNotificationColor},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"d-flex justify-space-between align-center \"},[_c('v-progress-circular',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showProgress),expression:\"showProgress\"}],staticClass:\"ma-1\",attrs:{\"indeterminate\":\"\"}}),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notFound),expression:\"notFound\"}],staticClass:\"ma-1\",attrs:{\"large\":\"\"}},[_vm._v(\"mdi-cancel\")]),_vm._v(\" \"+_vm._s(_vm.currentNotificationContent)+\" \"),_c('v-btn',{attrs:{\"text\":\"\"},nativeOn:{\"click\":function($event){return _vm.close.apply(null, arguments)}}},[_vm._v(\"Close\")])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport NotificationsManager from '@/components/NotificationsManager.vue';\nimport { dispatchCheckLoggedIn } from '@/store/main/actions';\nimport { readIsLoggedIn } from '@/store/main/getters';\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n components: {\n NotificationsManager,\n },\n})\nexport default class App extends Vue {\n\n get loggedIn() {\n return readIsLoggedIn(this.$store);\n }\n\n public async created() {\n await dispatchCheckLoggedIn(this.$store);\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--14-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--14-3!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=12c528ee\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VApp,VContainer,VContent,VFlex,VProgressCircular,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('v-app',[(_vm.loggedIn===null)?_c('v-content',[_c('v-container',{attrs:{\"fill-height\":\"\"}},[_c('v-row',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',[_c('div',{staticClass:\"text-xs-center\"},[_c('div',{staticClass:\"headline my-5\"},[_vm._v(\"Loading...\")]),_c('v-progress-circular',{attrs:{\"size\":\"100\",\"indeterminate\":\"\",\"color\":\"primary\"}})],1)])],1)],1)],1):_c('router-view'),_c('NotificationsManager')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Component from 'vue-class-component';\n\n// Register the router hooks with their names\nComponent.registerHooks([\n 'beforeRouteEnter',\n 'beforeRouteLeave',\n 'beforeRouteUpdate', // for vue-router 2.2+\n]);\n","import VeeValidate from 'vee-validate';\nimport Vue from 'vue';\n\nVue.use(VeeValidate);\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\nimport colors from 'vuetify/lib/util/colors';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: {\n themes: {\n light: {\n primary: colors.teal.lighten1,\n },\n dark: {\n primary: colors.teal.lighten1,\n },\n },\n },\n});\n","import store from '@/store';\nimport '@babel/polyfill';\nimport Vue from 'vue';\nimport VueWorker from 'vue-worker';\nimport App from './App.vue';\n// Import Component hooks before component definitions\nimport './component-hooks';\nimport './plugins/vee-validate';\nimport vuetify from './plugins/vuetify';\nimport router from './router';\n\nVue.config.productionTip = false;\n\nVue.use(VueWorker);\n\nnew Vue({\n router,\n store,\n vuetify,\n render: (h) => h(App),\n}).$mount('#app');\n","import { api } from '@/api';\nimport router from '@/router';\nimport { AxiosError } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { State } from '../state';\nimport {\n commitAddNotification,\n commitDisconnected,\n commitRemoveNotification,\n commitSetLoggedIn,\n commitSetLogInError,\n commitSetToken,\n} from './mutations';\nimport { AppNotification, MainState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionCheckToken(context: MainContext, payload: { token: string }) {\n try {\n const response = await api.getToken(payload.token);\n const token = response.data.token;\n if (token) {\n commitSetToken(context, token);\n commitSetLoggedIn(context, true);\n commitSetLogInError(context, false);\n await dispatchRouteLoggedIn(context);\n commitAddNotification(context, { content: 'Logged in', color: 'success' });\n } else {\n await dispatchLogOut(context);\n }\n } catch (err) {\n commitSetLogInError(context, true);\n await dispatchLogOut(context);\n }\n },\n async actionCheckLoggedIn(context: MainContext) {\n if (!context.state.isLoggedIn) {\n const token = context.state.token;\n if (token) {\n try {\n commitSetLoggedIn(context, true);\n } catch (error) {\n await dispatchRemoveLogIn(context);\n }\n } else {\n await dispatchRemoveLogIn(context);\n }\n }\n },\n async actionRemoveLogIn(context: MainContext) {\n commitSetToken(context, '');\n commitSetLoggedIn(context, false);\n },\n async actionLogOut(context: MainContext) {\n await dispatchRemoveLogIn(context);\n await dispatchRouteLogOut(context);\n },\n async actionUserLogOut(context: MainContext) {\n await dispatchLogOut(context);\n commitAddNotification(context, { content: 'Logged out', color: 'success' });\n },\n actionRouteLogOut(context: MainContext) {\n if (router.currentRoute.path !== '/login') {\n router.push('/login');\n }\n },\n async actionCheckApiError(context: MainContext, payload: AxiosError) {\n // check for general errors e.g. CORS or network issues\n if (!payload.response) {\n console.log('Network error');\n return commitDisconnected(context, true);\n }\n console.log('API error', payload.response);\n commitDisconnected(context, false);\n if (payload.response!.status === 401) {\n return await dispatchLogOut(context);\n }\n if (payload.response!.status === 404) {\n return commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n if (payload.response!.status === 500) {\n return commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n },\n actionRouteLoggedIn(context: MainContext) {\n if (router.currentRoute.path === '/login' || router.currentRoute.path === '/') {\n router.push('/main/dashboard');\n }\n },\n async removeNotification(context: MainContext, payload: { notification: AppNotification, timeout: number }) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n commitRemoveNotification(context, payload.notification);\n resolve(true);\n }, payload.timeout);\n });\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchCheckApiError = dispatch(actions.actionCheckApiError);\nexport const dispatchCheckLoggedIn = dispatch(actions.actionCheckLoggedIn);\nexport const dispatchCheckToken = dispatch(actions.actionCheckToken);\nexport const dispatchLogOut = dispatch(actions.actionLogOut);\nexport const dispatchUserLogOut = dispatch(actions.actionUserLogOut);\nexport const dispatchRemoveLogIn = dispatch(actions.actionRemoveLogIn);\nexport const dispatchRouteLoggedIn = dispatch(actions.actionRouteLoggedIn);\nexport const dispatchRouteLogOut = dispatch(actions.actionRouteLogOut);\nexport const dispatchRemoveNotification = dispatch(actions.removeNotification);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/beastiary/webapp-dist/js/login.a133ba4e.js b/backend/beastiary/webapp-dist/js/login.a133ba4e.js new file mode 100644 index 0000000..80a4763 --- /dev/null +++ b/backend/beastiary/webapp-dist/js/login.a133ba4e.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([["login"],{"0c18":function(t,e,r){},a55b:function(t,e,r){"use strict";r.r(e);var o=r("9ab4"),n=r("5f03"),i=r("d568"),s=r("2963"),a=r("60a3");function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(t){return typeof t}:function _typeof(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;r (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n getSlot(this, 'prepend') || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n getSlot(this, 'append'),\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, getSlot(this))\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=b749d036\"\nimport script from \"./Login.vue?vue&type=script&lang=ts\"\nexport * from \"./Login.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAlert,VBtn,VCard,VCardActions,VCardText,VContainer,VContent,VFlex,VForm,VLayout,VProgressCircular,VSpacer,VTextField,VToolbar,VToolbarTitle})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/beastiary/webapp-dist/js/login.d0ac523d.js b/backend/beastiary/webapp-dist/js/login.d0ac523d.js deleted file mode 100644 index 5aa852b..0000000 --- a/backend/beastiary/webapp-dist/js/login.d0ac523d.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([["login"],{"0c18":function(t,e,r){},a55b:function(t,e,r){"use strict";r.r(e);var o=r("9ab4"),n=r("5f03"),i=r("d568"),s=r("2963"),a=r("60a3");function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(t){return typeof t}:function _typeof(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var r=0;r {\n this.loading = false;\n });\n }\n private getTokenFromUrl() {\n // @ts-ignore\n return this.$router.history.current.query.token;\n }\n private mounted() {\n this.token = this.getTokenFromUrl();\n if (this.token) {\n this.submit();\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts\"","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'transitionable',\n\n props: {\n mode: String,\n origin: String,\n transition: String,\n },\n})\n","// Styles\nimport './VAlert.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Toggleable from '../../mixins/toggleable'\nimport Themeable from '../../mixins/themeable'\nimport Transitionable from '../../mixins/transitionable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNodeData } from 'vue'\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(\n VSheet,\n Toggleable,\n Transitionable\n).extend({\n name: 'v-alert',\n\n props: {\n border: {\n type: String,\n validator (val: string) {\n return [\n 'top',\n 'right',\n 'bottom',\n 'left',\n ].includes(val)\n },\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n coloredBorder: Boolean,\n dense: Boolean,\n dismissible: Boolean,\n closeIcon: {\n type: String,\n default: '$cancel',\n },\n icon: {\n default: '',\n type: [Boolean, String],\n validator (val: boolean | string) {\n return typeof val === 'string' || val === false\n },\n },\n outlined: Boolean,\n prominent: Boolean,\n text: Boolean,\n type: {\n type: String,\n validator (val: string) {\n return [\n 'info',\n 'error',\n 'success',\n 'warning',\n ].includes(val)\n },\n },\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n computed: {\n __cachedBorder (): VNode | null {\n if (!this.border) return null\n\n let data: VNodeData = {\n staticClass: 'v-alert__border',\n class: {\n [`v-alert__border--${this.border}`]: true,\n },\n }\n\n if (this.coloredBorder) {\n data = this.setBackgroundColor(this.computedColor, data)\n data.class['v-alert__border--has-color'] = true\n }\n\n return this.$createElement('div', data)\n },\n __cachedDismissible (): VNode | null {\n if (!this.dismissible) return null\n\n const color = this.iconColor\n\n return this.$createElement(VBtn, {\n staticClass: 'v-alert__dismissible',\n props: {\n color,\n icon: true,\n small: true,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: () => (this.isActive = false),\n },\n }, [\n this.$createElement(VIcon, {\n props: { color },\n }, this.closeIcon),\n ])\n },\n __cachedIcon (): VNode | null {\n if (!this.computedIcon) return null\n\n return this.$createElement(VIcon, {\n staticClass: 'v-alert__icon',\n props: { color: this.iconColor },\n }, this.computedIcon)\n },\n classes (): object {\n const classes: Record = {\n ...VSheet.options.computed.classes.call(this),\n 'v-alert--border': Boolean(this.border),\n 'v-alert--dense': this.dense,\n 'v-alert--outlined': this.outlined,\n 'v-alert--prominent': this.prominent,\n 'v-alert--text': this.text,\n }\n\n if (this.border) {\n classes[`v-alert--border-${this.border}`] = true\n }\n\n return classes\n },\n computedColor (): string {\n return this.color || this.type\n },\n computedIcon (): string | boolean {\n if (this.icon === false) return false\n if (typeof this.icon === 'string' && this.icon) return this.icon\n if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false\n\n return `$${this.type}`\n },\n hasColoredIcon (): boolean {\n return (\n this.hasText ||\n (Boolean(this.border) && this.coloredBorder)\n )\n },\n hasText (): boolean {\n return this.text || this.outlined\n },\n iconColor (): string | undefined {\n return this.hasColoredIcon ? this.computedColor : undefined\n },\n isDark (): boolean {\n if (\n this.type &&\n !this.coloredBorder &&\n !this.outlined\n ) return true\n\n return Themeable.options.computed.isDark.call(this)\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('outline')) {\n breaking('outline', 'outlined', this)\n }\n },\n\n methods: {\n genWrapper (): VNode {\n const children = [\n getSlot(this, 'prepend') || this.__cachedIcon,\n this.genContent(),\n this.__cachedBorder,\n getSlot(this, 'append'),\n this.$scopedSlots.close\n ? this.$scopedSlots.close({ toggle: this.toggle })\n : this.__cachedDismissible,\n ]\n\n const data: VNodeData = {\n staticClass: 'v-alert__wrapper',\n }\n\n return this.$createElement('div', data, children)\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-alert__content',\n }, getSlot(this))\n },\n genAlert (): VNode {\n let data: VNodeData = {\n staticClass: 'v-alert',\n attrs: {\n role: 'alert',\n },\n on: this.listeners$,\n class: this.classes,\n style: this.styles,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n }\n\n if (!this.coloredBorder) {\n const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor\n data = setColor(this.computedColor, data)\n }\n\n return this.$createElement('div', data, [this.genWrapper()])\n },\n /** @public */\n toggle () {\n this.isActive = !this.isActive\n },\n },\n\n render (h): VNode {\n const render = this.genAlert()\n\n if (!this.transition) return render\n\n return h('transition', {\n props: {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n },\n }, [render])\n },\n})\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=0cdc24d8\"\nimport script from \"./Login.vue?vue&type=script&lang=ts\"\nexport * from \"./Login.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VForm } from 'vuetify/lib/components/VForm';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAlert,VBtn,VCard,VCardActions,VCardText,VContainer,VContent,VFlex,VForm,VLayout,VProgressCircular,VSpacer,VTextField,VToolbar,VToolbarTitle})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/beastiary/webapp-dist/precache-manifest.fa6a2a3a4d2c58c79b67d9d3c6f38b5f.js b/backend/beastiary/webapp-dist/precache-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js similarity index 89% rename from backend/beastiary/webapp-dist/precache-manifest.fa6a2a3a4d2c58c79b67d9d3c6f38b5f.js rename to backend/beastiary/webapp-dist/precache-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js index 432963b..5ec2ed6 100644 --- a/backend/beastiary/webapp-dist/precache-manifest.fa6a2a3a4d2c58c79b67d9d3c6f38b5f.js +++ b/backend/beastiary/webapp-dist/precache-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js @@ -16,7 +16,7 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/css/chunk-vendors.91bba9cc.css" }, { - "revision": "a4f57096174a04d82470", + "revision": "138d9fb04dc75e2b97fd", "url": "/css/login.e537a9fa.css" }, { @@ -48,20 +48,20 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/favicon-32x32.png" }, { - "revision": "62517109d95e2aa630d51dc8eb26168d", + "revision": "c4c1fb674efd5db759f736ccca2bf435", "url": "/index.html" }, { - "revision": "98ca5f616aab3a8f64bb", - "url": "/js/app.e86e758b.js" + "revision": "6e867efd4546869abd2f", + "url": "/js/app.ae01b4f2.js" }, { "revision": "00f66af8c003f99efaae", "url": "/js/chunk-vendors.afbd1421.js" }, { - "revision": "a4f57096174a04d82470", - "url": "/js/login.d0ac523d.js" + "revision": "138d9fb04dc75e2b97fd", + "url": "/js/login.a133ba4e.js" }, { "revision": "fd8f51d32b82af6f1ac0", diff --git a/backend/beastiary/webapp-dist/service-worker.js b/backend/beastiary/webapp-dist/service-worker.js index e52d079..ab8ad2d 100644 --- a/backend/beastiary/webapp-dist/service-worker.js +++ b/backend/beastiary/webapp-dist/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/precache-manifest.fa6a2a3a4d2c58c79b67d9d3c6f38b5f.js" + "/precache-manifest.ec636913b2d9aae1876cfdc0bc41e9b2.js" ); workbox.core.setCacheNameDetails({prefix: "frontend"}); diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index 0cddc0e..da60b87 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -39,7 +39,7 @@ import { appName } from '@/env'; import { dispatchCheckToken } from '@/store/main/actions'; import { readLoginError } from '@/store/main/getters'; -import { Component, Vue } from 'vue-property-decorator'; +import { Component, Vue, Watch } from 'vue-property-decorator'; @Component @@ -53,10 +53,17 @@ export default class Login extends Vue { public submit() { this.loading = true; - dispatchCheckToken(this.$store, {token: this.token}).finally(() => { + dispatchCheckToken(this.$store, {token: this.token}) + } + + @Watch('loginError') + public onLoginErrorChange(error: string | null) { + if (error) { this.loading = false; - }); + } } + + private getTokenFromUrl() { // @ts-ignore return this.$router.history.current.query.token;