{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/index.ts","webpack:///./src/api/fleet-tracking/route.ts","webpack:///./src/store/modules/route.ts","webpack:///./src/components/NavBar.vue?c1c4","webpack:///./src/common/ErrorCode.ts","webpack:///./src/common/utils/date.ts","webpack:///./src/store/modules/tracking.ts","webpack:///./src/styles/index.scss?1737","webpack:///./src/auth/auth.ts","webpack:///./src/App.vue","webpack:///./src/components/NavBar.vue","webpack:///./src/types/clock.ts","webpack:///./node_modules/cache-loader/dist/cjs.js","webpack:///./src/components/NavBar.vue?01b1","webpack:///./src/components/NavBar.vue?5c6d","webpack:///src/App.vue","webpack:///./src/App.vue?d0fd","webpack:///./src/App.vue?a938","webpack:///./src/store/modules/auth.ts","webpack:///./src/services/PermissionService.ts","webpack:///./src/auth/permission.ts","webpack:///./src/router/guards.ts","webpack:///./src/router/index.ts","webpack:///./src/plugins/vuetify.ts","webpack:///./src/common/tenants.ts","webpack:///./src/common/analytics/vueGtagAdapter.ts","webpack:///./src/common/analytics/vue.ts","webpack:///./src/common/setup-analytics.ts","webpack:///./src/plugins/tooltip.ts","webpack:///./src/startup.ts","webpack:///./src/auth/types/user.ts","webpack:///./src/api/fleet-tracking/webpubsub.ts","webpack:///./src/common/utils/jwt.ts","webpack:///./src/auth/VueAuth.ts","webpack:///./src/plugins/auth0.ts","webpack:///./src/main.ts","webpack:///./src/api/fleet-tracking/fleetTrackingServiceClient.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","Vue","use","Vuex","Store","state","mutations","actions","async","GetRoute","deliveryRunReference","response","client","GetRoutes","routeQueryParameters","params","initialState","routes","selectedRouteTrackingData","RouteModule","VuexModule","this","SET_SELECTED_ROUTE_TRACKING_DATA","route","ADD_ROUTE","SET_ROUTES","SET_ROUTE","index","findIndex","x","RESET_ROUTES","searchFilters","startDateTimeUtc","date","startOfDay","Date","dateFrom","endDateTimeUtc","endOfDay","dateTo","searchTerm","searchText","Remote","reference","find","item","setSelectedRouteTrackingData","updateRouteTrackableAssetStates","trackableAssetStateChangedMessage","trackable","trackingDeviceIdentifier","travelledPath","concat","trackableAssetStates","__decorate","Mutation","Action","Module","namespaced","dynamic","store","routeMod","getModule","ErrorCode","toDateFormatted","format","dayjs","toLocalDateFormatted","utc","local","toDateIsoString","toISOString","startOf","endOf","setFilterOptionDateByName","filterOptions","subtract","checkValidDateRange","validDayRange","dateRange","diff","toString","parseInt","extend","timezone","advancedFormat","trackingModule","heading","locationDateTimeUtc","latitude","longitude","SET_TRACKABLE_ASSET_STATE","payload","set","trackableAssetState","setTrackableAssetState","rawError","trackingMod","instance","getInstance","useAuth0","authModule","_vm","attrs","staticClass","_s","on","$auth","staticRenderFns","_c","Clock","constructor","dateTime","update","time","timeZoneName","utcOffset","NavBar","updateClock","clock","mounted","timer","setInterval","beforeDestroy","clearInterval","login","loginWithRedirect","logout","returnTo","location","origin","Component","component","components","computed","theme","AuthModule","authAccessToken","permissions","setAuthAccessToken","setPermissions","authMod","hasAllPermissions","permToCheck","getPermissions","every","permission","includes","PermissionType","authRouterGuard","to","from","next","authService","fn","unwatch","isAuthenticated","setUserPermission","meta","isPublic","errorCode","InvalidOrganisation","appState","targetUrl","fullPath","loading","$watch","permissionRouterGuard","requiredPermission","appAccess","filter","NotAuthorized","HomePage","ErrorPage","VueRouter","path","props","redirect","router","beforeEach","opts","dark","options","customProperties","variations","Vuetify","Tenant","tenantData","tenantName","tenantCode","externalId","settings","themeSetting","setting","JSON","parse","apiKey","styleId","StaticTenantLoader","tenantId","domains","host","tenants","tenant","ConfigurationServiceTenantLoader","configurationServiceApiUrl","tenantConfigPath","tenantResult","fetch","headers","process","json","VueGtagAdapter","gtag","eventParams","action","event_category","category","event_label","label","VuePlugin","install","$analytics","adapter","setupGtagAnalytics","ga4token","VueGtag","config","id","send_page_view","enabled","bootstrap","$gtag","tooltips","NO_TRACKING_DEVICE","INACTIVE_TRACKING_DEVICE","STREET_VIEW","INCLUDE_NON_TRACKABLE","$tooltips","startup","beforeAppInitialised","tenantLoader","info","apiUrl","log","getTenantForHost","hostname","$tenant","themes","dragon","hfl","themeOverride","localStorage","getItem","tenantTheme","toLowerCase","$theme","AppTheme","hitrak","productionTip","VueGoogleMaps","load","v","googleMapsApiKey","map_ids","googleMapsStyleId","GmapCluster","vuetify","render","h","App","$mount","User","Auth0User","auth0User","super","objectId","GetClientAccessUri","uri","getParsedJwt","token","atob","split","VueAuth","auth0Client","getTokenSilently","accessToken","decodedToken","user","onRedirectCallback","redirectUri","auth0Options","domain","client_id","clientId","audience","redirect_uri","organizationId","organization","createAuth0Client","search","handleRedirectCallback","auth0Error","error_description","getUser","webpubsub","ws","WebSocket","onmessage","user_id","getUserObjectId","pathname","init","Auth0Plugin","FleetTrackingServiceClient","axios","baseURL","defaults","common","interceptors","Authorization","url","post","put","delete","fleetTrackingServiceClient"],"mappings":"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","file":"js/app.171a616d.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\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded 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 = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"home\":\"home\"}[chunkId]||chunkId) + \".\" + {\"home\":\"336fd0f0\"}[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 = {\"home\":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/\" + ({\"home\":\"home\"}[chunkId]||chunkId) + \".\" + {\"home\":\"45936a1f\"}[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 \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n state: {},\n mutations: {},\n actions: {},\n modules: {}\n});\n","import { QueryParameters, Route } from '@/api/fleet-tracking/types';\nimport { fleetTrackingServiceClient as client } from '@/api/fleet-tracking/fleetTrackingServiceClient';\n\nasync function GetRoute(deliveryRunReference: string): Promise {\n try {\n const response = await client.get(`/api/v1/routes/${deliveryRunReference}`);\n\n return response.data;\n } catch (error) {\n Promise.reject(error);\n }\n}\n\nasync function GetRoutes(routeQueryParameters: QueryParameters): Promise {\n try {\n const response = await client.get('/api/v1/routes', {\n params: routeQueryParameters\n });\n\n return response.data;\n } catch (error) {\n Promise.reject(error);\n return [];\n }\n}\n\nexport default {\n GetRoute,\n GetRoutes\n};\n","import { Action, Module, Mutation, VuexModule, getModule } from 'vuex-module-decorators';\nimport Remote from '@/api/fleet-tracking/route';\nimport store from '@/store/index';\nimport date from '@/common/utils/date';\nimport { QueryParameters, Route, TrackableAssetStateChangedMessage } from '@/api/fleet-tracking/types';\nimport { SearchFilters } from '@/types/search';\n\nfunction initialState() {\n return {\n routes: [],\n selectedRouteTrackingData: null\n };\n}\n\n@Module({\n namespaced: true,\n name: 'routeMod',\n dynamic: true,\n store\n})\nexport default class RouteModule extends VuexModule {\n routes: Route[] = initialState().routes;\n selectedRouteTrackingData: Route | null = initialState().selectedRouteTrackingData;\n\n get getRoutes(): Route[] {\n return this.routes;\n }\n\n get getSelectedRouteTrackingData(): Route | null {\n return this.selectedRouteTrackingData;\n }\n\n @Mutation\n private SET_SELECTED_ROUTE_TRACKING_DATA(route: Route | null): void {\n this.selectedRouteTrackingData = route;\n }\n\n @Mutation\n private ADD_ROUTE(route: Route): void {\n this.routes.push(route);\n }\n\n @Mutation\n private SET_ROUTES(routes: Route[]): void {\n this.routes = routes;\n }\n\n @Mutation\n private SET_ROUTE(route: Route): void {\n const index = this.routes.findIndex((x) => x.deliveryRunReference === route.deliveryRunReference);\n\n this.routes[index] = route;\n }\n\n @Mutation\n public RESET_ROUTES(): void {\n this.routes = initialState().routes;\n this.selectedRouteTrackingData = initialState().selectedRouteTrackingData;\n }\n\n @Action\n public async fetchRoutes(searchFilters: SearchFilters): Promise {\n const routeQueryParameters: QueryParameters = {\n startDateTimeUtc: date.startOfDay(new Date(searchFilters.dateFrom)),\n endDateTimeUtc: date.endOfDay(new Date(searchFilters.dateTo)),\n searchTerm: searchFilters.searchText\n };\n\n const routes = await Remote.GetRoutes(routeQueryParameters);\n this.SET_ROUTES(routes);\n }\n\n @Action\n public async fetchRoute(reference: string): Promise {\n const route = await Remote.GetRoute(reference);\n if (!!route && !this.routes.find((item) => item.deliveryRunReference === route?.deliveryRunReference)) {\n this.ADD_ROUTE(route);\n }\n }\n\n @Action\n public setSelectedRouteTrackingData(reference: string | null): void {\n const route = this.routes.find((item) => item.deliveryRunReference === reference);\n\n if (reference && route) {\n this.SET_SELECTED_ROUTE_TRACKING_DATA(route);\n } else {\n this.SET_SELECTED_ROUTE_TRACKING_DATA(null);\n }\n }\n\n @Action\n public updateRouteTrackableAssetStates(trackableAssetStateChangedMessage: TrackableAssetStateChangedMessage): void {\n const route = this.routes.find(\n (route) => route.trackable.trackingDeviceIdentifier === trackableAssetStateChangedMessage.trackingDeviceIdentifier\n );\n\n if (!route) return;\n\n route.travelledPath = route.travelledPath.concat(trackableAssetStateChangedMessage.trackableAssetStates);\n\n this.SET_ROUTE(route);\n }\n}\n\nexport const routeMod = getModule(RouteModule);\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/index.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=style&index=0&id=11749e26&prod&lang=scss&scoped=true&\"","export enum ErrorCode {\n NotAuthorized = 'not-authorised',\n NotFound = 'not-found',\n InvalidOrganisation = 'invalid-organisation'\n}\n","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport { QueryParameters } from '@/api/fleet-tracking/types';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(advancedFormat);\n\n/**\n * Converts a date/time into a formatted string representation.\n * @param date The date/time.\n * @param format The output format pattern.\n * @returns A string representation of the date/time in the requested format.\n */\nexport function toDateFormatted(date: Date, format: string): string {\n return dayjs(date).format(format);\n}\n\n/**\n * Converts a UTC date/time into a formatted local date/time.\n * @param date The date/time in UTC.\n * @param format The output format pattern.\n * @returns A string representation of the date/time in the requested format.\n */\nexport function toLocalDateFormatted(date: Date, format: string): string {\n if (!date) return 'N/A';\n\n return dayjs.utc(date).local().format(format);\n}\n\n/**\n * Converts a date/time into a ISO 8601 string representation.\n * @param date The date/time.\n * @returns A string representation of the date/time in ISO 8601 format.\n */\nexport function toDateIsoString(date: Date): string {\n return dayjs(date).toISOString();\n}\n\n/**\n * Converts the begining of the day of a local date/time into a UTC date/time.\n * @param date The date/time in local timezone.\n * @returns A string representation of the date/time in UTC for the begining of `date`.\n */\nexport function startOfDay(date: Date): string {\n return dayjs(date).startOf('day').utc().format();\n}\n\n/**\n * Converts the end of the day of a local date/time into a UTC date/time.\n * @param date The date/time in local timezone.\n * @returns A string representation of the date/time in UTC for the end of `date`.\n */\nexport function endOfDay(date: Date): string {\n return dayjs(date).endOf('day').utc().format();\n}\n\n// TODO: Refactor to only include date related functionality\nexport function setFilterOptionDateByName(name: string): QueryParameters {\n const filterOptions: QueryParameters = {\n startDateTimeUtc: '',\n endDateTimeUtc: '',\n searchTerm: null\n };\n switch (name) {\n case 'Today':\n filterOptions.startDateTimeUtc = dayjs().toISOString();\n filterOptions.endDateTimeUtc = dayjs().toISOString();\n break;\n case 'Yesterday':\n filterOptions.startDateTimeUtc = dayjs().subtract(1, 'day').toISOString();\n filterOptions.endDateTimeUtc = dayjs().subtract(1, 'day').toISOString();\n break;\n case 'Last 7 days':\n filterOptions.startDateTimeUtc = dayjs().subtract(6, 'day').toISOString();\n filterOptions.endDateTimeUtc = dayjs().toISOString();\n break;\n }\n return filterOptions;\n}\n\n/**\n * Converts the end of the day of a local date/time into a UTC date/time.\n * @param dateFrom The date/time in local timezone of From date picker.\n * @param dateTo The date/time in local timezone of To date picker.\n * @param validDayRange The validation date range in days.\n * @returns A boolean represents the dateTo value and dateFrom range is valid or not.\n */\nexport function checkValidDateRange(dateFrom: string, dateTo: string, validDayRange: number): boolean {\n const dateRange = dayjs(dateTo).diff(dateFrom, 'day').toString();\n return parseInt(dateRange) < validDayRange;\n}\nexport default { toDateFormatted, toLocalDateFormatted, toDateIsoString, startOfDay, endOfDay };\n","import { GeoCoordinate, TrackableAssetState, TrackableAssetStateChangedMessage } from '@/api/fleet-tracking/types';\nimport store from '@/store/index';\nimport { Action, getModule, Mutation, VuexModule, Module } from 'vuex-module-decorators';\nimport Vue from 'vue';\n\n@Module({\n namespaced: true,\n name: 'trackingMod',\n dynamic: true,\n store\n})\nexport default class trackingModule extends VuexModule {\n trackableAssetStates: { [trackingDeviceIdentifier: string]: TrackableAssetState } = {};\n\n get getTrackableAssetHeading() {\n return (trackingDeviceIdentifier: string): number | null => {\n return this.trackableAssetStates[trackingDeviceIdentifier]?.heading;\n };\n }\n\n get getTrackableDateTimeUtc() {\n return (trackingDeviceIdentifier: string): Date | null => {\n return this.trackableAssetStates[trackingDeviceIdentifier]?.locationDateTimeUtc;\n };\n }\n\n get getTrackableAssetLocation() {\n return (trackingDeviceIdentifier: string): GeoCoordinate | null => {\n if (!this.trackableAssetStates[trackingDeviceIdentifier]) return null;\n\n return {\n latitude: this.trackableAssetStates[trackingDeviceIdentifier].latitude,\n longitude: this.trackableAssetStates[trackingDeviceIdentifier].longitude\n };\n };\n }\n\n @Mutation\n private SET_TRACKABLE_ASSET_STATE(payload: { key: string; trackableAssetState: TrackableAssetState }) {\n Vue.set(this.trackableAssetStates, payload.key, payload.trackableAssetState);\n }\n\n @Action({ rawError: true })\n setTrackableAssetState(trackableAssetStateChangedMessage: TrackableAssetStateChangedMessage) {\n this.SET_TRACKABLE_ASSET_STATE({\n key: trackableAssetStateChangedMessage.trackingDeviceIdentifier,\n trackableAssetState:\n trackableAssetStateChangedMessage.trackableAssetStates[\n trackableAssetStateChangedMessage.trackableAssetStates.length - 1\n ]\n });\n }\n}\n\nexport const trackingMod = getModule(trackingModule);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"primary\":\"#718060\",\"secondary\":\"#3a3a3c\",\"surface\":\"#fff\",\"accent\":\"#ff550d\",\"brand\":\"#000\",\"textBrand\":\"#fff\"};","import { IVueAuth } from '@/auth';\n\nlet instance: IVueAuth;\n\n/** Returns the current instance of the SDK */\nexport const getInstance = (): IVueAuth => instance;\n\n/** Creates an instance of the Auth0 SDK. If one has already been created, it returns that instance */\nexport const useAuth0 = (authModule: IVueAuth): IVueAuth => {\n if (instance) return instance;\n instance = authModule;\n\n return instance;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('v-app',{style:(_vm.theme)},[_c('NavBar'),_c('RouterView')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',[_c('v-app-bar',{attrs:{\"dark\":\"\"}},[_c('div',{staticClass:\"navbar__logo shrink ml-5\"}),_c('div',{staticClass:\"title-clock\"},[_c('span',{staticClass:\"title-clock-time mr-2\"},[_vm._v(_vm._s(_vm.clock.time()))]),_c('span',{staticClass:\"mr-1\"},[_vm._v(\" UTC(\"+_vm._s(_vm.clock.timeZoneName())+\")\")]),_c('span',[_vm._v(\" \"+_vm._s(_vm.clock.utcOffset())+\" \")])]),(!_vm.$auth.loading)?_c('div',[(!_vm.$auth.isAuthenticated)?_c('v-btn',{staticClass:\"mx-2\",attrs:{\"text\":\"\"},on:{\"click\":_vm.login}},[_c('v-icon',[_vm._v(\"mdi-account-circle\")]),_c('span',{staticClass:\"ml-2 sign-out-text\"},[_vm._v(\"Sign In\")])],1):_c('v-btn',{staticClass:\"mx-2\",attrs:{\"text\":\"\"},on:{\"click\":_vm.logout}},[(_vm.$auth.user.picture)?_c('v-img',{staticClass:\"user-icon\",attrs:{\"src\":_vm.$auth.user.picture,\"height\":\"32\",\"width\":\"32\"}}):_c('v-icon',[_vm._v(\"\\n mdi-account-circle\\n \")]),_c('span',{staticClass:\"ml-2 sign-out-text\"},[_vm._v(\"Sign Out\")])],1)],1):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { toDateFormatted } from '@/common/utils/date';\n\nexport class Clock {\n dateTime: Date;\n\n constructor(date = new Date()) {\n this.dateTime = date;\n }\n\n update(date: Date) {\n this.dateTime = date;\n }\n\n time() {\n return toDateFormatted(this.dateTime, 'HH:mm:ss');\n }\n\n timeZoneName() {\n return toDateFormatted(this.dateTime, 'Z');\n }\n\n utcOffset() {\n return toDateFormatted(this.dateTime, 'zzz');\n }\n}\n","\nimport { Component, Vue } from 'vue-property-decorator';\nimport { Clock } from '@/types/clock';\n\n@Component({\n name: 'NavBar'\n})\nexport default class NavBar extends Vue {\n private clock: Clock = new Clock();\n private timer: any = null;\n\n private updateClock(): void {\n this.clock.update(new Date());\n }\n\n private mounted(): void {\n this.timer = setInterval(this.updateClock, 1000);\n }\n\n private beforeDestroy() {\n clearInterval(this.timer);\n }\n\n private login() {\n this.$auth.loginWithRedirect({});\n }\n\n private logout() {\n this.$auth.logout({\n returnTo: window.location.origin\n });\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NavBar.vue?vue&type=template&id=11749e26&scoped=true&\"\nimport script from \"./NavBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./NavBar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./NavBar.vue?vue&type=style&index=0&id=11749e26&prod&lang=scss&scoped=true&\"\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 \"11749e26\",\n null\n \n)\n\nexport default component.exports","\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=a9a80512&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\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","import { getModule, Mutation, VuexModule, Module } from 'vuex-module-decorators';\nimport store from '@/store/index';\nimport { PermissionType } from '@/auth/permission';\n\n@Module({\n namespaced: true,\n name: 'authMod',\n dynamic: true,\n store\n})\nexport default class AuthModule extends VuexModule {\n private authAccessToken = '';\n private permissions: PermissionType[] = [];\n\n get getAuthAccessToken(): string {\n return this.authAccessToken;\n }\n\n get getPermissions(): PermissionType[] {\n return this.permissions;\n }\n\n @Mutation\n setAuthAccessToken(authAccessToken: string): void {\n this.authAccessToken = authAccessToken;\n }\n\n @Mutation\n setPermissions(permissions: PermissionType[]): void {\n this.permissions = permissions;\n }\n}\n\nexport const authMod = getModule(AuthModule);\n","import { PermissionType } from '@/auth/permission';\nimport { authMod } from '@/store/modules/auth';\n\nexport function hasAnyPermissions(permToCheck: PermissionType[]): boolean {\n if (authMod.getPermissions) {\n return permToCheck.some((permission) => authMod.getPermissions.includes(permission));\n }\n return false;\n}\n\nexport function hasAllPermissions(permToCheck: PermissionType[]): boolean {\n if (authMod.getPermissions) {\n return permToCheck.every((permission) => authMod.getPermissions.includes(permission));\n }\n return false;\n}\n","export enum PermissionType {\n appAccess = 'Access.TRACKING',\n maintain = 'Tracking.MAINTAIN'\n}\n","import { NavigationGuardNext, Route } from 'vue-router';\nimport { getInstance } from '@/auth';\nimport { hasAllPermissions } from '@/services/PermissionService';\nimport { PermissionType } from '@/auth/permission';\nimport { authMod } from '@/store/modules/auth';\nimport { ErrorCode } from '@/common/ErrorCode';\n\nexport async function authRouterGuard(to: Route, from: Route, next: any) {\n const authService = getInstance();\n\n const fn = async () => {\n unwatch && unwatch();\n\n if (authService.isAuthenticated) {\n if (authMod.getPermissions.length < 1) {\n await authService.setUserPermission();\n }\n next();\n } else if (to.meta?.isPublic) {\n next();\n } else if (authService.errorCode === 'invalid_organisation') {\n next({ name: 'errorRoute', params: { code: ErrorCode.InvalidOrganisation.toString() } });\n } else {\n authService.loginWithRedirect({\n appState: { targetUrl: to.fullPath }\n });\n }\n };\n\n // If loading has already finished, check our auth state using `fn()`\n if (!authService.loading) {\n return await fn();\n }\n\n // Watch for the loading property to change before we check isAuthenticated\n const unwatch = authService.$watch('loading', async (loading: boolean) => {\n if (loading === false) {\n return await fn();\n }\n });\n}\n\nexport function permissionRouterGuard(to: Route, from: Route, next: NavigationGuardNext): void {\n if (to.meta?.isPublic) {\n next();\n } else {\n const requiredPermission = [PermissionType.appAccess, to.meta?.permission].filter((p) => p);\n\n if (!hasAllPermissions(requiredPermission)) {\n next({ name: 'errorRoute', params: { code: ErrorCode.NotAuthorized.toString() } });\n } else {\n next();\n }\n }\n}\n","import Vue from 'vue';\nimport VueRouter, { RouteConfig } from 'vue-router';\nimport { authRouterGuard, permissionRouterGuard } from '@/router/guards';\nconst HomePage = () => import(/* webpackChunkName: 'home' */ '@/components/HomePage.vue');\nconst ErrorPage = () => import(/* webpackChunkName: 'home' */ '@/components/ErrorPage.vue');\n\nVue.use(VueRouter);\n\nconst routes: RouteConfig[] = [\n {\n path: '/',\n component: HomePage,\n meta: {\n isPublic: false\n }\n },\n {\n path: '/error/:code?',\n name: 'errorRoute',\n component: ErrorPage,\n props: true,\n meta: {\n isPublic: true\n }\n },\n {\n path: '*',\n redirect: '/'\n }\n];\n\nconst router = new VueRouter({\n mode: 'history',\n routes\n});\n\nrouter.beforeEach(authRouterGuard);\nrouter.beforeEach(permissionRouterGuard);\n\nexport default router;\n","import Vue from 'vue';\nimport { UserVuetifyPreset } from 'vuetify';\nimport Vuetify from 'vuetify/lib';\n\nconst opts: Partial = {\n theme: {\n dark: false,\n // disable: true, TODO: Enable this setting\n options: {\n customProperties: true,\n variations: false\n }\n }\n};\n\nVue.use(Vuetify);\n\nexport default new Vuetify(opts);\n","import { PublicThemeProperties } from '@onsend/theming/lib/ThemeProperties';\n\ninterface TenantSetting {\n id: number;\n name: string;\n value: string;\n isClientSetting: boolean;\n}\n\nexport interface TenantData {\n tenantId: number;\n tenantName: string;\n tenantCode: string;\n externalId: string;\n domains: string[];\n settings: TenantSetting[];\n}\n\nexport class Tenant {\n private tenantData: TenantData;\n\n constructor(tenantData: TenantData) {\n this.tenantData = tenantData;\n }\n\n get tenantName(): string {\n return this.tenantData.tenantName;\n }\n\n get tenantCode(): string {\n return this.tenantData.tenantCode;\n }\n\n get externalId(): string {\n return this.tenantData.externalId;\n }\n\n get settings(): TenantSetting[] {\n return this.tenantData.settings;\n }\n\n get themeProperties(): PublicThemeProperties | undefined {\n const themeSetting = this.settings.find((setting: TenantSetting) => setting.name === 'Client.Theme.Properties');\n\n if (!themeSetting)\n return undefined;\n\n return JSON.parse(themeSetting.value) as PublicThemeProperties;\n }\n\n get googleMapsApiKey(): string {\n const apiKey = this.settings.find((setting: TenantSetting) => setting.name === 'FleetTrackerApp:GoogleMaps:ApiKey')?.value;\n\n if (!apiKey)\n throw new Error('Google Maps API key cannot be null or an empty string.');\n\n return apiKey;\n }\n\n get googleMapsStyleId(): string {\n const styleId = this.settings.find((setting: TenantSetting) => setting.name === 'FleetTrackerApp:GoogleMaps:MapStyleId')?.value;\n\n if (!styleId)\n throw new Error('Google Maps style ID cannot be null or an empty string.');\n\n return styleId;\n }\n}\n\nexport interface ITenantLoader {\n getTenantForHost(host: string): Promise;\n}\n\nexport class StaticTenantLoader implements ITenantLoader {\n tenants: TenantData[] = [\n {\n tenantId: 1000,\n tenantName: 'OnSend-devtest',\n tenantCode: '',\n externalId: 'org_YI7SFVOmL9DAtr9Z',\n domains: ['localhost', 'track-local.onsend.com', 'track-dev.onsend.com', 'track-test.onsend.com'],\n settings: []\n },\n\n {\n tenantId: 1001,\n tenantName: 'DragonFreight-devtest',\n tenantCode: '',\n externalId: 'org_nZSFcRT5Wny4EL2m',\n domains: ['track-local.dragon-freight.com', 'track-dev.dragon-freight.com', 'track-test.dragon-freight.com'],\n settings: []\n },\n\n {\n tenantId: 1002,\n tenantName: 'OnSend',\n tenantCode: '',\n externalId: 'org_J143vxecuSAqCmjo',\n domains: ['track.onsend.com'],\n settings: []\n },\n\n {\n tenantId: 1003,\n tenantName: 'DragonFreight',\n tenantCode: '',\n externalId: 'org_X3RcDMUYo1rvZhuK',\n domains: ['track.dragon-freight.com'],\n settings: []\n }\n ];\n\n async getTenantForHost(host: string): Promise {\n const tenantData = this.tenants.find((tenant) => tenant.domains.includes(host));\n\n if (!tenantData) {\n return undefined;\n }\n\n return new Tenant(tenantData);\n }\n}\n\nexport class ConfigurationServiceTenantLoader implements ITenantLoader {\n configurationServiceApiUrl: string;\n\n constructor(configurationServiceApiUrl: string) {\n this.configurationServiceApiUrl = configurationServiceApiUrl;\n }\n\n async getTenantForHost(host: string): Promise {\n const tenantConfigPath = `/api/v1/configuration/tenants/${host}/clientSettings`;\n const tenantResult = await fetch(`${this.configurationServiceApiUrl}${tenantConfigPath}`, {\n headers: {\n 'X-AppName': process.env.VUE_APP_APP_NAME,\n 'X-AppVersion': process.env.VUE_APP_APP_VERSION\n }\n });\n const tenantData = (await tenantResult.json()) as TenantData;\n\n return new Tenant(tenantData);\n }\n}\n","import type { VueGtag } from 'vue-gtag';\nimport { AnalyticsAdapter, EventParams } from './IAnalyticsAdapter';\n\n/**\n * This adapter uses Google Analytics V4\n *\n * @example\n * Vue.use(\n * VueGtag,\n * {\n * config: { id: ga4Token },\n * enabled: !!ga4Token,\n * bootstrap: !!ga4Token\n * },\n * router\n * );\n *\n * Vue.use(AnalyticsPlugin, { adapter: new VueGtagAdapter(Vue.prototype.$gtag) });\n * ```\n */\nexport class VueGtagAdapter implements AnalyticsAdapter {\n constructor(private readonly gtag: VueGtag) {}\n\n event(eventParams: EventParams): void {\n this.gtag.event(eventParams.action, {\n event_category: eventParams.category,\n event_label: eventParams.label,\n value: eventParams.value\n });\n }\n}\n","import { PluginObject, VueConstructor } from 'vue';\nimport { AnalyticsAdapter } from './IAnalyticsAdapter';\n\ndeclare module 'vue/types/vue' {\n interface Vue {\n $analytics: AnalyticsAdapter;\n }\n}\n\nexport const VuePlugin: PluginObject = {\n install: (Vue: VueConstructor, options: { adapter: AnalyticsAdapter }) => {\n Vue.prototype.$analytics = options.adapter;\n }\n};\n","import { VueConstructor } from 'vue';\nimport VueGtag from 'vue-gtag';\nimport { VueGtagAdapter, VuePlugin } from '@/common/analytics';\nimport Router from 'vue-router';\n\nexport function setupGtagAnalytics(Vue: VueConstructor, ga4token: string | undefined, router: Router): void {\n Vue.use(\n VueGtag,\n {\n config: {\n id: ga4token,\n params: {\n send_page_view: false\n }\n },\n enabled: !!ga4token,\n bootstrap: !!ga4token\n },\n router\n );\n\n Vue.use(VuePlugin, { adapter: new VueGtagAdapter(Vue.prototype.$gtag) });\n}\n","import { VueConstructor } from 'vue';\n\nconst tooltips = {\n NO_TRACKING_DEVICE: 'No tracking device for this asset has been configured',\n INACTIVE_TRACKING_DEVICE: 'The tracking device for this asset has been flagged due to device inactivity',\n STREET_VIEW: 'View location on Google Maps Street View',\n INCLUDE_NON_TRACKABLE: 'Include routes and assets without tracking devices in the search results'\n};\n\nexport default {\n install(Vue: VueConstructor) {\n Vue.prototype.$tooltips = tooltips;\n }\n};\n","import Vue, { VNode, VueConstructor } from 'vue';\nimport App from './App.vue';\nimport router from './router';\nimport store from './store';\nimport vuetify from './plugins/vuetify';\nimport '@/styles/index.scss';\nimport { ITenantLoader, ConfigurationServiceTenantLoader, StaticTenantLoader, Tenant } from '@/common/tenants';\nimport { AppTheme, themes } from '@onsend/theming';\nimport VueRouter from 'vue-router';\nimport { setupGtagAnalytics } from '@/common/setup-analytics';\nimport * as VueGoogleMaps from 'gmap-vue';\nimport GmapCluster from 'gmap-vue/dist/components/cluster';\nimport tooltips from './plugins/tooltip';\n\nexport async function startup(\n beforeAppInitialised: (vue: VueConstructor, router: VueRouter, tenant?: Tenant) => void\n): Promise {\n console.info(`Starting ${process.env.VUE_APP_APP_NAME}@${process.env.VUE_APP_APP_VERSION}`);\n\n let tenantLoader: ITenantLoader;\n const apiUrl = process.env.VUE_APP_CONFIGURATION_API_URL;\n if (apiUrl && apiUrl !== '') {\n console.log('Using configuration service tenant loader');\n tenantLoader = new ConfigurationServiceTenantLoader(apiUrl);\n } else {\n console.log('Using static tenant configuration');\n tenantLoader = new StaticTenantLoader();\n }\n\n const tenant = await tenantLoader.getTenantForHost(window.location.hostname);\n Vue.prototype.$tenant = tenant;\n\n themes.dragon = themes.hfl;\n const themeOverride = localStorage.getItem('theme');\n const tenantTheme = themes[(themeOverride || tenant!.tenantCode).toLowerCase()];\n Vue.prototype.$theme = new AppTheme(tenantTheme || {}, themes.hitrak);\n\n Vue.config.productionTip = false;\n\n Vue.use(VueGoogleMaps, {\n load: {\n v: 'beta',\n key: tenant?.googleMapsApiKey,\n map_ids: tenant?.googleMapsStyleId\n }\n });\n\n Vue.use(tooltips);\n\n Vue.component('GmapCluster', GmapCluster);\n\n setupGtagAnalytics(Vue, process.env.VUE_APP_GA4_TOKEN, router);\n\n beforeAppInitialised(Vue, router, tenant);\n\n new Vue({\n router,\n store,\n vuetify,\n render: (h): VNode => h(App)\n }).$mount('#app');\n}\n","import { User as Auth0User } from '@auth0/auth0-spa-js';\n\nexport class User extends Auth0User {\n objectId = '';\n\n constructor(auth0User?: Auth0User) {\n super();\n\n if (!auth0User) return;\n\n for (const key in auth0User) {\n this[key] = auth0User[key];\n }\n\n this.objectId = auth0User['http://onsend.com/identity/claims/objectid'] as string;\n }\n}\n","import { fleetTrackingServiceClient as client } from '@/api/fleet-tracking/fleetTrackingServiceClient';\n\nasync function GetClientAccessUri(): Promise {\n try {\n const response = await client.get('/api/v1/client/negotiate');\n\n return response.data.uri;\n } catch (error) {\n Promise.reject(error);\n }\n}\n\nexport default {\n GetClientAccessUri\n};\n","/**\n * Returns a JS object representation of a Javascript Web Token from its common encoded\n * string form.\n *\n * @template T the expected shape of the parsed token\n * @param {string} token a Javascript Web Token in base64 encoded, `.` separated form\n * @returns {(T | undefined)} an object-representation of the token\n * or undefined if parsing failed\n */\nexport function getParsedJwt(token: string): T | undefined {\n try {\n return JSON.parse(atob(token.split('.')[1]));\n } catch {\n return undefined;\n }\n}\n","import { Vue, Component } from 'vue-property-decorator';\nimport createAuth0Client, {\n Auth0Client,\n RedirectLoginOptions,\n GetTokenSilentlyOptions,\n LogoutOptions,\n Auth0ClientOptions\n} from '@auth0/auth0-spa-js';\nimport type { GenericError } from '@auth0/auth0-spa-js/dist/typings/errors';\nimport { User } from './types/user';\nimport { Auth0Options } from '@/auth/types/auth0Options';\nimport { RedirectCallback } from '@/auth/types/auth0PluginOptions';\nimport webpubsub from '@/api/fleet-tracking/webpubsub';\nimport { trackingMod } from '@/store/modules/tracking';\nimport { routeMod } from '@/store/modules/route';\nimport { TrackableAssetStateChangedMessage } from '@/api/fleet-tracking/types';\nimport { authMod } from '@/store/modules/auth';\nimport { getParsedJwt } from '@/common/utils/jwt';\nimport { IVueAuth, VueAuthErrorCode } from '@/auth/index';\n\n@Component({})\nexport class VueAuth extends Vue implements IVueAuth {\n private auth0Client?: Auth0Client;\n\n loading = true;\n isAuthenticated? = false;\n user?: User;\n error?: Error;\n errorCode: VueAuthErrorCode | null = null;\n\n /** Authenticates the user using the redirect method */\n loginWithRedirect(o: RedirectLoginOptions): Promise | undefined {\n return this.auth0Client?.loginWithRedirect(o);\n }\n\n /** Returns the access token. If the token is invalid or missing, a new one is retrieved */\n getTokenSilently(o: GetTokenSilentlyOptions): Promise | undefined {\n return this.auth0Client?.getTokenSilently(o);\n }\n\n /** Logs the user out and removes their session on the authorization server */\n logout(o: LogoutOptions) {\n return this.auth0Client?.logout(o);\n }\n\n public async setUserPermission(): Promise {\n const accessToken = await this.$auth.getTokenSilently({});\n const decodedToken = getParsedJwt(accessToken!);\n\n await authMod.setPermissions(decodedToken.permissions);\n await authMod.setAuthAccessToken(accessToken!);\n }\n\n public async getUserObjectId(): Promise {\n return this.user!.objectId;\n }\n\n /** Use this lifecycle method to instantiate the SDK client */\n async init(onRedirectCallback: RedirectCallback, redirectUri: string, auth0Options: Auth0Options): Promise {\n const options: Auth0ClientOptions = {\n domain: auth0Options.domain,\n client_id: auth0Options.clientId,\n audience: auth0Options.audience,\n redirect_uri: redirectUri\n };\n\n if (auth0Options.organizationId) {\n options.organization = auth0Options.organizationId;\n }\n\n // Create a new instance of the SDK client using members of the given options object\n this.auth0Client = await createAuth0Client(options);\n\n try {\n const search = window.location.search;\n\n // If the user is returning to the app after authentication..\n if (search.includes('error=') || (search.includes('code=') && search.includes('state='))) {\n // handle the redirect and retrieve tokens\n const { appState } = (await this.auth0Client?.handleRedirectCallback()) ?? {\n appState: undefined\n };\n\n // Notify subscribers that the redirect callback has happened, passing the appState\n // (useful for retrieving any pre-authentication state)\n onRedirectCallback(appState);\n }\n } catch (e: unknown) {\n if (e instanceof Error) {\n if ('error' in e) {\n const auth0Error = e as GenericError;\n if (\n auth0Error.error === 'access_denied' &&\n auth0Error.error_description.includes('is not part of the org_')\n ) {\n this.errorCode = 'invalid_organisation';\n } else if (auth0Error.error === 'invalid_state') {\n this.errorCode = 'invalid_state';\n } else {\n this.errorCode = 'generic_error';\n }\n this.error = e;\n } else {\n this.errorCode = 'generic_error';\n this.error = e;\n }\n } else if (typeof e === 'string') {\n this.errorCode = 'generic_error';\n this.error = new Error(e);\n } else {\n this.errorCode = 'generic_error';\n this.error = new Error('Something went wrong');\n }\n } finally {\n // Initialize our internal authentication state when the page is reloaded\n this.isAuthenticated = await this.auth0Client?.isAuthenticated();\n this.user = new User(await this.auth0Client?.getUser());\n this.loading = false;\n\n const response = await webpubsub.GetClientAccessUri();\n\n const ws = new WebSocket(response);\n\n ws.onmessage = function (message) {\n const data: TrackableAssetStateChangedMessage = JSON.parse(message.data);\n\n trackingMod.setTrackableAssetState(data);\n routeMod.updateRouteTrackableAssetStates(data);\n };\n\n ws.onerror = function (data) {\n console.log(data);\n };\n\n this.$gtag.config({ user_id: await this.getUserObjectId() })\n }\n }\n}\n","import { VueConstructor } from 'vue';\nimport { useAuth0, IVueAuth } from '@/auth';\n\nexport default {\n install(Vue: VueConstructor, options: { authModule: IVueAuth }): void {\n Vue.prototype.$auth = useAuth0(options.authModule);\n }\n};\n","import { startup } from '@/startup';\nimport { VueAuth } from '@/auth/VueAuth';\nimport Auth0Plugin from '@/plugins/auth0';\n\nstartup((Vue, router, tenant) => {\n const onRedirectCallback = (appState: any): void => {\n router.push(appState?.targetUrl ? appState.targetUrl : window.location.pathname);\n };\n\n const authModule = new VueAuth();\n authModule.init(onRedirectCallback, window.location.origin, {\n domain: process.env.VUE_APP_AUTH0_DOMAIN,\n clientId: process.env.VUE_APP_AUTH0_CLIENT_ID,\n audience: process.env.VUE_APP_AUTH0_AUDIENCE,\n organizationId: tenant?.externalId\n });\n\n Vue.use(Auth0Plugin, { authModule });\n});\n","import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { getInstance } from '@/auth';\n\nclass FleetTrackingServiceClient {\n private readonly instance: AxiosInstance;\n\n constructor() {\n this.instance = axios.create({\n baseURL: process.env.VUE_APP_FLEET_TRACKING_API_URL\n });\n\n this.instance.defaults.headers.common['X-AppName'] = process.env.VUE_APP_APP_NAME;\n this.instance.defaults.headers.common['X-AppVersion'] = process.env.VUE_APP_APP_VERSION;\n\n this.instance.interceptors.request.use(async (config) => {\n const authService = getInstance();\n const token = await authService.getTokenSilently({});\n config.headers.Authorization = `Bearer ${token}`;\n\n return config;\n });\n }\n\n get(url: string, config?: AxiosRequestConfig): Promise> {\n return this.instance.get(url, config);\n }\n\n post(url: string, data?: any, config?: AxiosRequestConfig): Promise> {\n return this.instance.post(url, data, config);\n }\n\n put(url: string, data?: any, config?: AxiosRequestConfig): Promise> {\n return this.instance.put(url, data, config);\n }\n\n delete(url: string, config?: AxiosRequestConfig): Promise> {\n return this.instance.delete(url, config);\n }\n}\n\nexport const fleetTrackingServiceClient = new FleetTrackingServiceClient();\n"],"sourceRoot":""}