{"version":3,"sources":["theme/logo-dark.svg","theme/linux-tux.svg","theme/logo.svg","theme/logo-animation.svg","theme/icons/azure-small.svg","theme/icons/azure.svg","theme/icons/aws-small.svg","theme/icons/aws.svg","components/auth/GoogleG.svg","theme/stone-bg.svg","theme/icons/__triangle.svg","theme/icons/blog.svg","theme/icons/__book2.svg","theme/tech-stack.png","components/auth/auth0Config.ts","history.ts","store/Auth.ts","api.ts","store/user.ts","store/index.ts","store/companyProfile.ts","store/configureStore.ts","components/auth/MustBeLoggedIn.tsx","components/auth/RequireUser.tsx","components/theme/Spinner.tsx","components/LoadingState.tsx","components/theme/PageSection.js","components/theme/Table.tsx","components/support/CompanyList.tsx","components/auth/NavbarLogin.tsx","components/theme/colours.ts","components/theme/Nav.tsx","components/NavMenu.tsx","components/Layout.tsx","components/Home.tsx","components/Form.tsx","components/customer/InviteToTeam.tsx","components/customer/CompanyLoader.tsx","components/customer/Log.tsx","components/dashboard/Metric.tsx","components/dashboard/Chart.tsx","components/theme/Badge.tsx","components/theme/Tab.tsx","components/theme/ContextMenu.tsx","components/customer/ClusterContextMenu.tsx","store/types.ts","components/customer/ProjectList.tsx","components/Confirmation.tsx","components/customer/UserList.tsx","components/customer/License.tsx","components/customer/Subscription.tsx","components/customer/Company.tsx","components/customer/EditCompany.tsx","components/theme/TextLink.tsx","components/customer/NewProject.tsx","components/theme/Breadcrumb.tsx","components/customer/UserMultiselect.tsx","components/customer/ClusterAccess.tsx","components/customer/EditCluster.tsx","components/customer/SdkDownloads.tsx","ProfileRoute.tsx","components/support/NewCompany.tsx","CompaniesRoute.tsx","components/support/NewPersonalAccount.tsx","components/support/PersonalAccountList.tsx","PersonalAccountsRoute.tsx","components/platform-sdk/PlatformSDKDownload.tsx","PlatformSDKDownloadsRoute.tsx","components/theme/Divider.tsx","components/theme/BrandingPartition.tsx","components/Footer.tsx","components/auth/SignIn.tsx","components/auth/AuthLayout.tsx","components/auth/SignUp.tsx","components/auth/Password.tsx","components/auth/EditProfile.tsx","AuthRoute.tsx","App.tsx","registerServiceWorker.ts","index.tsx"],"names":["module","exports","auth0","domain","clientID","responseType","scope","audience","redirectUri","window","location","origin","leeway","baseUrl","document","getElementsByTagName","getAttribute","createBrowserHistory","basename","authenticated","accessToken","authUserProfile","type","payload","displayName","name","email","emailVerified","email_verified","isSso","sub","startsWith","checkEmailVerified","history","replace","message","url","parts","args","map","p","i","encodeURIComponent","join","auth","identity","store","getState","Error","Authorization","postCompany","companyRequest","a","superagent","post","set","send","postUser","companyKey","deleteUser","key","delete","updateUser","patch","listPersonalAccounts","get","then","r","body","postPersonalAccount","personalAccountRequest","deletePersonalAccount","fetchCompany","updateCompany","listCompanies","fetchCluster","postCluster","aetherEngineVersion","bundle","field","attach","patchCluster","listCompanyPlatformClusters","fetchCurrentUser","fetchLog","getAetherSdkDownloadUrl","text","getPlatformSdkDownloadUrl","getStagedPlatformSdkDownloadUrl","container","version","filename","getTerraformScriptDownloadUrl","cloudProvider","fetchBandwidthMetrics","clusterKey","getClusterVersions","getSdkVersions","manifest","getSdkVersionsDescending","versions","reverse","fetchUser","dispatch","state","user","networkState","isLoggedIn","reducers","action","userKey","undefined","account","isSupportUser","personalAccount","companies","admin","companyProfile","company","users","filter","u","updated","configureStore","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","push","createStore","compose","applyMiddleware","connect","children","React","useEffect","redirectPath","pathname","Fragment","requireUser","Component","props","RequireAdmin","RequireSupport","Logo","styled","img","alt","src","logo","LoadingState","className","Spinner","color","useLoadingState","loadFunction","setState","result","setResult","reload","catch","FormSectionInner","div","Constraint","FormSection","FormSectionBorder","WideSectionInner","WideSection","SectionDivider","FullWidthSection","H1","h1","RightAlign","Row","PageHeading","extras","SubFullWidthSection","SectionHeading","table","Create","id","to","CompanyTable","api","Table","c","Circle","DropdownToggle","Authenticated","initials","split","slice","x","UncontrolledDropdown","nav","inNavbar","DropdownMenu","right","DropdownItem","href","onClick","webAuth0","logout","returnTo","Unauthenticated","NavItem","Navbar","Styled","ReactStrap","navStyling","colours","NavLink","RouterLink","NavAnchor","BrandStyle","NavbarBrand","Brand","Right","NavItemList","ul","isOpen","toggle","this","light","Container","NavbarToggler","Collapse","navbar","target","companyKeys","Object","keys","content","CompanyList","length","Layout","useState","network","setNetwork","errorHandled","setErrorHandled","successMessage","redirect","onSubmit","e","preventDefault","error","onError","UncontrolledAlert","Invite","match","params","submit","bind","FormGroup","Label","Input","required","value","onChange","currentTarget","Button","withCompanyLoader","Inner","Loader","rest","withCompanyFromRoute","WrappedInner","formatter","Intl","DateTimeFormat","navigator","languages","year","month","day","hour","minute","hour12","LogTable","log","style","width","entries","entry","date","Date","timestamp","format","details","actor","summary","MetricHeader","h6","MetricBody","title","metric","dataFormat","data","time","timeFormat","toLocaleTimeString","height","indexBy","enableLabel","colors","margin","bottom","tooltip","toLocaleString","maximumFractionDigits","useGrouping","axisBottom","tickValues","tickRotation","button","active","DropdownToggleStyle","cluster","ContextMenu","tag","Link","CloudProviders","azureLogo","logoSmall","azureLogoSmall","shortDisplayName","homepage","awsLogo","awsLogoSmall","getCloudProvider","providerId","found","find","toLowerCase","ClusterCard","Card","GridBody","CardBody","LogsBadge","Badge","Key","code","ProviderLogo","ClusterTitle","formatBandwidthMetric","bandwidthMetric","toFixed","formatCreationDate","formatted","creationDate","toLocaleDateString","Cluster","provider","CardTitle","includes","logs","rel","CardText","formatAetherEngineVersion","total","ClusterContextMenu","marginTop","gridRow","gridColumn","tabNames","TabGroup","clusters","platClustList","setActive","Tab","pcs","platClust","Page","licenses","aether","PlatformClusterList","status","textAlign","created","whiteSpace","sdkVersion","Modal","show","ModalBody","ModalFooter","onClose","onConfirm","confirmText","UserContextMenu","currentUser","showConfirmation","setShowConfirmation","isCurrentUser","setAdmin","isAdmin","roles","Confirmation","removeUser","UserTable","ProductFlagPanel","data-testid","muxer","platform","DateFormat","language","endDate","subscription","Extras","marginRight","ProjectList","UserList","Log","License","Subscription","setPatch","setNameState","setAetherState","setPlatformState","yyyymmdd","toISOString","setEndDateState","v","checked","size","create","TextLink","TextAnchor","CloudSelectInput","ClusterVersions","setVersion","sort","b","localeCompare","val","index","isBeta","setName","setCloudProvider","setBundle","setStatus","download","defaultChecked","default","marginBottom","invalid","files","FormFeedback","separate","Separator","span","part","f","userChecked","selected","adminsPreselected","userDisabled","disabled","k","setUsers","UserMultiselect","Breadcrumb","ClusterAccess","locn","useLocation","startTab","downloadAetherSDK","draw","ManifestNames","setManifest","downloadLink","setDownloadLink","selectedVersion","setSelectedVersion","useRef","current","link","LinuxDownload","PlatformContainer","PlatformLogo","linuxLogo","PlatformContent","PlatformDownloadCode","theme","dracula","showLineNumbers","wrapLines","codeBlock","ManifestSelect","VersionSelect","setVer","cancel","downloadStagedSdk","Main","InlinePre","PlatformDownload","path","useRouteMatch","exact","component","Company","EditCompany","InviteToTeam","NewProject","EditCluster","SDKDownloads","NewCompany","contact","NewPersonalAccount","username","DownloadsLink","Downloads","PersonalAccountTable","personalAccounts","setPersonalAccounts","accounts","console","requireAdmin","PersonalAccountList","Title","Description","Warning","pre","AllPlatformsDownload","PlatformSDKDownloads","PlatformSDKDownload","NarrowHeader","LeftPanel","RightPanel","HadeanStoneBackground","PartitionStyle","BrandingPartition","lhs","rhs","Footer","footer","getFullYear","LeftPanelContent","LinkSectionStyle","themes","WhiteBackgroundFormFeedback","SignInButton","Tooltip","ToSCheckBox","input","LinkSection","hadeanIcon","blogIcon","docIcon","SignIn","setChecked","setEmail","password","setPassword","setError","TechStack","TechStackImage","Promise","resolve","reject","login","realm","err","htmlFor","Divider","authorize","connection","mode","googleLogo","horizontalLogo","SignUp","AuthLayout","signup","ForgotPassword","changePassword","EditForm","passwordSent","setPasswordSent","readOnly","Password","EditProfile","initialise","parseHash","hashResult","idTokenPayload","checkSession","sessionResult","Home","AuthRoute","CompaniesRoute","PersonalAccountsRoute","PlatformSDKDownloadsRoute","ProfileRoute","isLocalhost","Boolean","hostname","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","reactPlugin","ReactPlugin","ApplicationInsights","config","instrumentationKey","process","extensions","extensionConfig","identifier","isCookieUseDisabled","loadAppInsights","ReactDOM","getElementById","URL","toString","addEventListener","fetch","response","contentType","headers","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.3d006e14.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo-dark.57203d6a.svg\";","module.exports = __webpack_public_path__ + \"static/media/linux-tux.00a9bfa0.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.241e4229.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo-animation.d6164a08.svg\";","module.exports = __webpack_public_path__ + \"static/media/azure-small.660faf36.svg\";","module.exports = __webpack_public_path__ + \"static/media/azure.1bf7d880.svg\";","module.exports = __webpack_public_path__ + \"static/media/aws-small.fea38bbf.svg\";","module.exports = __webpack_public_path__ + \"static/media/aws.a1800d60.svg\";","module.exports = __webpack_public_path__ + \"static/media/GoogleG.3ec228d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/stone-bg.1db0c117.svg\";","module.exports = __webpack_public_path__ + \"static/media/__triangle.ec4f99d0.svg\";","module.exports = __webpack_public_path__ + \"static/media/blog.8e40d60f.svg\";","module.exports = __webpack_public_path__ + \"static/media/__book2.02bd2e96.svg\";","module.exports = __webpack_public_path__ + \"static/media/tech-stack.d36e5ab2.png\";","import * as auth0 from 'auth0-js'\n\nexport default new auth0.WebAuth({\n domain: 'auth.hadean.com',\n clientID: 'aGgITA0OmCmz7Xzl6FX7RMQy1bAwjDLJ',\n responseType: 'token id_token',\n scope: 'openid profile email',\n audience: 'https://portal.hadean.com/api',\n redirectUri: window.location.origin,\n leeway: 60\n})","import { createBrowserHistory } from 'history'\n// Create browser history to use in the Redux store\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string\nexport default createBrowserHistory({ basename: baseUrl })\n","import { Reducer, AnyAction } from 'redux'\nimport { ThunkDispatch } from 'redux-thunk'\nimport webAuth0 from '../components/auth/auth0Config'\nimport { Auth0UserProfile } from 'auth0-js'\nimport history from '../history'\n\nexport interface AuthUserProfile {\n\tdisplayName: string,\n\temail: string,\n\temailVerified: boolean,\n\tisSso: boolean,\n\taccessToken: string\n}\n\nexport interface AuthState {\n\tisLoggedIn: boolean | undefined,\n\tidentity: AuthUserProfile | null,\n\tuserKey: string | null\n}\n\nexport interface AuthStateChanged { type: 'AUTH_STATE_CHANGED', payload: AuthUserProfile | null }\nconst authenticated = (accessToken: string, authUserProfile: Auth0UserProfile): AuthStateChanged =>\n\t({\n\t\ttype: 'AUTH_STATE_CHANGED',\n\t\tpayload: {\n\t\t\tdisplayName: authUserProfile.name,\n\t\t\temail: authUserProfile.email!,\n\t\t\temailVerified: authUserProfile.email_verified!,\n\t\t\tisSso: !authUserProfile.sub.startsWith('auth0'),\n\t\t\taccessToken\n\t\t}\n\t})\n\nconst unauthenticated = (): AuthStateChanged =>\n\t({\n\t\ttype: 'AUTH_STATE_CHANGED',\n\t\tpayload: null\n\t})\n\nconst checkEmailVerified = (authUserProfile: Auth0UserProfile) => {\n\tif (!authUserProfile.email_verified) {\n\t\thistory.replace(\"/auth/signin\", { message: \"Your email address has not been verified. Please click the link in your email before signing in.\" })\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nexport const initialise = () =>\n\t(dispatch: ThunkDispatch<{}, {}, AuthStateChanged>) => {\n\t\twebAuth0.parseHash((err, hashResult) => {\n\t\t\tif (err) console.error(err)\n\t\t\tif (hashResult && hashResult.accessToken && checkEmailVerified(hashResult.idTokenPayload)) {\n\t\t\t\tdispatch(authenticated(hashResult.accessToken, hashResult.idTokenPayload))\n\t\t\t\thistory.replace(hashResult.state && hashResult.state.startsWith('/') ?\n\t\t\t\t\thashResult.state : '/')\n\t\t\t}\n\t\t\telse {\n\t\t\t\twebAuth0.checkSession({}, (err, sessionResult) => {\n\t\t\t\t\tif (err) console.error(err)\n\t\t\t\t\tif (sessionResult && checkEmailVerified(sessionResult.idTokenPayload)) {\n\t\t\t\t\t\tdispatch(authenticated(sessionResult.accessToken, sessionResult.idTokenPayload))\n\t\t\t\t\t}\n\t\t\t\t\telse dispatch(unauthenticated())\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n\nexport const reducer: Reducer =\n\t(state: AuthState | undefined, action: AnyAction): AuthState => {\n\t\tstate = state || {\n\t\t\tidentity: null,\n\t\t\tuserKey: null,\n\t\t\tisLoggedIn: undefined\n\t\t}\n\n\t\tswitch (action.type) {\n\t\t\tcase 'AUTH_STATE_CHANGED':\n\t\t\t\tconst account = action.payload as AuthUserProfile | null\n\n\t\t\t\treturn {\n\t\t\t\t\t...state,\n\t\t\t\t\tidentity: account,\n\t\t\t\t\tuserKey: account && account.email,\n\t\t\t\t\t// TODO: Currently, Github tokens report emailVerified=false - not sure if we can trust that Github email\n\t\t\t\t\t// addresses are verified or not.\n\t\t\t\t\tisLoggedIn: !!account && account.emailVerified\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn state\n\t\t}\n\t}\n","import superagent from 'superagent'\nimport store from './store'\n\nconst url = (parts: TemplateStringsArray, ...args: any[]) =>\n parts.map((p, i) => p + encodeURIComponent(args[i] || '')).join('')\n\nconst auth = () => {\n const { identity } = store.getState().auth\n if (identity == null) throw new Error(\"User not logged in\")\n\n return { Authorization: `Bearer ${identity.accessToken}` }\n}\n\nexport type LicenseInfo = {\n aether?: boolean,\n muxer?: boolean,\n platform?: boolean\n}\n\nexport const postCompany = async (companyRequest:\n {\n name: string,\n contact: { email: string }\n licenses: LicenseInfo\n }) => {\n return superagent.post(\"/api/companies\")\n .set(auth())\n .send(companyRequest)\n}\n\nexport type User = {\n name: string,\n email: string,\n roles: { admin: boolean }\n}\n\nexport type Cluster = {\n key: string,\n name: string,\n creationDate: Date,\n aetherEngineVersion: string,\n state: \"Ready\" | \"Provisioning\" | \"Configuring\" | \"ConfiguringFailed\" | \"ProvisioningFailed\",\n logs: string,\n cloudProvider: \"aws\" | \"azure\"\n}\n\nexport type ClusterDetail = Cluster & {\n users: { key: string }[]\n}\n\nexport type CloudProvider = {\n id: \"aws\" | \"azure\",\n logo: string,\n logoSmall: string,\n shortDisplayName: string,\n displayName: string,\n homepage: string\n}\n\nexport type Company = {\n key: string,\n name: string,\n licenses: LicenseInfo,\n clusters: Cluster[],\n users: User[],\n subscription: { endDate: string } | null\n}\n\nexport type CompanySummary = {\n key: string\n name: string\n}\n\nexport type PersonalAccountSummary = {\n key: string\n username: string\n created: Date\n}\n\nexport type PlatformClusterSummary = {\n key: string\n name: string\n user: string | null\n companyKey: string | null\n status: \"Created\" | \"Ready\" | \"Provisioning\" | \"Failed\"\n created: Date\n sdkVersion: string\n cloudProvider: \"aws\" | \"azure\"\n}\n\nexport const postUser = async (companyKey: string, email: string) => {\n return superagent.post(url`/api/companies/${companyKey}/members`)\n .set(auth())\n .send({ email })\n}\n\nexport const deleteUser = async (companyKey: string, key: string) => {\n return superagent.delete(url`/api/companies/${companyKey}/members?email=${key}`)\n .set(auth())\n}\n\nexport const updateUser = async (companyKey: string, key: string, patch: { roles?: User[\"roles\"] }) => {\n return superagent.patch(url`/api/companies/${companyKey}/members?email=${key}`)\n .set(auth())\n .send(patch)\n}\n\nexport const listPersonalAccounts = async (): Promise => {\n return superagent.get(\"/api/personal-accounts\")\n .set(auth())\n .then(r => r.body)\n}\n\nexport const postPersonalAccount = async (personalAccountRequest:\n {\n username: string\n }) => {\n return superagent.post(\"/api/personal-accounts\")\n .set(auth())\n .send(personalAccountRequest)\n}\n\nexport const deletePersonalAccount = async (key: string) => {\n return superagent.delete(url`/api/personal-accounts/${key}`)\n .set(auth())\n}\n\nexport const fetchCompany = async (key: string): Promise => {\n return superagent.get(url`/api/companies/${key}`)\n .set(auth())\n .then(r => r.body)\n}\n\nexport const updateCompany = async (key: string, patch: Partial): Promise => {\n return superagent.patch(url`/api/companies/${key}`)\n .set(auth())\n .send(patch)\n .then(r => r.body)\n}\n\nexport const listCompanies = async (): Promise => {\n return superagent.get('/api/companies')\n .set(auth())\n .then(r => r.body)\n}\n\nexport const fetchCluster = async (key: string): Promise => {\n return superagent.get(url`/api/clusters/${key}`)\n .set(auth())\n .then(r => r.body)\n}\n\nexport const postCluster = async (companyKey: string, name: string, aetherEngineVersion: string, bundle: Blob) => {\n return superagent.post(url`/api/companies/${companyKey}/clusters/bundles`)\n .set(auth())\n .field({ name, aetherEngineVersion })\n .attach('bundle', bundle)\n}\n\nexport const patchCluster = async (key: string, patch: Partial) => {\n return superagent.patch(url`/api/clusters/${key}`)\n .set(auth())\n .send(patch)\n}\n\nexport const listCompanyPlatformClusters = async (companyKey: string): Promise => {\n return superagent.get(url`/api/companies/${companyKey}/platform-clusters`)\n .set(auth())\n .then(r => r.body)\n}\n\nexport type UserRoles = {\n isSupportUser: boolean,\n personalAccount: boolean,\n companies: {\n [key: string]: { admin: boolean }\n }\n}\nexport const fetchCurrentUser = async (): Promise => {\n return superagent\n .get(url`/api/users/current`)\n .set(auth())\n .then((r: superagent.Response) => r.body)\n}\n\nexport type Log = {\n entries: {\n timestamp: string,\n details: {\n actor: string,\n summary: string\n }\n }[]\n}\nexport const fetchLog = async (companyKey: string): Promise => {\n return superagent\n .get(url`/api/companies/${companyKey}/log`)\n .set(auth())\n .then((r: superagent.Response) => r.body)\n}\n\nexport const getAetherSdkDownloadUrl = async () => {\n return superagent\n .get(\"/api/downloads/sdk\")\n .set(auth())\n .then((r: superagent.Response) => r.text)\n}\n\nexport const getPlatformSdkDownloadUrl = async () => {\n return superagent\n .get(\"/api/downloads/platform-sdk\")\n .set(auth())\n .then((r: superagent.Response) => r.text)\n}\n\nexport const getStagedPlatformSdkDownloadUrl = async (container: string, version: string, filename: string) => {\n return superagent\n .get(`/api/downloads/staged-sdk/?container=${container}&version=${version}&filename=${filename}`)\n .set(auth())\n .then((r: superagent.Response) => r.text)\n}\n\nexport const getTerraformScriptDownloadUrl = async (cloudProvider: string) => {\n return superagent\n .get(`/api/downloads/provision-cluster-bundle/?cloud=${cloudProvider}`)\n .set(auth())\n .then((r: superagent.Response) => r.text)\n}\n\nexport type MetricResult = {\n total: number,\n data: { time: string, value: number }[]\n}\n\nexport const fetchBandwidthMetrics = async (companyKey: string, clusterKey: string): Promise => {\n return superagent\n .get(`api/companies/${companyKey}/metrics/bandwidth?clusterKey=${clusterKey}`)\n .set(auth())\n .then((r: superagent.Response) => r.body)\n}\n\ntype Versions = {\n version: string,\n isBeta: boolean\n}\n\ntype ClusterVersions = {\n versions: Array\n}\n\nexport const getClusterVersions = async (): Promise => {\n return superagent\n .get(`api/downloads/aether-engine/versions`)\n .set(auth())\n .then((r: superagent.Response) => r.body)\n}\n\ntype PlatformSdkVersions = {\n versions: Array,\n container: string,\n filename: string\n}\n\nexport const getSdkVersions = async (manifest: string): Promise => {\n return superagent\n .get(`api/downloads/platform-sdk/versions?manifest=${manifest}`)\n .set(auth())\n .then((r: superagent.Response) => r.body)\n}\n\nexport const getSdkVersionsDescending = async (manifest: string): Promise =>\n getSdkVersions(manifest).then((r:PlatformSdkVersions) => {\n r.versions.reverse();\n return r;\n })\n","import { Action, Reducer } from 'redux'\nimport { fetchCurrentUser, UserRoles } from '../api'\nimport { ThunkDispatch } from 'redux-thunk'\nimport { CompanyChangedAction } from './companyProfile'\nimport { ApplicationState } from '.'\nimport { NetworkState } from './types'\n\ntype Computed = {\n\tnetworkState: NetworkState,\n\tcompanyKey: string | undefined,\n\tadmin: boolean\n}\nexport type UserState = UserRoles & Computed\n\nexport interface UserFetchingAction { type: 'USER_FETCHING' }\nexport interface UserReceivedAction { type: 'USER_RECEIVED', payload: UserRoles }\ntype AnyAction = UserFetchingAction | UserReceivedAction | CompanyChangedAction\n\nexport const fetchUser = () =>\n\t(dispatch: ThunkDispatch<{}, {}, Action>, getState: () => ApplicationState) => {\n\t\tvar state = getState()\n\t\tif (!state.user || state.user.networkState !== \"complete\") {\n\t\t\tif (state.auth && state.auth.isLoggedIn) {\n\t\t\t\tdispatch({ type: 'USER_FETCHING' })\n\t\t\t\tfetchCurrentUser()\n\t\t\t\t\t.then((user: UserRoles) => dispatch({ type: 'USER_RECEIVED', payload: user }))\n\t\t\t}\n\t\t}\n\t}\n\nexport const reducer: Reducer =\n\t(state: UserState | undefined, action: Action): UserState => {\n\t\tconst a = action as AnyAction\n\t\tstate = state || {\n\t\t\tnetworkState: \"wait\",\n\t\t\tisSupportUser: false,\n\t\t\tpersonalAccount: false,\n\t\t\tcompanies: {},\n\t\t\tcompanyKey: undefined,\n\t\t\tadmin: false\n\t\t}\n\n\t\tswitch (a.type) {\n\t\t\tcase 'USER_FETCHING':\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tnetworkState: \"wait\"\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMPANY_CHANGED':\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tcompanyKey: a.payload\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'USER_RECEIVED':\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\t...a.payload,\n\t\t\t\t\tnetworkState: \"complete\"\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\tstate = {\n\t\t\t...state,\n\t\t\tadmin: state.isSupportUser ||\n\t\t\t\t(!!state.companyKey\n\t\t\t\t\t&& state.companies[state.companyKey]\n\t\t\t\t\t&& state.companies[state.companyKey].admin)\n\t\t}\n\n\t\treturn state\n\t}\n","import * as Auth from './Auth'\nimport * as User from './user'\nimport * as CompanyProfile from './companyProfile'\nimport configureStore from './configureStore'\nimport history from '../history'\n\n// The top-level state object\nexport interface ApplicationState {\n auth: Auth.AuthState | undefined,\n user: User.UserState | undefined,\n companyProfile: CompanyProfile.State | undefined\n}\n\n// Whenever an action is dispatched, Redux will update each top-level application state property using\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\n// acts on the corresponding ApplicationState property type.\nexport const reducers = {\n auth: Auth.reducer,\n user: User.reducer,\n companyProfile: CompanyProfile.reducer\n}\n\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\n// correctly typed to match your store.\nexport interface AppThunkAction {\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void\n}\n\n// Get the application-wide store instance, prepopulating with state from the server where available.\nexport default configureStore(history)","import { Action, Reducer } from 'redux'\nimport * as api from '../api'\nimport { ThunkDispatch } from 'redux-thunk'\nimport { ApplicationState } from './index'\nimport { NetworkState } from './types'\n\nexport type State = {\n companyKey: string | null,\n networkState: NetworkState,\n company: api.Company | null\n}\n\nexport interface CompanyChangedAction { type: 'COMPANY_CHANGED', payload: string }\nexport interface CompanyReceivedAction { type: 'COMPANY_RECEIVED', payload: api.Company }\nexport interface CompanyLoadError { type: 'COMPANY_LOAD_ERROR' }\nexport interface CompanyInvalidated { type: 'COMPANY_INVALIDATED' }\nexport interface UserRemoved { type: 'USER_REMOVED', payload: api.User }\nexport interface UserUpdated { type: 'USER_UPDATED', payload: api.User }\nexport interface ClustersChange { type: 'USER_UPDATED', payload: api.User }\ntype AnyAction = CompanyChangedAction | CompanyReceivedAction | CompanyLoadError | CompanyInvalidated | UserRemoved | UserUpdated\n\nexport const companyChanged = (key: string) =>\n (dispatch: ThunkDispatch<{}, {}, Action>, getState: () => ApplicationState) => {\n const { companyProfile } = getState()\n if (companyProfile && companyProfile.companyKey !== key) {\n dispatch({ type: 'COMPANY_CHANGED', payload: key })\n api.fetchCompany(key)\n .then((result: api.Company) => dispatch({ type: 'COMPANY_RECEIVED', payload: result }))\n .catch(() => dispatch({ type: \"COMPANY_LOAD_ERROR\" }))\n }\n }\n\nexport const invalidateCompany = () => ({ type: 'COMPANY_INVALIDATED' })\n\nexport const removeUser = (user: api.User) =>\n (dispatch: ThunkDispatch<{}, {}, Action>, getState: () => ApplicationState) => {\n const key = (getState().companyProfile || { companyKey: null }).companyKey\n key && api.deleteUser(key, user.email)\n .then(() => dispatch({ type: 'USER_REMOVED', payload: user }))\n }\n\nexport const updateUser = (user: api.User) =>\n (dispatch: ThunkDispatch<{}, {}, Action>, getState: () => ApplicationState) => {\n const key = (getState().companyProfile || { companyKey: null }).companyKey\n key && api.updateUser(key, user.email, user)\n .then(() => dispatch({ type: 'USER_UPDATED', payload: user }))\n }\n\nexport const reducer: Reducer =\n (state: State | undefined, action: Action): State => {\n const a = action as AnyAction\n state = state || { companyKey: null, company: null, networkState: 'wait' }\n switch (a.type) {\n case 'COMPANY_CHANGED':\n return { ...state, networkState: 'wait', companyKey: a.payload, company: null }\n case 'COMPANY_INVALIDATED':\n return { ...state, networkState: 'wait', companyKey: null, company: null }\n case 'COMPANY_RECEIVED':\n return { ...state, networkState: 'complete', company: a.payload }\n case 'COMPANY_LOAD_ERROR':\n return { ...state, networkState: 'error' }\n case 'USER_REMOVED':\n return state.company ?\n { ...state, company: { ...state.company, users: state.company.users.filter(u => u !== a.payload) } }\n : state\n case 'USER_UPDATED':\n const updated = a.payload\n return state.company ?\n {\n ...state, company: {\n ...state.company,\n users: state.company.users.map(u => u.email === updated.email ? updated : u)\n }\n }\n : state\n default:\n return state\n }\n }\n","import { applyMiddleware, combineReducers, compose, createStore } from 'redux'\nimport thunk from 'redux-thunk'\nimport { connectRouter, routerMiddleware } from 'connected-react-router'\nimport { History } from 'history'\nimport { ApplicationState, reducers } from './'\n\nexport default function configureStore(history: History, initialState?: ApplicationState) {\n const middleware = [\n thunk,\n routerMiddleware(history)\n ]\n\n const rootReducer = combineReducers({\n ...reducers,\n router: connectRouter(history)\n })\n\n const enhancers = []\n const windowIfDefined = typeof window === 'undefined' ? null : window as any\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__())\n }\n\n return createStore(\n rootReducer,\n initialState,\n compose(applyMiddleware(...middleware), ...enhancers)\n )\n}\n","import { ApplicationState } from '../../store'\nimport { connect } from 'react-redux'\nimport { AuthState } from '../../store/Auth'\nimport React from 'react'\nimport history from '../../history'\n\nconst MustBeLoggedIn: React.FunctionComponent<{ auth: AuthState | undefined, children: JSX.Element }> =\n\t({ auth, children }) => {\n\t\tReact.useEffect(() => {\n\t\t\tif (auth && auth.isLoggedIn === false) history.push('/auth/signin', {redirectPath: history.location.pathname})\n\t\t})\n\n\t\treturn \n\t\t\t{auth && auth.isLoggedIn && children}\n\t\t\n\t}\n\nexport default connect((state: ApplicationState) => ({ auth: state.auth }))(MustBeLoggedIn)","import * as React from 'react'\nimport { connect } from 'react-redux'\nimport { fetchUser, UserState } from '../../store/user'\nimport { ApplicationState } from '../../store'\nimport { ReactComponentLike } from 'prop-types'\n\nexport default function requireUser(Component: ReactComponentLike) {\n const RequireUser = (props: { fetchUser: () => void, identity: any }) => {\n React.useEffect(props.fetchUser, [props.identity])\n return \n }\n\n return connect(\n ({ user, auth }: ApplicationState) => ({ user, identity: auth && auth.identity }),\n { fetchUser }\n )(RequireUser)\n}\n\nconst RequireAdminInner: React.FunctionComponent<{ user: UserState }> =\n ({ user, children }) => (user && user.admin) ? <>{children} : null\n\nexport const RequireAdmin = requireUser(RequireAdminInner)\n\nconst RequireSupportInner: React.FunctionComponent<{ user: UserState }> =\n ({ user, children }) => (user && user.isSupportUser) ? <>{children} : null\n\nexport const RequireSupport = requireUser(RequireSupportInner)","import * as React from 'react'\nimport logo from '../../theme/logo-animation.svg'\nimport styled from 'styled-components'\n\nconst Logo = styled.img`\n width: 58px;\n height: 58px;\n margin:6em 0;\n`\nexport default () => ","import * as React from 'react'\nimport { Alert } from 'reactstrap'\nimport Spinner from './theme/Spinner'\n\n\nexport type NetworkState = \"wait\" | \"error\" | \"complete\"\ntype LoadingStateProps = { state: NetworkState, children: any }\nexport const LoadingState = ({ state, children }: LoadingStateProps) => {\n if (state === 'wait')\n return
\n else if (state === 'error')\n return There was a problem retrieving this information\n else\n return {children}\n}\n\nexport const useLoadingState = (\n loadFunction: (...args: Args) => Promise,\n ...args: any\n) => {\n const [state, setState] = React.useState(\"wait\")\n const [result, setResult] = React.useState(null)\n const reload = () => {\n setState(\"wait\")\n loadFunction(...args)\n .then((result: T) => {\n setResult(result)\n setState(\"complete\")\n })\n .catch(() => setState(\"error\"))\n }\n React.useEffect(reload, args)\n return { state, result, reload }\n}","import React from 'react'\nimport styled from 'styled-components'\n\nconst FormSectionInner = styled.div`\n width: 480px;\n h1 {\n font-size:2rem;\n text-align:center;\n margin:0 0 2rem 0;\n }\n button[type=submit]{\n width:100%;\n }\n &.border { \n border:1px solid #e0e0e0;\n padding:3em;\n }\n`\n\nconst Constraint = styled.div`\n display:flex;\n justify-content:center;\n`\n\nexport const FormSection = ({ children, ...props }) =>\n \n {children}\n \n\nexport const FormSectionBorder = ({ children, ...props }) =>\n \n {children}\n \n\nconst WideSectionInner = styled.div`\n width: 800px;\n`\n\nexport const WideSection = ({ children, ...props }) =>\n \n {children}\n \n\nconst SectionDivider = styled.div`\n &:not(:last-child) {\n border-bottom: 1px solid #ccc;\n }\n`\n\nexport const FullWidthSection = ({ children, ...props }) => \n
{children}
\n
\n\nconst H1 = styled.h1`\n font-weight:600;\n font-size:1.25rem;\n margin:20px 0;\n`\nconst RightAlign = styled.div`\n margin-left:auto;\n`\nconst Row = styled.div`\n display:flex;\n flex-direction:row;\n align-items: center;\n`\nexport const PageHeading = ({ children, extras = null, ...props }) => \n \n

{children}

\n {extras && {extras}}\n
\n
\n\nexport const SubFullWidthSection = ({ children, ...props }) =>
\n
{children}
\n
\n\nexport const SectionHeading = ({ children, extras = null, ...props }) => \n \n

{children}

\n {extras && {extras}}\n
\n
","import styled from 'styled-components'\n\nexport default styled.table`\n width:100%;\n thead { \n background-color:#FAFAFA;\n border: 1px solid #F0EEEE;\n }\n th { \n letter-spacing:1px;\n text-transform: uppercase;\n color: #909090;\n font-size: 0.8rem;\n font-weight: 400;\n }\n th,td { \n padding: 8px 16px;\n }\n tbody tr {\n border-bottom: 1px solid #EAEAEA;\n }\n\n col {\n width:50%;\n }\n col.min {\n width:0;\n }\n`","import React from 'react'\nimport { PageHeading, WideSection } from '../theme/PageSection'\nimport { Link } from 'react-router-dom'\nimport * as api from '../../api'\nimport Table from '../theme/Table'\nimport { LoadingState, useLoadingState } from '../LoadingState'\n\nconst Create = Create New\n\nconst CompanyTable = () => {\n const { state, result: companies } = useLoadingState(api.listCompanies)\n return \n \n \n \n \n \n \n \n \n {companies && companies.map(c => \n \n \n )}\n \n
Name
{c.name}
\n
\n}\nexport default () => \n Companies\n \n \n \n\n","import * as React from 'react'\nimport { NavItem, NavLink, UncontrolledDropdown, DropdownMenu, DropdownItem, DropdownToggle } from 'reactstrap'\nimport { connect, DispatchProp } from 'react-redux'\nimport { ApplicationState } from '../../store'\nimport styled from 'styled-components'\nimport { AuthState } from '../../store/Auth'\nimport webAuth0 from './auth0Config'\nimport { AuthUserProfile } from '../../store/Auth'\n\nconst Circle = styled(DropdownToggle)`\n\twidth:2em;\n\theight:2em;\n\tborder-radius:100%;\n\tborder:none;\n\tpadding:0;\n\tspan {\n\t\tmargin:auto;\n\t}\n`\n\nconst Authenticated = (props: {\n\tidentity: AuthUserProfile\n}) => {\n\tconst logout = () => webAuth0.logout({ returnTo: window.location.origin })\n\tconst initials = props.identity.displayName ?\n\t\tprops.identity.displayName.split(' ').slice(0,2).map(x => x[0]) : \n\t\t\"\"\n\n\treturn \n\t\t{initials}\n\t\t\n\t\t\t{ !props.identity.isSso &&\n\t\t\t\tYour profile }\n\t\t\tLog out\n\t\t\n\t\n}\n\nconst Unauthenticated = () =>\n\t\n\t\tSign in\n\t\n\nconst Login = (props: AuthState & DispatchProp) => {\n\tif (props.isLoggedIn === true) return \n\telse if (props.isLoggedIn === false) return \n\telse return null\n}\n\nexport default connect(\n\t(state: ApplicationState) => state.auth\n)(Login)\n","export default {\n brandDark: '#FF5C37',\n brandMid: '#f3a712',\n brandLight: \"#FF9448\",\n border: '#cacaca',\n textDark: '#27203B',\n textMid: '#61616a',\n textLight: '#848484',\n Indigo: '#27203B',\n Indigo80: '#27203B80',\n Indigo60: '#27203B60',\n Indigo40: '#27203B40',\n Indigo20: '#27203B20',\n Coral: '#FF5C37',\n Coral80: '#FF5C3780',\n Coral60: '#FF5C3760',\n Coral40: '#FF5C3740',\n Coral20: '#FF5C3720',\n Orange: '#FF9448',\n Orange80: '#FF944880',\n Orange60: '#FF944860',\n Orange40: '#FF944840',\n Orange20: '#FF944820',\n Copper: '#D66445',\n Copper80: '#D6644580',\n Copper60: '#D6644560',\n Copper40: '#D6644540',\n Copper20: '#D6644520',\n Stone: '#F6F4F2',\n White: '#FFFFFF',\n Black: '#000000'\n}","import * as React from 'react'\nimport * as ReactStrap from 'reactstrap'\nimport { NavLink as RouterLink } from 'react-router-dom'\nimport styled from 'styled-components'\nimport colours from './colours'\n\nconst navbarHeight = `58px`\n\nexport const Navbar = (props:any) => {\n const Styled = styled(ReactStrap.Navbar)`\n padding:0;\n height:${navbarHeight};\n `\n return \n}\n\nconst navStyling = `\n height:${navbarHeight};\n margin: 0 8px;\n display:flex;\n font-weight: 600;\n align-items:center;\n border-bottom:2px solid transparent;\n color:${colours.Indigo};\n &:hover {\n text-decoration: none;\n color:${colours.Black};\n }\n &.active {\n border-bottom:2px solid ${colours.Coral};\n color:${colours.Coral};\n }`\n\nexport const NavLink = (props: any) => {\n const Styled = styled(RouterLink)`${navStyling}`\n return \n}\n\nexport const NavAnchor = (props: any) => {\n const Styled = styled.a`${navStyling}`\n return \n}","import * as React from 'react'\nimport { Collapse, Container, NavbarBrand, NavbarToggler, NavItem } from 'reactstrap'\nimport LoginStatus from './auth/NavbarLogin'\nimport logo from '../theme/logo-dark.svg'\nimport requireUser from './auth/RequireUser'\nimport styled from 'styled-components'\nimport { Navbar, NavLink, NavAnchor } from './theme/Nav'\nimport colours from './theme/colours'\nimport { UserState } from '../store/user'\n\nconst BrandStyle = styled(NavbarBrand)`\n img { height:1.2em; }\n padding:0 16px 0 8px;\n border-right:1px solid ${colours.Stone};\n`\nconst Brand = (props:any) => \"Hadean\"/\n\nconst Right = styled.div`\n margin-left:auto;\n display: inline-flex;\n`\n\nconst NavItemList = styled.ul`\n flex:1;\n align-items: center;\n`\n\n\nclass NavMenu extends React.PureComponent<{user: UserState}, { isOpen: boolean }> {\n public state = {\n isOpen: false\n }\n\n public render() {\n\n const isSupportUser = this.props.user && this.props.user.isSupportUser\n\n return (\n\t\t\t
\n \n \n \n \n \n \n {\n isSupportUser\n && (\n Manage Personal Accounts\n )\n }\n {\n isSupportUser\n && (\n Companies\n ) \n }\n Documentation\n \n \n \n \n \n \n \n
\n )\n }\n\n private toggle = () => {\n this.setState({\n isOpen: !this.state.isOpen\n })\n }\n}\n\nexport default requireUser(NavMenu)","import * as React from 'react'\nimport NavMenu from './NavMenu'\n\nexport default (props: { children?: React.ReactNode }) => (\n \n \n {props.children}\n \n)\n","import * as React from 'react'\nimport { Redirect } from 'react-router'\nimport Alert from 'reactstrap/lib/Alert'\nimport MustBeLoggedIn from './auth/MustBeLoggedIn'\nimport requireUser from './auth/RequireUser'\nimport { UserState } from '../store/user'\nimport { LoadingState } from './LoadingState'\nimport CompanyList from './support/CompanyList'\nimport Layout from './Layout'\n\nconst Home = ({ user }: { user: UserState }) => {\n const companyKeys = Object.keys(user.companies);\n let content = null;\n\n if (user.isSupportUser) {\n content = \n }\n else if (companyKeys.length) {\n content = \n }\n else if (user.personalAccount) {\n content = \n }\n else {\n content = \n You don't have access to a company profile. Ask your company's administrator to invite you or sign in with a different account.\n ;\n }\n\n return \n \n \n {content}\n \n \n \n}\n\nexport default requireUser(Home)\n","import React from \"react\";\nimport { Form as StrapForm, UncontrolledAlert } from \"reactstrap\";\nimport { Redirect } from \"react-router-dom\";\nimport { LocationDescriptor } from \"history\";\n\ntype NetworkState = null | \"complete\" | \"error\" | \"wait\"\n\ntype Props = {\n onSubmit: () => Promise,\n onError?: (error:any) => boolean,\n successMessage?: string,\n redirect?: LocationDescriptor,\n children: any\n}\n\nexport default (props: Props) => {\n const [network, setNetwork] = React.useState(null)\n const [errorHandled, setErrorHandled] = React.useState(false)\n\n const submit = (e: React.FormEvent) => {\n e.preventDefault()\n if (network !== \"wait\") {\n setNetwork(\"wait\")\n props.onSubmit()\n .then(() => setNetwork(\"complete\"))\n .catch((error:any) => {\n setNetwork(\"error\")\n if (props.onError) setErrorHandled(props.onError(error))\n })\n }\n }\n\n const { children, successMessage, redirect } = props\n return \n {network === \"complete\" && \n {successMessage && {successMessage}}\n {redirect && }\n }\n\n {children}\n\n {network === \"error\" && !errorHandled && There was an error. Please try later.}\n \n} ","import React from 'react'\nimport { Button, FormGroup, Label, Input } from 'reactstrap'\nimport { FormSection, PageHeading } from '../theme/PageSection'\nimport { postUser } from '../../api'\nimport { RouteComponentProps } from 'react-router-dom'\nimport Form from '../Form'\n\ntype State = {\n email: string\n}\n\ntype Props = RouteComponentProps<{ companyKey: string }>\n\nexport default class Invite extends React.Component {\n constructor(props: Props) {\n super(props)\n this.state = {\n email: ''\n }\n }\n submit() {\n const { companyKey } = this.props.match.params\n const { email } = this.state\n return postUser(companyKey, email)\n }\n render() {\n const { email } = this.state\n\n return \n Invite to team\n \n
\n\n \n \n ) => this.setState({ email: e.currentTarget.value })} />\n \n\n \n \n
\n\n
\n
\n }\n}","import * as React from 'react'\nimport { companyChanged } from '../../store/companyProfile'\nimport { ReactComponentLike } from 'prop-types'\nimport { ApplicationState } from '../../store'\nimport { State as CompanyState } from '../../store/companyProfile'\nimport { connect, DispatchProp } from 'react-redux'\nimport { RouteComponentProps } from 'react-router'\nimport { Company } from '../../api'\nimport { LoadingState } from '../LoadingState'\n\ntype LoaderProps = CompanyState & DispatchProp\nexport type CompanyLoaderProps = {\n company: Company,\n companyKey: string\n} & DispatchProp\n\nexport const withCompanyLoader = (Inner: ReactComponentLike) => {\n class Loader extends React.Component{\n render() {\n const { companyKey, networkState, company, dispatch, ...rest } = this.props\n return \n \n \n }\n }\n\n return connect((state: ApplicationState) => state.companyProfile)(Loader)\n}\n\nexport const withCompanyFromRoute = (Inner: ReactComponentLike) =>\n connect()(\n (props: RouteComponentProps<{ companyKey: string }> & DispatchProp) => {\n const WrappedInner = withCompanyLoader(Inner)\n React.useEffect(() => { props.dispatch(companyChanged(props.match.params.companyKey)) }, [props])\n return \n })","import React from 'react'\nimport * as api from '../../api'\nimport Table from '../theme/Table'\nimport { LoadingState, useLoadingState } from '../LoadingState'\nimport { SectionHeading, SubFullWidthSection } from '../theme/PageSection'\n\ntype LogProps = { companyKey: string }\n\nconst formatter = new Intl.DateTimeFormat(window.navigator.languages[0], {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: false\n})\n\nconst LogTable = (props: LogProps) => {\n const { state, result: log } = useLoadingState(api.fetchLog, props.companyKey)\n return \n \n \n \n \n \n \n \n \n \n \n {log && log.entries.map(entry => {\n const date = new Date(entry.timestamp)\n return \n \n \n \n \n })}\n \n
DateUserSummary
{formatter.format(date)}{entry.details.actor}{entry.details.summary}
\n
\n}\n\nexport default (props: any) => <>\n Logs\n \n \n \n","import React from 'react'\nimport colours from '../theme/colours'\nimport styled from 'styled-components'\n\nconst MetricHeader = styled.h6`\n color: ${colours.Indigo80};\n font-size: 13px;\n font-weight: 400;\n text-transform: uppercase;\n margin-top: 6px;\n margin-bottom: 3px;\n`\nconst MetricBody = styled.p`\n color: black;\n font-size: 36px;\n line-height: 36px;\n`\n\nconst RightAlign = styled.div`\n text-align: right;\n`\n\nexport default ({ title, metric }: { title: string, metric: string }) => {\n return \n {title}\n {metric}\n \n}","import React from 'react'\nimport colours from '../theme/colours'\nimport { ResponsiveBar, BarExtendedDatum } from '@nivo/bar'\nimport * as api from '../../api'\n\ntype Data = api.MetricResult[\"data\"]\nexport default ({ data }: { data: Data }) => {\n const dataFormat = data.map(({ value, time }) => ({\n value,\n timeFormat: new Date(time).toLocaleTimeString([], { hour12: false, hour: '2-digit', minute: '2-digit' })\n }))\n\n const tooltip = ({ data }: BarExtendedDatum) =>
\n {((data[\"value\"] as number) / 1024)\n .toLocaleString([], { maximumFractionDigits: 1, useGrouping: true })}kB\n
\n\n return
\n \n
\n}","import styled from 'styled-components';\nimport colours from './colours';\n\n\nexport default styled.div`\n display:inline-block;\n position:relative;\n font-weight: 600;\n font-size: .8rem;\n margin:0;\n text-transform: uppercase;\n color:white;\n padding:0 .6em;\n z-index: 2;\n :after {\n content:'';\n background: ${colours.Orange};\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n position:absolute;\n z-index: -1;\n }\n &.danger:after {\n background: var(--danger);\n }\n &.success:after {\n background: var(--success);\n }\n`","import styled from 'styled-components'\n\ninterface IActivatableButton { active: boolean }\n\nexport default styled.button`\n padding: 10px 30px;\n cursor: pointer;\n opacity: 0.4;\n border: 0;\n background: white;\n\n &:focus {\n outline: 0;\n }\n\n &:hover {\n background: #e0e0e0;\n }\n\n ${({ active }) =>\n active &&\n `\n border: 0;\n background: #f0f0f0;\n opacity: 1;\n `}\n`\n","import React from 'react'\nimport { UncontrolledDropdown, DropdownToggle, DropdownMenu } from 'reactstrap'\nimport styled from 'styled-components'\n\nconst DropdownToggleStyle = styled(DropdownToggle)`\n width: 1.5rem;\n height: 1.5rem;\n padding: 0;\n background-color:#f4f4f4;\n`\n\nexport default ({className, children}:any) =>\n \n â‹®\n \n {children}\n \n ","import React from 'react'\nimport { RequireAdmin } from '../auth/RequireUser'\nimport ContextMenu from '../theme/ContextMenu'\nimport * as api from '../../api'\nimport { DropdownItem } from 'reactstrap'\nimport { Link } from 'react-router-dom'\n\ntype Props = { companyKey: string, cluster: api.Cluster }\n\nexport default ({ companyKey, cluster }:Props) => \n \n Manage access\n \n\n","import azureLogoSmall from '../theme/icons/azure-small.svg';\nimport azureLogo from '../theme/icons/azure.svg';\nimport awsLogoSmall from '../theme/icons/aws-small.svg';\nimport awsLogo from '../theme/icons/aws.svg';\nimport { CloudProvider } from '../api';\n\nexport type NetworkState = 'wait' | 'complete' | 'error'\n\nexport const CloudProviders: Array = [\n {\n id: \"azure\",\n logo: azureLogo,\n logoSmall: azureLogoSmall,\n shortDisplayName: \"Azure\",\n displayName: \"Microsoft Azure\",\n homepage: \"https://portal.azure.com\"\n },\n {\n id: \"aws\",\n logo: awsLogo,\n logoSmall: awsLogoSmall,\n shortDisplayName: \"AWS\",\n displayName: \"Amazon Web Services\",\n homepage: \"https://aws.amazon.com/console/\"\n },\n]\n\nexport const getCloudProvider = ( providerId: string | null = null ) => {\n if (!providerId) {\n return CloudProviders[0];\n }\n\n let found = CloudProviders.find(p => p.id == providerId.toLowerCase());\n\n if (!found) {\n throw `Unsupported cloud provider: ${providerId}`;\n }\n\n return found;\n}\n","import React, { useState } from 'react'\nimport DashboardMetric from '../dashboard/Metric'\nimport DashboardChart from '../dashboard/Chart'\nimport * as api from '../../api'\nimport { Card, CardBody, CardTitle, CardText } from 'reactstrap'\nimport { LoadingState, useLoadingState } from '../LoadingState'\nimport styled from 'styled-components'\nimport { CompanyLoaderProps } from './CompanyLoader'\nimport { SectionHeading, SubFullWidthSection } from '../theme/PageSection'\nimport { Link } from 'react-router-dom'\nimport { RequireAdmin } from '../auth/RequireUser'\nimport Badge from '../theme/Badge'\nimport Tab from '../theme/Tab'\nimport ClusterContextMenu from './ClusterContextMenu'\nimport { CloudProviders } from '../../store/types'\n\nconst ClusterCard = styled(Card)`\n border: 0;\n margin-bottom: 4px !important;\n background: #f0f0f0;\n`;\n\nconst GridBody = styled(CardBody)`\n display:grid;\n grid-auto-flow:row;\n grid-template-columns:3fr 2fr 1fr min-content;\n grid-column-gap:1em;\n`;\n\nconst LogsBadge = styled(Badge as any)`\n left: -1px;\n text-transform: none;\n &:after {\n background-color: white;\n }\n`;\n\nconst Key = styled.code`\n color: black;\n`;\n\nconst ProviderLogo = styled.img`\n width: 25px;\n height: 25px\n`\n\nconst ClusterTitle = styled.h6`\n color: black;\n`\n\n\nfunction formatBandwidthMetric(bandwidthMetric: number): string {\n return `${(((bandwidthMetric / 1024) / 1024) / 1024).toFixed(2)} GB`\n}\n\nfunction formatCreationDate(date: Date): string {\n var formatted = \"N/A\";\n if (date != null) {\n let creationDate = new Date(date);\n if (creationDate >= new Date(2000, 1, 1)) {\n formatted = creationDate.toLocaleDateString();\n }\n }\n return formatted;\n}\n\nfunction formatAetherEngineVersion(cluster: api.Cluster): string {\n var formatted = \"Unknown Version\";\n if (cluster.aetherEngineVersion != null) {\n formatted = `Aether SDK version: ${cluster.aetherEngineVersion}`\n }\n return formatted;\n}\n\nfunction formatPlatformSdkVersion(version: string): string {\n if (version != null) {\n return `SDK: ${version}`\n }\n return \"Unknown Version\";\n}\n\nconst Cluster = ({ cluster, companyKey }: { cluster: api.Cluster, companyKey: string }) => {\n const { state, result: bandwidthMetric } = useLoadingState(api.fetchBandwidthMetrics, companyKey, cluster.key)\n\n const provider = cluster.cloudProvider && CloudProviders.find(c => c.id.toLowerCase() === cluster.cloudProvider.toLowerCase())\n\n return \n \n
\n \n \n {cluster.name}\n \n {/* TODO: we should separate these for better UX notification - this requires changes to HDNE */}\n {[\"Ready\"].includes(cluster.state) &&
\n Ready\n
}\n {[\"Provisioning\", \"Configuring\"].includes(cluster.state) &&
\n Provisioning\n
}\n {[\"ProvisioningFailed\", \"ConfiguringFailed\"].includes(cluster.state) &&
\n Failed to provision\n {cluster.logs != null && Download provisioning logs }\n
}\n
\n Key: {cluster.key}\n
\n
\n Creation date: {formatCreationDate(cluster.creationDate)}\n {formatAetherEngineVersion(cluster)}\n
\n
\n {cluster.state === \"Ready\" &&\n \n {bandwidthMetric &&\n \n }\n }\n
\n\n
\n \n {provider &&\n \n \n \n }\n
\n\n {cluster.state === \"Ready\" && bandwidthMetric &&\n
\n \n
\n }\n
\n
\n}\n\nfunction companyClusters(company: api.Company) {\n return company.clusters.length ?\n company.clusters.map(cluster => )\n :

You don't have any Aether projects yet. Contact us to create one.

\n}\n\nconst Create = (companyKey: string) => \n Create project\n\n\nconst tabNames = [\"Aether Engine\", \"Hadean Platform\"];\n\nfunction TabGroup(props: CompanyLoaderProps) {\n const { state, result: platClustList } = useLoadingState(api.listCompanyPlatformClusters, props.companyKey)\n const [active, setActive] = useState(tabNames[0]);\n\n return (\n \n
\n {tabNames.map((name) => (\n setActive(name)}>\n {name}\n \n ))}\n
\n {active.includes('Aether') ? companyClusters(props.company) : platformClusters(platClustList)}\n
\n );\n}\n\nconst Page = (props: CompanyLoaderProps) => <>\n Projects\n \n
\n \n
\n
\n\n\nexport default Page\n\nconst PlatformClusterList = ({ platClust }: { platClust: api.PlatformClusterSummary }) => {\n const provider = platClust.cloudProvider && CloudProviders.find(c => c.id.toLowerCase() === platClust.cloudProvider.toLowerCase())\n\n return \n \n
\n \n \n {platClust.name}\n \n {[\"Ready\"].includes(platClust.status) &&
\n Ready\n
}\n {[\"Created\", \"Provisioning\"].includes(platClust.status) &&
\n {platClust.status}\n
}\n {[\"Failed\"].includes(platClust.status) &&
\n Failed to provision\n
}\n
\n
\n
\n
\n Created: {formatCreationDate(platClust.created)}\n {formatPlatformSdkVersion(platClust.sdkVersion)}\n
\n {provider &&\n \n \n \n }\n
\n
\n \n \n}\n\nfunction platformClusters(clusters: api.PlatformClusterSummary[] | null) {\n return clusters && clusters.length ?\n clusters.map(pcs => )\n :

You don't have any Platform clusters.

\n}\n","import React from 'react'\nimport { Modal, ModalBody, ModalFooter, Button } from \"reactstrap\"\n\ntype ConfirmationProps = {\n show: boolean,\n confirmText: string,\n onConfirm: () => void,\n onClose: () => void\n children: any\n}\n\nexport default (props: ConfirmationProps) => {\n const confirm = () => {\n props.onClose()\n props.onConfirm()\n }\n return \n {props.children}\n \n {' '}\n \n \n \n}\n","import React from 'react'\nimport * as api from '../../api'\nimport Table from '../theme/Table'\nimport { CompanyLoaderProps } from './CompanyLoader'\nimport { DropdownItem } from 'reactstrap'\nimport ContextMenu from '../theme/ContextMenu'\nimport { removeUser, updateUser } from '../../store/companyProfile'\nimport Confirmation from '../Confirmation'\nimport { connect, DispatchProp } from 'react-redux'\nimport { ApplicationState } from '../../store'\nimport Badge from '../theme/Badge'\nimport requireUser from '../auth/RequireUser'\nimport { SectionHeading, SubFullWidthSection } from '../theme/PageSection'\nimport { Link } from 'react-router-dom'\nimport { RequireAdmin } from '../auth/RequireUser'\n\n\ntype UserListProps = CompanyLoaderProps & { identity: string }\n\nconst UserContextMenu = connect(\n (state: ApplicationState) => ({\n currentUser: state.auth!.userKey,\n admin: !!state.user && state.user.admin\n })\n)(\n (props: { user: api.User, currentUser: string | null, admin: boolean } & DispatchProp) => {\n const [showConfirmation, setShowConfirmation] = React.useState(false)\n const { user, dispatch } = props\n const isCurrentUser = props.currentUser === user.email\n if (!props.admin || isCurrentUser) return null;\n\n const setAdmin = (isAdmin: boolean) =>\n dispatch(updateUser({ ...user, roles: { admin: isAdmin } }))\n\n return \n setShowConfirmation(false)}\n onConfirm={() => dispatch(removeUser(user))}>\n Are you sure you want to remove {user.name || \"this user\"}?\n \n\n \n setShowConfirmation(true)}>Remove\n\n {!user.roles.admin && setAdmin(true)}>Make admin}\n\n {user.roles.admin && setAdmin(false)}>Revoke admin role}\n \n \n })\n\nconst UserTable = ({ company }: UserListProps) => \n \n \n \n \n \n \n \n \n \n {company.users.map((user: api.User) => \n \n \n \n \n )}\n \n
NameEmail
\n {user.name || \"—\"}\n {\" \"}\n {user.roles && user.roles.admin && Admin}\n {user.email}
\n\nconst Invite = (companyKey: string) => \n Invite to company\n\n\nconst Page = (props: UserListProps) => <>\n Users\n \n \n \n\n\nexport default requireUser(Page)","import React from 'react'\nimport styled from 'styled-components'\nimport { SectionHeading, SubFullWidthSection } from '../theme/PageSection'\nimport { Company } from '../../api'\n\nexport const ProductNameAether = \"Aether\"\nexport const ProductNameMuxer = \"Muxer\"\nexport const ProductNamePlatform = \"Platform SDK\"\n\n// Styling for rendering list of product checkboxes.\nexport const ProductFlagPanel = styled.div`\n >* {\n margin-left: 32px;\n }\n`\n\nexport default ((company: Company) => {\n return <>\n Licensed Products\n \n {company.licenses.aether ?

{ProductNameAether}

: null}\n {company.licenses.muxer ?

{ProductNameMuxer}

: null}\n {company.licenses.platform ?

{ProductNamePlatform}

: null}\n {(!company.licenses.aether && !company.licenses.muxer && !company.licenses.platform) ?

None

: null}\n
\n \n})\n","import React from 'react'\nimport { SectionHeading, SubFullWidthSection } from '../theme/PageSection'\nimport { RequireAdmin } from '../auth/RequireUser'\nimport { CompanyLoaderProps } from './CompanyLoader'\n\nconst DateFormat = ({date}:{date:Date}) => \n <>{date.toLocaleDateString(window.navigator.language)}\n\nexport default (props: CompanyLoaderProps) => {\n const endDate = props.company.subscription &&\n new Date(props.company.subscription.endDate)\n return \n Subscription\n \n {endDate ? \n endDate > new Date() ?\n

Your product subscription ends on {' '}.

:\n

You do not have an active product subscription. Your subscription ended on \n {' '}.

:\n

You do not have an active product subscription.

\n }\n
\n
\n}","\nimport React from 'react'\nimport { PageHeading } from '../theme/PageSection'\nimport { CompanyLoaderProps, withCompanyLoader } from './CompanyLoader'\nimport { Link } from 'react-router-dom'\nimport { RequireAdmin } from '../auth/RequireUser'\nimport Log from './Log'\nimport ProjectList from './ProjectList'\nimport UserList from './UserList'\nimport License from './License'\nimport Subscription from './Subscription'\n\n\nexport default withCompanyLoader((props: CompanyLoaderProps) => {\n const Extras = <>\n {(props.company.licenses.aether || props.company.licenses.platform)\n ? 🡇 SDK Downloads\n : null }\n \n Edit company\n \n \n\n return \n {props.company.name}\n \n \n \n \n \n \n})\n","import React from 'react'\nimport { FormGroup, Label, Input, Button } from 'reactstrap'\nimport { FormSection, PageHeading } from '../theme/PageSection'\nimport Form from '../Form'\nimport { updateCompany, Company } from '../../api'\nimport { CompanyLoaderProps, withCompanyFromRoute } from './CompanyLoader'\nimport { RequireSupport } from '../auth/RequireUser'\nimport License, { ProductFlagPanel, ProductNameAether, ProductNamePlatform } from './License'\n\n\nexport default withCompanyFromRoute((props: CompanyLoaderProps) => {\n const [patch, setPatch] = React.useState>({})\n const [name, setNameState] = React.useState(props.company.name)\n\n const [aether, setAetherState] = React.useState(props.company.licenses.aether)\n const [platform, setPlatformState] = React.useState(props.company.licenses.platform)\n\n const yyyymmdd = props.company.subscription ?\n new Date(props.company.subscription.endDate).toISOString().split('T')[0] :\n \"\"\n\n const [endDate, setEndDateState] = React.useState(yyyymmdd)\n\n const setName = (v: string) => {\n setPatch({ ...patch, name: v })\n setNameState(v)\n }\n\n const setAether = (v: boolean) => {\n setPatch({ ...patch, licenses: { ...patch.licenses, aether: v } })\n setAetherState(v)\n }\n\n const setPlatform = (v: boolean) => {\n setPatch({ ...patch, licenses: { ...patch.licenses, platform: v } })\n setPlatformState(v)\n }\n\n const setEndDate = (v: string) => {\n setPatch({ ...patch, subscription: { endDate: v } })\n setEndDateState(v)\n }\n\n const removeSub = () => {\n setPatch({ ...patch, subscription: null })\n setEndDateState(\"\")\n }\n\n const submit = () => updateCompany(props.companyKey, patch)\n .then((result: Company) => props.dispatch({ type: 'COMPANY_RECEIVED', payload: result }));\n\n return \n {props.company.name}\n \n
\n\n \n \n ) => setName(e.currentTarget.value)} />\n \n\n \n \n
\n Licensed products\n \n
\n
\n
\n
\n
\n
\n Subscription\n

\n \n ) => setEndDate(e.currentTarget.value)} />\n

\n

\n
\n
\n\n \n
\n\n
\n
\n})","import styled, { ThemedStyledFunction } from 'styled-components';\nimport { Link } from 'react-router-dom';\nconst create = (tag:ThemedStyledFunction) => tag`\n &:before {\n content:'';\n width: 0;\n height: 0;\n border-top: .3em solid transparent;\n border-left: .6em solid;\n border-bottom: .3em solid transparent;\n display:inline-block;\n opacity:.5;\n margin:0 .5em 0 0;\n transition:.25s ease all;\n }\n }\n\n &:hover { \n text-decoration:none;\n }\n\n &:hover:before {\n opacity:.7;\n margin:0 .25em;\n }\n`\n\nexport const TextLink = create(styled(Link))\nexport const TextAnchor = create(styled.a)\nexport default TextLink","import React from 'react'\nimport { Button, FormGroup, Label, Input, FormFeedback } from 'reactstrap'\nimport { FormSection, PageHeading } from '../theme/PageSection'\nimport { postCluster, getClusterVersions, getTerraformScriptDownloadUrl, CloudProvider } from '../../api'\nimport { RouteComponentProps } from 'react-router-dom'\nimport Form from '../Form'\nimport { ResponseError } from 'superagent'\nimport { DispatchProp, connect } from 'react-redux'\nimport { invalidateCompany } from '../../store/companyProfile'\nimport { CloudProviders, getCloudProvider } from '../../store/types';\nimport { TextAnchor } from '../theme/TextLink'\nimport { LoadingState, useLoadingState } from '../LoadingState'\nimport styled from 'styled-components'\n\n\ntype Props = RouteComponentProps<{ companyKey: string }> & DispatchProp\ntype ClusterVersionProps = { setVersion: (version: string) => void }\n\nconst CloudSelectInput = styled(Input)`\n padding-left: 40px;\n`;\n\nconst ProviderLogo = styled.div`\n position: absolute;\n margin-top: 15px;\n margin-left: 8px;\n`;\n\nconst ClusterVersions = ({ setVersion }: ClusterVersionProps) => {\n const { state, result } = useLoadingState(getClusterVersions)\n\n React.useEffect(() => {\n if (result) {\n result.versions.sort((a, b) => b.version.localeCompare(a.version));\n setVersion(result.versions[0].version);\n }\n }, [result])\n\n return \n ) => setVersion(e.currentTarget.value)}>\n {\n result && result.versions.map((val, index) => {\n return (\n {\n val.isBeta\n ? `${val.version}-beta`\n : val.version\n }\n )\n })\n }\n \n \n}\n\nconst NewProject = (props: Props) => {\n const [name, setName] = React.useState('')\n const [version, setVersion] = React.useState(\"\")\n const [cloudProvider, setCloudProvider] = React.useState(getCloudProvider())\n const [bundle, setBundle] = React.useState(null)\n const [status, setStatus] = React.useState(0)\n const { companyKey } = props.match.params\n\n const submit = async () => {\n if (!name || !bundle) throw new Error(\"Required fields not supplied\")\n await postCluster(companyKey, name, version, bundle)\n props.dispatch(invalidateCompany())\n }\n\n const onError = (e : ResponseError) => {\n setStatus(e.status || 0)\n return true\n }\n\n const download = async () => {\n window.location.href = await getTerraformScriptDownloadUrl(cloudProvider.id)\n }\n\n\n\n return \n Create a new project\n \n

\n Create a new project in your own cloud by uploading a configuration bundle file.
\n

\n \n
\n \n \n \n ) => setCloudProvider(getCloudProvider(e.currentTarget.value))}>\n {\n CloudProviders.map((val: any, index: any) => {\n return (\n {val.displayName}\n )\n })\n }\n \n
\n
\n Instructions for provisioning cluster\n
\n\n \n \n ) => setName(e.currentTarget.value)} />\n \n\n \n \n \n \n\n \n \n ) =>\n e.currentTarget.files && e.currentTarget.files.length && setBundle(e.currentTarget.files[0])\n } />\n Looks like you've already uploaded that bundle file.\n\n \n\n \n
\n\n
\n
\n}\n\nexport default connect()(NewProject)","import React from 'react'\nimport styled from 'styled-components'\n\nconst Separator = styled.span`\n color: #e6e6e6;\n margin:0 10px;\n`\n\nfunction* separate(parts: any[]) {\n let i = 0;\n for (let part of parts) {\n if (i++) yield /\n yield part\n }\n}\n\nexport default (props: { children: any }) =>\n \n {[...separate(props.children)]}\n ","import React from 'react'\nimport Table from '../theme/Table'\nimport { User, Company } from '../../api'\nimport Badge from '../theme/Badge'\n\ntype Props = {\n company: Company,\n selected: string[],\n onChange: (selected: string[]) => void,\n adminsPreselected?: boolean\n}\n\nexport default (props: Props) => {\n const selectAll = (checked: boolean) => {\n props.onChange(checked ?\n props.company.users.map(u => u.email) :\n [])\n }\n\n const selectUser = (checked: boolean, key: string) => {\n props.onChange(checked ?\n [...props.selected, key] :\n props.selected.filter(k => k !== key))\n }\n\n const userChecked = (user: User) =>\n props.selected.includes(user.email) ||\n (props.adminsPreselected && user.roles.admin)\n\n const userDisabled = (user: User) => props.adminsPreselected && user.roles.admin\n\n return \n \n \n \n \n \n \n \n \n \n \n \n \n {props.company.users.map((user: User) => \n \n \n \n \n )}\n \n
\n ) => selectAll(e.currentTarget.checked)} />\n NameEmail
\n ) => selectUser(e.currentTarget.checked, user.email)} />\n \n {user.name || \"—\"}\n {\" \"}\n {user.roles && user.roles.admin && Admin}\n {user.email}
\n}","import { ClusterDetail, Company } from \"../../api\"\nimport React from \"react\"\nimport { SectionHeading, SubFullWidthSection } from \"../theme/PageSection\"\nimport UserMultiselect from \"./UserMultiselect\"\n\ntype Props = {\n cluster: ClusterDetail,\n company: Company,\n onChange: (users: ClusterDetail[\"users\"]) => void\n}\n\nexport default ({ cluster, company, onChange }: Props) => {\n const [users, setUsers] = React.useState(cluster.users.map(u => u.key))\n const handleOnChange = (users: string[]) => {\n setUsers(users)\n onChange(users.map(key => ({ key })))\n }\n return <>\n Manage access\n \n \n \n \n}","import React from 'react'\nimport { LoadingState, useLoadingState } from '../LoadingState'\nimport { RouteComponentProps } from 'react-router'\nimport { fetchCluster, Company, ClusterDetail, patchCluster } from '../../api'\nimport { PageHeading, FullWidthSection } from '../theme/PageSection'\nimport { withCompanyFromRoute } from './CompanyLoader'\nimport Breadcrumb from '../theme/Breadcrumb'\nimport { Link } from 'react-router-dom'\nimport ClusterAccess from './ClusterAccess'\nimport Button from 'reactstrap/lib/Button'\nimport Form from '../Form'\n\ntype Props = RouteComponentProps<{ clusterKey: string }> & { company: Company }\n\nexport default withCompanyFromRoute(\n (props: Props) => {\n const clusterKey = props.match.params.clusterKey\n const { state, result: cluster } = useLoadingState(fetchCluster, clusterKey)\n const { company } = props\n const [patch, setPatch] = React.useState>({})\n\n return \n {cluster && <>\n \n \n {company.name}\n {cluster.name}\n \n \n patchCluster(clusterKey, patch)}\n successMessage=\"The project has been updated\"\n >\n\n setPatch({ ...patch, users })} />\n\n \n \n \n \n }\n \n }\n)","import React, { useEffect, useRef, useState } from 'react'\nimport { RequireSupport } from '../auth/RequireUser'\nimport { CompanyLoaderProps, withCompanyFromRoute, withCompanyLoader } from './CompanyLoader'\nimport Tab from '../theme/Tab'\nimport { PageHeading, SectionHeading, WideSection } from '../theme/PageSection';\nimport { getAetherSdkDownloadUrl, getSdkVersionsDescending, getStagedPlatformSdkDownloadUrl } from '../../api'\nimport { Button, Input } from 'reactstrap';\nimport styled from 'styled-components';\nimport linuxLogo from '../../theme/linux-tux.svg'\nimport { CopyBlock, dracula } from 'react-code-blocks';\nimport { LoadingState, useLoadingState } from '../LoadingState';\nimport { Redirect, useLocation } from 'react-router';\n\nconst tabNames = [\"Aether Engine\", \"Hadean Platform\"];\n\nexport default (props: CompanyLoaderProps) => {\n const locn = useLocation();\n const startTab = props.company.licenses.aether? 0 : 1;\n const [active, setActive] = useState(tabNames[startTab]);\n\n if (!locn.state) return ; // Prevents access by direct url manip (need token from link).\n\n return \n SDK Downloads\n {tabNames.map((name) => (\n setActive(name)}>\n {name}\n \n ))}\n {active.includes('Aether') ? aetherDownload() : null}\n {PlatformDownload(active.includes('Hadean'))}\n \n}\n\nconst downloadAetherSDK = async () => {\n window.location.href = await getAetherSdkDownloadUrl()\n}\n\nfunction aetherDownload() {\n return <>\n Download Aether Engine SDK\n

Giant scale spatial simulations.

\n

Below is the download for the Aether Engine SDK installer. On download you will be able to run the Windows installer which includes version selection. Additionally you can run a demo as shown in the documentation.

\n \n \n}\n\nconst PlatformContainer = styled.div`\n display: flex;\n`\n\nconst PlatformLogo = styled.div`\n align-self: end;\n`\n\nconst PlatformContent = styled.div`\n display: flex;\n flex-direction: column;\n align-content: center;\n`\n\nconst PlatformDownloadCode = styled.div`\n max-width: 700px;\n`\n\nconst InlinePre = styled.span`\n display: inline;\n`\n\nconst ManifestNames = [\"Production\", \"Development\", \"ReleaseCandidate\"]\ntype ManifestFunc = { setManifest: (name: string) => void }\ntype PlatformVersionFunc = { setVer: (version: string) => void }\n\nfunction PlatformDownload(draw: boolean) {\n const [manifest, setManifest] = React.useState(ManifestNames[0]);\n const [downloadLink, setDownloadLink] = useState(undefined);\n const [selectedVersion, setSelectedVersion] = React.useState(\"\");\n\n let container = useRef(\"\");\n let filename = useRef(\"\");\n\n useEffect(() => {\n (async () => {\n if (container && selectedVersion && filename) {\n const link = await getStagedPlatformSdkDownloadUrl(container.current, selectedVersion, filename.current)\n setDownloadLink(link)\n }\n })()\n }, [selectedVersion])\n\n if (!draw) return null; // Prevent error with conditional render of useEffect.\n\n const LinuxDownload = \n \n \n \n \n
\n

Linux

\n
\n \n \n \n
\n
\n\n const ManifestSelect = ({ setManifest }: ManifestFunc) => {\n return \n
\n

\n \n

\n ) => {\n setManifest(e.currentTarget.value);\n setSelectedVersion(\"\");\n }} >\n {ManifestNames.map((val, key) => )}\n \n
\n }\n\n const VersionSelect = ({ setVer }: PlatformVersionFunc) => {\n const { state, result } = useLoadingState(getSdkVersionsDescending, manifest)\n\n // Called via useLoadingState setting state of 'result' when finished, causing a re-render.\n React.useEffect(() => {\n let cancel = false;\n if (result && !cancel) {\n container.current = result.container\n filename.current = result.filename\n if (selectedVersion == \"\")\n setSelectedVersion(result.versions[0]);\n }\n return () => { cancel = true; }\n }, [result])\n\n return \n \n
\n

\n \n

\n ) => { setSelectedVersion(e.currentTarget.value); }}>\n {\n result && result.versions.map((val, key) =>\n )\n }\n \n
\n
\n }\n\n const downloadStagedSdk = async () => {\n if (selectedVersion)\n window.location.href = await getStagedPlatformSdkDownloadUrl(container.current, selectedVersion, filename.current)\n }\n\n const Main = <>\n Download Platform SDK\n

Powering dynamically scaled applications in the cloud.

\n

Below are the available downloads for the latest version of the Hadean Platform SDK.

\n

After installing, find the included examples in ~/hadean/examples. Additionally, run a demo as shown in the documentation.

\n

The commands are only valid for 10 minutes, after which you'll have to refresh this page.

\n \n \n \n \n \n \n \n {downloadLink && LinuxDownload}\n \n\n function setVersion(val: string) {\n setSelectedVersion(val)\n }\n\n return {Main}\n}\n","import * as React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { useRouteMatch } from 'react-router-dom'\nimport MustBeLoggedIn from './components/auth/MustBeLoggedIn'\nimport InviteToTeam from './components/customer/InviteToTeam'\nimport Company from './components/customer/Company'\nimport EditCompany from './components/customer/EditCompany'\nimport Layout from './components/Layout'\nimport { withCompanyFromRoute } from './components/customer/CompanyLoader'\nimport NewProject from './components/customer/NewProject'\nimport EditCluster from './components/customer/EditCluster'\nimport SDKDownloads from './components/customer/SdkDownloads'\n\nexport default () => {\n let { path }: any = useRouteMatch()\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}","import React from 'react'\nimport { FormGroup, Label, Input, Button } from 'reactstrap'\nimport { FormSection, PageHeading } from '../theme/PageSection'\nimport { postCompany } from '../../api'\nimport { ProductFlagPanel, ProductNameAether, ProductNameMuxer, ProductNamePlatform } from '../customer/License'\nimport { RequireSupport } from '../auth/RequireUser'\nimport Form from '../Form'\n\ninterface State {\n name: string,\n email: string,\n aether: boolean,\n muxer: boolean,\n platform: boolean\n}\n\nexport default class NewCompany extends React.Component<{}, State> {\n constructor(props: {}) {\n super(props)\n this.state = {\n name: '',\n email: '',\n aether: false,\n muxer: false,\n platform: false\n }\n }\n submit() {\n const { name, email, aether, muxer, platform } = this.state\n return postCompany({\n name,\n contact: { email },\n licenses: { aether, muxer, platform }\n })\n }\n render() {\n const { name, email, aether, muxer, platform } = this.state\n return \n New company\n \n
\n\n \n \n ) => this.setState({ name: e.currentTarget.value })} />\n \n\n \n \n ) => this.setState({ email: e.currentTarget.value })} />\n \n\n \n \n \n \n
\n
\n
\n
\n
\n\n \n \n
\n\n
\n
\n }\n}","import * as React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { useRouteMatch } from 'react-router-dom'\nimport MustBeLoggedIn from './components/auth/MustBeLoggedIn'\nimport NewCompany from './components/support/NewCompany'\nimport CompanyList from './components/support/CompanyList'\nimport Layout from './components/Layout'\n\nexport default () => {\n let { path }: any = useRouteMatch()\n\n return (\n \n \n \n \n \n \n \n \n )\n}","import React from 'react'\nimport { FormGroup, Label, Input, Button } from 'reactstrap'\nimport { FormSection, PageHeading } from '../theme/PageSection'\nimport { postPersonalAccount } from '../../api'\nimport Form from '../Form'\n\ninterface State {\n username: string\n}\n\nexport default class NewPersonalAccount extends React.Component<{}, State> {\n constructor(props: {}) {\n super(props)\n this.state = {\n username: ''\n }\n }\n submit() {\n const { username } = this.state\n return postPersonalAccount({ username })\n }\n render() {\n const { username } = this.state\n return \n New personal account\n \n
\n\n \n \n ) => this.setState({ username: e.currentTarget.value })} />\n \n\n \n \n
\n\n
\n
\n }\n}","import React from 'react'\nimport { useState, useEffect } from 'react'\nimport { PageHeading, WideSection } from '../theme/PageSection'\nimport { Link } from 'react-router-dom'\nimport { Button } from 'reactstrap'\nimport * as api from '../../api'\nimport Table from '../theme/Table'\nimport styled from 'styled-components'\n\n\nconst DownloadsLink = styled(Link)`\n margin-right: 10px;\n`\n\nconst Create = Create New\nconst Downloads = Downloads\nconst Extras = <>\n {Downloads}\n {Create}\n \n\n\nconst PersonalAccountTable = () => {\n const [personalAccounts, setPersonalAccounts] = useState([]);\n\n const handleDelete = (key: string) => {\n api.deletePersonalAccount(key)\n .then(() => {\n setPersonalAccounts(personalAccounts.filter(a => a.key !== key))\n })\n .catch((e) => console.error(\"could not delete personalAccount\", e))\n }\n\n useEffect(() => {\n (async () => {\n const accounts = await api.listPersonalAccounts()\n setPersonalAccounts(accounts)\n })()\n }, [])\n\n return \n \n \n \n \n \n \n \n \n {personalAccounts && personalAccounts.map( c => \n \n \n \n \n )}\n \n
NameCreated at
{c.username}{c.created}
\n}\nexport default () => \n Personal Accounts\n \n \n \n\n","import * as React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { useRouteMatch } from 'react-router-dom'\nimport MustBeLoggedIn from './components/auth/MustBeLoggedIn'\nimport requireAdmin from './components/auth/RequireUser'\nimport NewPersonalAccount from './components/support/NewPersonalAccount'\nimport PersonalAccountList from './components/support/PersonalAccountList'\nimport Layout from './components/Layout'\n\nconst PersonalAccount = () => {\n let { path }: any = useRouteMatch()\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default requireAdmin(PersonalAccount)","import React from 'react'\nimport { useState, useEffect } from 'react'\nimport { WideSection } from '../theme/PageSection'\nimport { Button, Input, } from 'reactstrap'\nimport { UserState } from '../../store/user'\nimport requireUser, { RequireSupport } from '../auth/RequireUser'\nimport { getSdkVersionsDescending, getPlatformSdkDownloadUrl, getStagedPlatformSdkDownloadUrl } from '../../api'\nimport linuxLogo from '../../theme/linux-tux.svg'\nimport styled from 'styled-components'\nimport { CopyBlock, dracula } from \"react-code-blocks\";\nimport { LoadingState, useLoadingState } from '../LoadingState'\n\n\nconst Title = styled.h1`\n margin-top: 10px;\n`\n\nconst Description = styled.p`\n`\n\nconst Warning = styled.p`\n color: #555;\n`\n\nconst PlatformContainer = styled.div`\n display: flex;\n`\n\nconst PlatformLogo = styled.div`\n align-self: end;\n`\n\nconst PlatformContent = styled.div`\n display: flex;\n flex-direction: column;\n align-content: center;\n`\n\nconst PlatformDownloadCode = styled.div`\n max-width: 700px;\n`\n\nconst InlinePre = styled.pre`\n display: inline;\n`\n\nconst ManifestNames = [\"Development\", \"ReleaseCandidate\", \"Production\"]\ntype ManifestFunc = { setManifest: (name: string) => void }\ntype PlatformVersionFunc = { setVer: (version: string) => void }\n\nconst PlatformSDKDownloadLanding = ({ user }: { user: UserState }) => {\n const [manifest, setManifest] = React.useState(ManifestNames[0])\n const [downloadLink, setDownloadLink] = useState(undefined);\n\n let selectedVersion = \"\"\n let container = \"\"\n let filename = \"\"\n\n useEffect(() => {\n (async () => {\n const downloadLink = await getPlatformSdkDownloadUrl()\n setDownloadLink(downloadLink)\n })()\n }, [])\n\n const LinuxDownload = <>\n
\n \n \n \n \n \n
\n

Linux

\n
\n \n \n \n
\n
\n \n\n const ManifestSelect = ({ setManifest }: ManifestFunc) => {\n return
\n
\n

\n \n

\n ) => setManifest(e.currentTarget.value)}>\n {\n ManifestNames.map((val, key) =>\n )\n }\n \n
\n }\n\n const VersionSelect = ({ setVer }: PlatformVersionFunc) => {\n const { state, result } = useLoadingState(getSdkVersionsDescending, manifest)\n\n React.useEffect(() => {\n if (result) {\n selectedVersion = result.versions[0]\n container = result.container\n filename = result.filename\n }\n }, [result])\n\n return \n
\n

\n \n

\n ) => setVer(e.currentTarget.value)}>\n {\n result && result.versions.map((val, key) =>\n )\n }\n \n
\n }\n\n const downloadStagedSdk = async () => {\n if (selectedVersion)\n window.location.href = await getStagedPlatformSdkDownloadUrl(container, selectedVersion, filename)\n }\n\n const AllPlatformsDownload = <>\n Download Platform SDK\n \n Below are the available downloads for the latest version of the Hadean Platform SDK.\n \n \n After installing, find the included examples in ~/hadean/examples. Additionally, run a demo as shown in the documentation.\n \n \n The commands are only valid for 10 minutes, after which you'll have to refresh this page.\n \n {downloadLink && LinuxDownload}\n \n
\n \n \n \n
\n \n\n function setVersion(val: string) {\n selectedVersion = val\n }\n\n return (user.isSupportUser || user.personalAccount) && {AllPlatformsDownload}\n}\n\nexport default requireUser(PlatformSDKDownloadLanding)\n","import * as React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport { useRouteMatch } from 'react-router-dom'\nimport MustBeLoggedIn from './components/auth/MustBeLoggedIn'\nimport requireAdmin from './components/auth/RequireUser'\nimport NewPersonalAccount from './components/support/NewPersonalAccount'\nimport PlatformSDKDownload from './components/platform-sdk/PlatformSDKDownload'\nimport Layout from './components/Layout'\n\nconst PlatformSDKDownloads = () => {\n let { path }: any = useRouteMatch()\n\n return (\n \n \n \n \n \n \n \n )\n}\n\nexport default PlatformSDKDownloads","import colours from '../theme/colours'\nimport styled from 'styled-components'\n\nexport default styled.p`\n margin-top: 15px;\n font-size:0.8rem;\n color: ${colours.Indigo};\n text-transform: uppercase;\n display: flex;\n align-items: center;\n text-align: center;\n ::before, ::after {\n content: '';\n flex: 1;\n border-bottom: 1px solid ${colours.Stone};\n }\n ::before {\n margin-right: .25em;\n }\n ::after {\n margin-left: .25em;\n }\n`","import * as React from 'react'\nimport colours from '../theme/colours'\nimport HadeanStoneBackground from '../../theme/stone-bg.svg'\nimport styled from 'styled-components'\nimport logo from '../../theme/logo.svg'\n\nconst widescreen = \"min-width: 860px\"\n\nconst Logo = styled.img`\n height:3em;\n margin:2em 0 2em 5vw;\n &.wide { \n display:none;\n @media (${widescreen}) {\n display:block;\n position:absolute;\n }\n }\n`\n\nconst NarrowHeader = styled.div`\n order: 0;\n @media (${widescreen}) {\n display:none;\n }\n`\nconst LeftPanel = styled.div`\n @media (${widescreen}) {\n flex:40;\n display:flex;\n order:0;\n }\n order: 2;\n`\n\nconst RightPanel = styled.div`\n padding:2em;\n align-items:center;\n justify-items:center;\n justify-content:center;\n background: url(${HadeanStoneBackground}) bottom right;\n background-size:cover;\n order: 1;\n @media (${widescreen}) {\n order:0;\n flex:60;\n clip-path:polygon(25vw 0, 100% 0, 100% 100%, 0 100%);\n display:flex;\n >* { \n margin-left:20vw; \n flex: 1;\n align-self:center; \n }\n }\n`\n\nconst PartitionStyle = styled.div`\n background-color: ${colours.Indigo};\n display:flex;\n flex-direction:column;\n @media (${widescreen}) {\n flex-direction:row;\n height:100vh;\n }\n color:white;\n button {\n width:100%;\n }\n a { \n color:${colours.Orange};\n }\n`\n\nconst BrandingPartition: React.FunctionComponent = ({ children: [lhs, rhs] }, ) =>\n \n \n \n \n \n \n {lhs}\n \n {rhs}\n \n\nexport default BrandingPartition","import * as React from 'react'\nimport styled from 'styled-components'\nimport colours from './theme/colours'\n\nconst Footer = styled.footer`\n font-size: .7rem;\n padding:1em;\n color: ${colours.Indigo80};\n display:flex;\n div:first-child { \n flex:1;\n }\n a { \n color: ${colours.Indigo80};\n }\n`\n\nexport default () =>
\n
Copyright © {new Date().getFullYear()} Hadean Supercomputing Ltd. All Rights Reserved.
\n \n
","import * as React from 'react'\nimport Form from '../Form'\nimport { Label, Input, FormGroup, Button, FormFeedback } from 'reactstrap'\nimport { RouteComponentProps } from 'react-router-dom'\nimport googleLogo from './GoogleG.svg'\nimport styled from 'styled-components'\nimport webAuth0 from './auth0Config'\nimport Divider from '../theme/Divider'\nimport Alert from 'reactstrap/lib/Alert'\nimport { Auth0Error } from 'auth0-js'\nimport TextLink from '../theme/TextLink'\nimport BrandingPartition from '../theme/BrandingPartition'\nimport hadeanIcon from '../../theme/icons/__triangle.svg'\nimport blogIcon from '../../theme/icons/blog.svg'\nimport docIcon from '../../theme/icons/__book2.svg'\nimport Footer from '../Footer'\nimport themes from '../theme/colours'\nimport TechStackImage from '../../theme/tech-stack.png'\n\nconst ProviderLogo = styled.img`\n width:1.5em;\n margin-right:1em;\n`\nconst LeftPanel = styled.div`\n display:flex;\n width:100%;\n flex-direction:column;\n`\nconst LeftPanelContent = styled.div`\n flex:1;\n display: flex;\n flex-direction:column;\n justify-content: center;\n`\nconst RightPanel = styled.div`\n >* {\n margin:0 auto;\n max-width: 24em;\n }\n`\n\nconst LinkSectionStyle = styled.div`\n display:flex;\n justify-items:center;\n justify-content:center;\n margin:2em;\n a {\n display:flex;\n flex-direction: column;\n align-items:center;\n flex:1;\n text-align:center;\n color:white;\n font-weight:600;\n padding:1em 0;\n transition:all 0.4s linear;\n img { \n display:block;\n height:3em;\n margin-bottom:1em;\n }\n :hover {\n text-decoration:none;\n border: 1px solid ${themes.Orange60}\n }\n }\n`\n\nconst WhiteBackgroundFormFeedback = styled(FormFeedback)`\n background-color: ${themes.White};\n border: 1px solid ${themes.Coral};\n padding: 3px 0px 3px 30px;\n margin-top: 10px;\n border-radius: 10px;\n`\n\nconst SignInButton = (props: any) => {\n const Styled = styled(Button)`\n :hover:disabled #tos-tooltip {\n visibility: visible;\n }\n :disabled {\n cursor: not-allowed;\n pointer-events: all !important;\n }`\n\n return \n}\n\nconst Tooltip = styled.span`\n visibility: hidden;\n width: 140px;\n background-color: ${themes.Indigo};\n color: #fff;\n text-align: center;\n border-radius: 6px;\n padding: 5px 0;\n position: absolute;\n z-index: 1;\n`\n\nconst ToSCheckBox = styled.input`\n margin-right: 10px;\n`\n\nconst LinkSection = () => \n \"\" Hadean
Website
\n \"\" Hadean
Blog
\n \"\" Developer
Documentation
\n
\n\n\ntype Props = RouteComponentProps<{}, {}, { redirectPath: string, message: string | undefined }>\n\n\nconst SignIn = (props: Props) => {\n const [checked, setChecked] = React.useState(false);\n const [email, setEmail] = React.useState('')\n const [password, setPassword] = React.useState('')\n const [error, setError] = React.useState(null)\n\n const submitAuth0 = () => new Promise((resolve, reject) => {\n webAuth0.login({\n email,\n password,\n state: props.location.state && props.location.state.redirectPath,\n realm: \"Email-Password-Authentication\"\n }, (err) => {\n if (err) reject(err)\n else resolve()\n })\n })\n\n const onError = (e: Auth0Error) => {\n switch (e.error) {\n case \"access_denied\":\n setError(e.error)\n return true\n default: return false\n }\n }\n\n const signInGoogle = () => webAuth0.authorize({\n connection: 'google-oauth2',\n mode: \"login\",\n state: props.location.state && props.location.state.redirectPath\n })\n\n const widescreen = \"max-width: 1025px\"\n\n const TechStack = styled.img`\n display: block;\n top: -100px;\n left: -180px;\n position: absolute;\n height: 950px;\n opacity: 0.8;\n max-height: 100%;\n @media (${widescreen}) {\n display: none;\n }\n `\n\n return
\n \n \n \n \n {props.location.state && props.location.state.message && {props.location.state.message}}\n \n \n
\n \n \n
\n

Create a new account

\n\n \n \n ) => setEmail(e.currentTarget.value)} />\n \n\n \n \n ) => setPassword(e.currentTarget.value)} />\n\n That's the wrong email address or password.\n \n\n

Forgot your password?

\n\n \n\n Sign in Confirm Terms of Service\n \n\n or\n\n

\n \n Sign in with Google\n Confirm Terms of Service\n {' '}\n

\n \n
\n \n
\n}\n\nexport default SignIn\n","import * as React from 'react'\nimport horizontalLogo from '../../theme/logo-dark.svg'\nimport styled from 'styled-components'\n\nconst Logo = styled.img`\n height:2em;\n margin:32px;\n`\n\nexport default (props: { children?: React.ReactNode }) => (\n \n
\n \n
\n {props.children}\n
\n)\n","import * as React from 'react'\nimport Form from '../Form'\nimport { Label, Input, FormGroup, Button, FormFeedback } from 'reactstrap'\nimport { FormSectionBorder as FormSection } from '../theme/PageSection'\nimport webAuth0 from './auth0Config'\nimport { DbSignUpOptions, Auth0Error } from 'auth0-js'\nimport AuthLayout from './AuthLayout'\n\nconst SignUp = () => {\n const [name, setName] = React.useState('')\n const [email, setEmail] = React.useState('')\n const [password, setPassword] = React.useState('')\n const [error, setError] = React.useState(null)\n\n const submitAuth0 = () => new Promise((resolve, reject) => {\n setError(null)\n webAuth0.signup({\n connection: 'Email-Password-Authentication',\n email: email,\n password: password,\n name: name\n } as DbSignUpOptions, (err) => {\n if (err) reject(err)\n else resolve()\n })\n })\n\n const onError = (e: Auth0Error) => {\n switch (e.code) {\n case \"invalid_signup\":\n case \"invalid_password\":\n setError(e.code)\n return true\n default: return false\n }\n }\n\n return \n \n\n
\n\n

Create an account

\n\n \n \n ) => setName(e.currentTarget.value)} />\n \n\n \n \n ) => setEmail(e.currentTarget.value)} />\n That email address is not valid or is already in use.\n \n\n \n \n ) => setPassword(e.currentTarget.value)} />\n Your password must contain at least 3 of the following: upper case letters, lower case letters, numbers and symbols.\n \n\n \n
\n\n
\n
\n}\n\nexport default SignUp","import * as React from 'react'\nimport Form from '../Form'\nimport { Label, Input, FormGroup, Button } from 'reactstrap'\nimport { FormSectionBorder as FormSection } from '../theme/PageSection'\nimport { RouteComponentProps } from 'react-router-dom'\nimport webAuth0 from './auth0Config'\nimport AuthLayout from './AuthLayout'\n\ntype Props = RouteComponentProps<{}, {}, { email: string }>\n\nconst ForgotPassword = (props: Props) => {\n const [email, setEmail] = React.useState(props.location.state ? props.location.state.email : '')\n\n const submit = () => new Promise((resolve, reject) =>\n webAuth0.changePassword({\n connection: \"Email-Password-Authentication\",\n email\n }, err => {\n if (err) reject(err)\n else resolve()\n }))\n\n return \n \n\n

Reset your password

\n\n
\n\n \n \n ) => setEmail(e.currentTarget.value)} />\n \n\n \n\n
\n\n
\n
\n}\n\nexport default ForgotPassword","import * as React from 'react'\nimport Form from '../Form'\nimport { Label, Input, FormGroup, Button, Alert } from 'reactstrap'\nimport { FormSectionBorder as FormSection } from '../theme/PageSection'\nimport MustBeLoggedIn from './MustBeLoggedIn'\nimport webAuth0 from './auth0Config'\nimport { connect } from 'react-redux'\nimport { ApplicationState } from '../../store'\nimport { AuthUserProfile } from '../../store/Auth'\nimport AuthLayout from './AuthLayout'\n\ntype Props = { identity: AuthUserProfile | null | undefined }\n\nconst EditForm = ({ identity }: Props) => {\n const name = (identity && identity.displayName) || \"\"\n const [passwordSent, setPasswordSent] = React.useState(false)\n\n const changePassword = () => new Promise((resolve, reject) =>\n webAuth0.changePassword({\n connection: \"Email-Password-Authentication\",\n email: identity!.email\n }, err => {\n if (err) reject(err)\n else {\n resolve()\n setPasswordSent(true)\n }\n }))\n\n return <>\n

Edit your profile

\n \n \n \n \n \n \n
\n

\n
\n {passwordSent &&\n We've sent you a link to change your password. Please check your email.}\n
\n \n}\n\nconst EditProfile = ({ identity }: Props) => \n \n \n \n \n \n\n\nexport default connect\n ((state: ApplicationState) => ({ identity: state.auth && state.auth.identity }))\n (EditProfile)","import * as React from 'react'\nimport { Route, Switch } from 'react-router-dom'\nimport SignIn from './components/auth/SignIn'\nimport SignUp from './components/auth/SignUp'\nimport Password from './components/auth/Password'\nimport EditProfile from './components/auth/EditProfile'\n\nexport default () => \n \n \n \n \n","import * as React from 'react'\nimport { Route } from 'react-router-dom'\nimport Home from './components/Home'\nimport ProfileRoute from './ProfileRoute'\nimport { connect } from 'react-redux'\nimport CompaniesRoute from './CompaniesRoute'\nimport PersonalAccountsRoute from './PersonalAccountsRoute'\nimport PlatformSDKDownloadsRoute from './PlatformSDKDownloadsRoute'\nimport { initialise } from './store/Auth'\nimport { Switch } from 'react-router'\nimport AuthRoute from './AuthRoute'\n\n\nconst App = (props: { initialise: () => void }) => {\n React.useEffect(props.initialise, [props])\n\n return \n \n \n \n \n \n \n \n}\n\nexport default connect(null, { initialise })(App)\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string\n const publicUrl = new URL(url, window.location.toString())\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.')\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","\nimport './custom.scss'\n\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport { Provider } from 'react-redux'\nimport { ConnectedRouter } from 'connected-react-router'\nimport store from './store'\nimport App from './App'\nimport registerServiceWorker from './registerServiceWorker'\nimport history from './history'\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web'\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js'\n\nif (process.env.NODE_ENV === 'production') {\n const reactPlugin = new ReactPlugin()\n const appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: process.env.REACT_APP_APPLICATION_INSIGHTS_KEY,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history }\n },\n isCookieUseDisabled: true\n }\n })\n appInsights.loadAppInsights()\n}\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'))\n\nregisterServiceWorker()\n"],"sourceRoot":""}