{"version":3,"sources":["Subscribe/assets/mail.svg","Subscribe/assets/phone.svg","Header/assets/external-link.svg","WhiteBoxHeader/assets/ok-status-icon.svg","TopLevelStatus/assets/ok-status-icon.jsx","TopLevelStatus/assets/cone-empty.js","TopLevelStatus/assets/maintenance.jsx","TopLevelStatus/index.jsx","Subscribe/assets/slack.js","Subscribe/index.jsx","WhiteBoxHeader/assets/red-check.svg","Header/index.js","TopLevelStatus/assets/wrench.js","TopLevelStatus/assets/cone-full.js","WhiteBoxHeader/assets/plus.js","WhiteBoxHeader/assets/minus.js","WhiteBoxHeader/index.js","Uptime/index.js","WhiteBoxStats/index.js","TimelineSelector/index.js","ProtectedPage/index.jsx","PoweredBy/index.jsx","API/index.js","App.js","TopLevelStatus/assets/cone.js","TopLevelStatus/assets/notok-empty.js","Incidents/index.jsx","IncidentsPage.js","IncidentPage.js","ConfirmSubscriptionPage.js","UnsubscribePage.js","registerServiceWorker.js","index.js","Notification/index.jsx","WhiteBoxHeader/assets/NotOk.js","utils/index.js"],"names":["module","exports","_path","_polyline","_line","_excluded","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgExternalLink","_ref","svgRef","title","props","createElement","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","className","ref","d","points","x1","y1","x2","y2","ForwardRef","forwardRef","SvgComponent","fillRule","xmlns","getText","text","str","JSON","parse","e","isJSON","en","TopLevelStatus","window","location","pathname","includes","indicator","incident","statuspage","topLevelStatus","hasOngoingIncident","uuid","titleStatus","type","status","TopLevelIcon","UpIcon","NotOk","MaintenanceIcon","Cone","style","minWidth","dangerouslySetInnerHTML","__html","formatText","lastUpdateText","formatDateAndTime","lastUpdateDate","isIncidentView","Link","to","lastIncidentDate","getTimeAgo","Component","withRouter","baseUrl","getBaseUrl","Subscribe","handleClick","event","dropdownRef","buttonRef","contains","setState","isOpened","escFunction","keyCode","isSelected","state","selectedType","selectType","submit","isLoading","isEmailValid","phoneNumber","countryCode","parsePhoneNumberFromString","phone","toUpperCase","number","fetch","headers","method","body","stringify","email","hostname","then","response","json","notificationMessage","message","showNotification","notificationType","toggle","test","isPhoneValid","onChangeEmail","value","toLowerCase","onChangePhone","closeNotification","isOriginalCoverColor","coverColor","getChannel","document","addEventListener","removeEventListener","USAIndex","countries","findIndex","country","hasSubscriberPhoneFeature","hasSubscriberSlackFeature","pageCode","Notification","onClick","color","backgroundColor","src","mailSvg","alt","phoneSvg","statuspageName","placeholder","name","onChange","autoFocus","classNamePrefix","options","defaultValue","option","styles","marginTop","href","Header","hasSubscriberFeature","features","subscribers","subscribersPhone","subscribersSlack","process","REACT_APP_STAGE","hasLoaded","hasStatuspageLoaded","image","homepage","cx","cy","r","x","y","rx","ry","GetRow","service","isExpanded","display","isGroup","alias","domain","getAlias","up","getIndex","services","index","GetServices","collapsed","map","s","WhiteBoxHeader","React","useState","setCollapsed","indexRemove","c","newCollapsed","splice","months","Uptime","CustomTooltip","payload","hour","date","ts","valueFormat","valueName","labels","getTimeLabel","today","Date","year","getFullYear","month","getMonth","day","getDate","getHumanDate","data","dataset","row","skeleton","uptime","elapsedTime","time","getHourAndMinute","margin","bottom","top","dataKey","tick","fontSize","tickFormatter","label","toFixed","id","offset","stopColor","stopOpacity","dot","fillOpacity","isAnimationActive","content","getLabelDate","compUptime","rows","pings","filter","reduce","acc","compElapsedTime","WhiteBoxStats","todayOrYesterday","flattenServices","find","moment","toDate","subtract","todayPings","ping","isSame","Number","allServices","forEach","push","nbRows","graphs","servicesWithGraphs","showResponseTime","showUptime","every","snapshots","meanUptime","meanElapsedTime","filledDays","slice","reverse","yesterday","addHourlyPingsToDailyRows","shift","hasUptime","hasResponseTime","responseTime","selectedTimeline","getGraphs","graph","getStats","TimelineSelector","items","selected","hasSnapshots","item","ProtectedPage","onChangePassword","password","preventDefault","credentials","reload","wrongPassword","setFavicon","setTabName","favicon","querySelector","onSubmit","PoweredBy","getHostname","rel","fetchWrapper","endpoint","params","urlParams","URLSearchParams","App","handleTimelineSelector","parseInt","hasAtLeastOneMetric","hasAtLeastOne","search","statusPageId","environment","loading","timelineItems","protected","protectedPageData","incidents","hasLoadedPings","hasLoadedSnapshots","fetchStatuspage","history","API","groupIndex","serviceIndex","indexGroup","sr","Promise","reject","fetchSnapshots","ongoingIncident","fetchPings","isResponseTimeSelected","isUptimeSelected","hasSnapshotsLoaded","GetSpan","children","Incidents","getBackLink","isIncidentPage","incidentId","charAt","Tag","getDateRange","getEstimatedDuration","updates","update","getMaintenanceStatus","endDate","UTCTime","format","affectedComponents","Incident","match","fetchIncident","isHomePage","ConfirmSubscription","confirmSusbcription","token","isConfirmed","redirect","renderRedirect","pathnameDestination","split","Redirect","Unsubscribe","isUnsubscribed","Boolean","routing","Switch","Route","exact","path","component","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister","setTimeout","rawDate","fromNow","join","latest","oldest","aresameMonth","latestDateRaw","oldestDateRaw","latestDate","oldestDate","areDatesOnSameMonth","latestDay","oldestDay","areDatesOnSameDay","formatDate","getMinuteGrammar","minute","maintenance","startDate","startHumanDate","endHumanDate","duration","diff","hours","asHours","minutes","asMinutes","timezone","guess","hasMinutes","hasHours","humanDuration","isBetween","isBefore","isAfter","protocol","devUrl"],"mappings":"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","file":"static/js/main.624b7df9.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/mail.20e8982e.svg\";","module.exports = __webpack_public_path__ + \"static/media/phone.2b23e08a.svg\";","var _path, _polyline, _line;\n\nvar _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgExternalLink = function SvgExternalLink(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"feather feather-external-link\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n })), _polyline || (_polyline = /*#__PURE__*/React.createElement(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n x1: 10,\n y1: 14,\n x2: 21,\n y2: 3\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgExternalLink, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/external-link.ac05cd4f.svg\";\nexport { ForwardRef as ReactComponent };","module.exports = __webpack_public_path__ + \"static/media/ok-status-icon.a40ffb2d.svg\";","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import React, { Component } from 'react';\nimport UpIcon from './assets/ok-status-icon.jsx';\nimport DownIcon from './assets/red-check.jsx';\nimport Cone from './assets/cone-empty';\nimport MaintenanceIcon from './assets/maintenance.jsx';\nimport { Link, withRouter } from 'react-router-dom';\nimport NotOk from '../WhiteBoxHeader/assets/NotOk';\nimport './styles.scss';\nimport {\n formatText,\n formatDateAndTime,\n getTimeAgo\n} from '../utils/index';\n\nconst getIcon = (indicator) => {\n if (indicator === 'up') {\n return UpIcon;\n }\n \n if (indicator === 'down' || indicator === 'outage') {\n return NotOk;\n }\n \n if (indicator === 'maintenance') {\n return MaintenanceIcon;\n }\n \n if (indicator === 'partialoutage') {\n return Cone;\n }\n \n if (indicator === 'incident') {\n return Cone;\n }\n}\n\nconst isJSON = (str) => {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n\nconst getText = (text) => {\n if (isJSON(text)) {\n text = JSON.parse(text);\n if (!!text.en) return text.en;\n const [first] = Object.keys(text)\n return first;\n }\n return text;\n}\n\n\nclass TopLevelStatus extends Component {\n isIncidentView() {\n const { pathname } = window.location;\n if (pathname.includes('/history/')) {\n return true;\n }\n return false;\n }\n\n render() {\n const { incident, statuspage, topLevelStatus } = this.props;\n const hasOngoingIncident = !!incident && !!incident.uuid;\n const titleStatus = !!incident ? incident.type : 'up';\n const title = hasOngoingIncident ? getText(incident.title) : getText(topLevelStatus.status);\n const TopLevelIcon = getIcon(hasOngoingIncident ? incident.type : topLevelStatus.indicator);\n\n return(\n
\n
\n
\n
\n {title}\n {hasOngoingIncident && \n \n
Last update: {formatDateAndTime(incident.lastUpdateDate)}
\n
}\n {!this.isIncidentView() && hasOngoingIncident && \n \n Read more \n \n }\n {!hasOngoingIncident && !!topLevelStatus.lastIncidentDate && \n Last incident {getTimeAgo(topLevelStatus.lastIncidentDate)} \n }\n {!hasOngoingIncident && !topLevelStatus.lastIncidentDate && No recent incident}\n
\n
\n
\n );\n }\n}\n\nexport default withRouter(TopLevelStatus);\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n \n \n )\n}\n\nexport default SvgComponent\n","import React, { Component } from 'react';\nimport Notification from '../Notification';\nimport mailSvg from './assets/mail.svg';\nimport phoneSvg from './assets/phone.svg';\nimport SlackSvg from './assets/slack';\nimport Select from 'react-select';\nimport './styles.scss';\nimport countries from './countries.json';\nimport { parsePhoneNumberFromString } from 'libphonenumber-js';\nimport { getBaseUrl } from '../utils';\n\nconst baseUrl = getBaseUrl();\n\nclass Subscribe extends Component {\n constructor(props) {\n super(props);\n\n const { hostname } = window.location;\n\n this.state = {\n isOpened: false,\n countryCode: 'us',\n email: '',\n phone: '',\n showNotification: false,\n notificationType: '',\n notificationMessage: '',\n isLoading: false,\n hostname,\n selectedType: 'mail'\n };\n }\n\n componentWillMount() {\n document.addEventListener('mousedown', this.handleClick, false);\n document.addEventListener('keydown', this.escFunction, false);\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleClick, false);\n document.removeEventListener('keydown', this.escFunction, false);\n }\n\n handleClick = (event) => {\n if (!!this.dropdownRef\n && !!this.buttonRef\n && (this.dropdownRef.contains(event.target) || this.buttonRef.contains(event.target))) {\n return;\n }\n\n this.setState({ isOpened: false });\n }\n\n escFunction = (event) => {\n if (event.keyCode === 27) {\n this.setState({ isOpened: false });\n }\n }\n\n isSelected = (type) => {\n if (type === this.state.selectedType) {\n return 'selected';\n }\n }\n\n selectType = (selectedType) => {\n this.setState({ selectedType });\n }\n\n submit = () => {\n if (this.state.isLoading) {\n return;\n }\n\n if (this.state.selectedType === 'mail' && !this.isEmailValid()) {\n return;\n }\n\n let phoneNumber = '';\n if (this.state.selectedType === 'phone') {\n if (this.state.countryCode.length !== 2) {\n return;\n }\n\n const formattedPhoneNumber = parsePhoneNumberFromString(this.state.phone, this.state.countryCode.toUpperCase());\n phoneNumber = formattedPhoneNumber.number;\n }\n\n this.setState({ isLoading: true });\n fetch(`${baseUrl}/v1/statuspage/subscribers`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n email: this.state.email,\n phone: phoneNumber,\n type: this.state.selectedType,\n hostname: this.state.hostname\n })\n })\n .then((response) => response.json())\n .then((response) => {\n let notificationMessage = '';\n if (this.state.selectedType === 'mail') {\n notificationMessage = 'Your email is now subscribed to updates! An email has been sent to confirm the subscription';\n } else if (this.state.selectedType === 'phone') {\n notificationMessage = 'Your phone number is now subscribed to updates!';\n }\n\n if (response.message.includes('success')) {\n this.setState({\n showNotification: true,\n notificationMessage,\n notificationType: 'success',\n email: '',\n phone: '',\n countryCode: 'us',\n selectedType: 'mail',\n isOpened: false,\n isLoading: false\n });\n } else {\n this.setState({\n showNotification: true,\n notificationMessage: response.message,\n notificationType: 'danger',\n isLoading: false\n });\n }\n });\n }\n\n toggle = () => {\n this.setState({ isOpened: !this.state.isOpened });\n }\n\n isEmailValid = () => {\n const re = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/\n return re.test(this.state.email);\n }\n\n isPhoneValid = () => {\n if (this.state.countryCode.length !== 2) {\n return false;\n }\n\n if (this.state.phone.length <= 6) {\n return false;\n }\n\n return true;\n }\n\n onChangeEmail = (event) => {\n this.setState({ email: event.target.value.toLowerCase() });\n }\n \n onChangePhone = (event) => {\n this.setState({ phone: event.target.value });\n }\n\n closeNotification = () => {\n this.setState({ showNotification: false });\n }\n\n isOriginalCoverColor = () => this.props.coverColor.toLowerCase().includes('fafbfc');\n\n getChannel = () => {\n if (this.isSelected('mail')) {\n return 'emails';\n } else if (this.isSelected('phone')) {\n return 'SMS';\n } else if (this.isSelected('slack')) {\n return 'Slack notifications';\n }\n }\n\n render() {\n const { isOpened } = this.state;\n const USAIndex = countries.findIndex(country => country.value === 'us');\n const { hasSubscriberPhoneFeature, hasSubscriberSlackFeature, pageCode } = this.props;\n\n return(\n \n {this.state.showNotification &&\n \n }\n
\n this.buttonRef = buttonRef}\n onClick={this.toggle}\n className=\"subscribe\"\n style={{\n color: this.isOriginalCoverColor() ? null : this.props.coverColor,\n backgroundColor: this.isOriginalCoverColor() ? null : \"#FFF\",\n }}\n >Subscribe to updates\n {isOpened &&
this.dropdownRef = dropdownRef}>\n {(hasSubscriberPhoneFeature || hasSubscriberSlackFeature) &&
\n
this.selectType('mail')}>\n \"mail-icon\"\n
\n {hasSubscriberPhoneFeature &&
this.selectType('phone')}>\n \"phone-icon\"\n
}\n {hasSubscriberSlackFeature &&
this.selectType('slack')}>\n \n
}\n
}\n Subscribe to receive {this.getChannel()} everytime {this.props.statuspageName} publishes an update.\n {this.isSelected('mail') && }\n {this.isSelected('phone') && this.setState({ countryCode: option.value })}\n styles={{\n marginTop: '5em'\n }}\n />}\n {this.isSelected('phone') && }\n {this.isSelected('mail') && Subscribe via email}\n {this.isSelected('phone') && Subscribe via SMS}\n {this.isSelected('slack') && Subscribe via Slack}\n
}\n
\n
\n )\n }\n}\n\nexport default Subscribe;\n","module.exports = __webpack_public_path__ + \"static/media/red-check.de170854.svg\";","import React, { Component } from 'react';\nimport Subscribe from '../Subscribe';\nimport TopLevelStatus from '../TopLevelStatus';\nimport './header.scss';\nimport { ReactComponent as ExternalLink } from './assets/external-link.svg';\n\nclass Header extends Component {\n constructor(props) {\n super(props);\n\n const baseUrl = !!process && !!process.env && process.env.REACT_APP_STAGE === 'dev'\n ? 'http://localhost:3200'\n : 'https://assets.hyperping.io';\n this.state = {\n baseUrl,\n }\n }\n\n hasSubscriberFeature = () => {\n const { statuspage } = this.props;\n\n return !!statuspage.features\n && !!statuspage.features.subscribers\n && statuspage.features.subscribers === true;\n }\n \n hasSubscriberPhoneFeature = () => {\n const { statuspage } = this.props;\n\n return !!statuspage.features\n && !!statuspage.features.subscribersPhone\n && statuspage.features.subscribersPhone === true;\n }\n \n hasSubscriberSlackFeature = () => {\n const { statuspage } = this.props;\n\n return !!statuspage.features\n && !!statuspage.features.subscribersSlack\n && statuspage.features.subscribersSlack === true;\n }\n\n isOriginalCoverColor = () => this.props.statuspage.coverColor.toLowerCase().includes('fafbfc');\n\n render() {\n const { statuspage, incident, topLevelStatus, hasLoaded } = this.props;\n const hasStatuspageLoaded = !!statuspage;\n\n return(\n
\n {hasStatuspageLoaded &&
\n \n {!!statuspage.image && !!statuspage.image.length &&\n \"Logo\"\n }\n \n \n {!!statuspage.homepage && \n Go to {statuspage.name}\n }\n {this.hasSubscriberFeature() && }\n \n
}\n {hasLoaded && }\n
\n )\n }\n}\n\nexport default Header;\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import React, { Component } from 'react';\nimport Wrench from '../TopLevelStatus/assets/wrench';\nimport up from './assets/ok-status-icon.svg';\nimport down from './assets/red-check.svg';\nimport NotOk from './assets/NotOk';\nimport Cone from '../TopLevelStatus/assets/cone-full';\nimport Plus from './assets/plus';\nimport Minus from './assets/minus';\n\nconst getAlias = (service) => {\n return (!!service.alias && !!service.alias.length) ? service.alias : service.domain;\n}\n\nconst GetRow = ({ service, onClick, isExpanded }) => (\n <>\n
\n {service.isGroup && \n {isExpanded && }\n {!isExpanded && }\n }\n {getAlias(service)}\n {(service.status === 'up' || service.status === 'available') && !isExpanded && Operational}\n {(service.status === 'incident' || service.status === 'partialoutage') && Service issue}\n {(service.status === 'outage' || service.status === 'down') && Service outage}\n {service.status === 'maintenance' && Under maintenance}\n
\n {!isExpanded &&
\n {(service.status === 'up' || service.status === 'available') && \"Service}\n {(service.status === 'incident' || service.status === 'partialoutage') && }\n {(service.status === 'outage' || service.status === 'down') && }\n {service.status === 'maintenance' && }\n
}\n \n);\n\nconst getIndex = (services, index) => {\n if (index === 0 && services.length > 1) {\n return 'first';\n } else if ((index + 1) === services.length) {\n return 'last';\n } else {\n return '';\n }\n}\n\nconst GetServices = ({ services, onClick, collapsed }) => (\n services.map((service, index) => (\n
\n
service.isGroup && onClick(index)} isExpanded={collapsed.includes(index)} />
\n {collapsed.includes(index) && service.isGroup && service.services.map(s =>
)}\n
\n ))\n)\n\nconst WhiteBoxHeader = ({ services }) => {\n const [collapsed, setCollapsed] = React.useState([]);\n\n const toggleGroup = (index) => {\n const indexRemove = collapsed.findIndex(c => c === index);\n\n if (indexRemove === -1) {\n setCollapsed([...collapsed, index]);\n } else {\n const newCollapsed = collapsed;\n newCollapsed.splice(indexRemove, 1);\n setCollapsed([...newCollapsed]);\n }\n }\n\n return(
);\n}\n\nexport default WhiteBoxHeader;\n","import React, { Component } from 'react'; \nimport './uptime.scss';\nimport { Area, defs, AreaChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts';\nimport { formatDateAndTime, getHourAndMinute} from '../utils';\n\nconst getTimeLabel = date => formatDateAndTime(date);\n\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];\nconst getHumanDate = value => {\n const today = new Date(value)\n const year = today.getFullYear();\n const month = months[today.getMonth()];\n const day = today.getDate();\n return `${month} ${day > 9 ? '' + day: '0' + day}, ${year}`;\n}\n\nclass Uptime extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n data: props.data,\n color: props.color\n };\n }\n\n CustomTooltip = (payload) => {\n let hour\n let name\n let date\n if (!!payload.payload.length) {\n name = payload.payload[0].name;\n hour = payload.payload[0].payload.hour;\n date = payload.payload[0].payload.ts;\n } else {\n return null;\n }\n\n const valueFormat = name === 'uptime' ? '%' : 'ms';\n const valueName = name === 'uptime' ? 'Uptime:' : 'Reponse time:';\n\n return (\n
\n
{(this.props.labels === 'hours') ? getTimeLabel(date) : getHumanDate(hour)}
\n {!!payload.payload.length &&
{valueName} {payload.payload[0].value}{valueFormat}
}\n
\n )\n }\n\n render() {\n const { data, labels } = this.props;\n const dataset = data.map((row, index) => {\n if (data.length === index + 1) {\n if (labels === 'day' && row.skeleton === true) {\n row.uptime = data[index - 1].uptime;\n row.elapsedTime = data[index - 1].elapsedTime;\n }\n }\n if (labels === 'hours') {\n row.time = getHourAndMinute(row.date);\n }\n return row;\n });\n\n return(\n \n \n `${name}${labels === 'hours' ? ':00' : ''}`}\n />\n {\n if (label >= 1000) {\n if (label % 1000 === 0) {\n return `${(label / 1000).toFixed(0)}s`\n } else {\n return `${(label / 1000).toFixed(1)}s`\n }\n }\n return label;\n }} width={30} tick={{ fill: '#999', fontSize: 11 }} stroke=\"#efefef\" />\n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default Uptime;\n","import React, { Component } from 'react';\nimport Uptime from '../Uptime';\nimport * as moment from 'moment-timezone';\n\nconst months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];\nconst getLabelDate = (date) => {\n const day = date.getDate();\n const month = months[date.getMonth()];\n return `${month} ${day}`;\n}\n\nconst compUptime = (rows) => {\n const pings = rows.filter(row => row.uptime !== null && row.elapsedTime !== null);\n const uptime = (pings.reduce((acc, day) => acc + day.uptime, 0) / pings.length).toFixed(3);\n return uptime;\n}\n\nconst compElapsedTime = (rows) => {\n const pings = rows.filter(row => row.uptime !== null && row.elapsedTime !== null);\n const elapsedTime = (pings.reduce((acc, day) => acc + day.elapsedTime, 0) / pings.length).toFixed(0);\n return elapsedTime;\n}\n\nclass WhiteBoxStats extends Component {\n constructor(props) {\n super(props);\n\n let color = props.color;\n\n if (!color.length) {\n color = '#5fead7';\n } else if (color[0] !== '#') {\n color = '#' + color;\n }\n\n this.state = {\n color\n };\n }\n\n addHourlyPingsToDailyRows(todayOrYesterday, alias) {\n const services = this.flattenServices();\n const service = services.find(s => s.alias === alias);\n const pings = service.pings;\n const day = todayOrYesterday === 'today' ? moment().toDate() : moment().subtract(1, 'days').toDate();\n const todayPings = pings.filter(ping => moment(ping.date).isSame(day, 'day'));\n const uptime = compUptime(todayPings);\n const elapsedTime = compElapsedTime(todayPings);\n \n const snapshot = {\n date: day,\n hour: day,\n day: getLabelDate(day),\n uptime: Number(uptime),\n elapsedTime: Number(elapsedTime),\n skeleton: false,\n value: day\n }\n return snapshot;\n }\n\n flattenServices() {\n const { services } = this.props;\n\n const allServices = [];\n services.forEach((service) => {\n if (!service.isGroup) {\n allServices.push(service);\n } else {\n service.services.forEach((s) => {\n allServices.push(s);\n });\n }\n });\n\n return allServices;\n }\n \n getGraphs(labels, nbRows) {\n const services = this.flattenServices();\n const graphs = [];\n\n const servicesWithGraphs = services.filter(service => service.showResponseTime || service.showUptime);\n\n if (labels === 'days' && !servicesWithGraphs.every(service => !!service.snapshots)) {\n return [];\n }\n\n services.forEach((service) => {\n let data;\n if (labels === 'hours') {\n data = service.pings;\n } else if (labels === 'days') {\n if (!!service.snapshots) {\n data = service.snapshots;\n } else {\n return;\n }\n }\n \n let meanUptime = null;\n let meanElapsedTime = null;\n let filledDays = [];\n if (labels === 'hours') {\n filledDays = data;\n } else if (labels === 'days') {\n filledDays = data.slice(0, nbRows - 1);\n filledDays.forEach((row) => {\n row.skeleton = false;\n row.day = getLabelDate(new Date(row.date));\n row.value = new Date(row.date);\n row.hour = new Date(row.date);\n row.date = new Date(row.date);\n });\n filledDays.reverse();\n const yesterday = moment().subtract(1, 'days');\n const hasYesterday = filledDays.find(day => moment(day.date).isSame(yesterday, 'day'));\n if (!hasYesterday) {\n filledDays.push(this.addHourlyPingsToDailyRows('yesterday', service.alias));\n if (filledDays.length >= 7) {\n filledDays.shift();\n }\n }\n const today = moment().toDate();\n const hasToday = filledDays.find(day => moment(day.date).isSame(today, 'day'));\n if (!hasToday) {\n filledDays.push(this.addHourlyPingsToDailyRows('today', service.alias));\n if (filledDays.length >= 7) {\n filledDays.shift();\n }\n }\n }\n\n meanUptime = compUptime(filledDays);\n meanElapsedTime = compElapsedTime(filledDays);\n\n const payload = {\n name: service.alias || service.domain,\n alias: service.alias,\n data: filledDays,\n hasUptime: service.showUptime,\n hasResponseTime: service.showResponseTime,\n uptime: meanUptime,\n responseTime: meanElapsedTime\n };\n\n graphs.push(payload);\n });\n\n return graphs;\n }\n\n getStats(selectedTimeline) {\n const labels = selectedTimeline > 1 ? 'days' : 'hours';\n const nbRows = selectedTimeline === 1 ? 289 : selectedTimeline;\n const graphsList = this.getGraphs(labels, nbRows);\n \n const graphs = graphsList.filter(graph => graph.hasUptime || graph.hasResponseTime);\n return graphs.map((graph, index) =>\n
\n {graph.hasUptime && (
\n
\n
{graph.name} Uptime
\n
{graph.uptime}%
\n
\n \n {graph.hasResponseTime &&
}\n
)\n }\n\n {graph.hasResponseTime && (
\n
\n
{graph.name} Response time
\n
{graph.responseTime}ms
\n
\n \n
)\n }\n
\n );\n }\n\n render() {\n const { selectedTimeline } = this.props;\n\n return(\n !!this.state.color.length && this.getStats(selectedTimeline)\n );\n }\n}\n\nexport default WhiteBoxStats;\n","import React, { Component } from 'react';\n\nclass TimelineSelector extends Component {\n constructor(props) {\n super(props);\n\n const items = props.items;\n items.reverse();\n\n this.state = {\n items\n }\n }\n render() {\n const { selected, onClick, hasSnapshots } = this.props;\n\n return(\n
\n {this.state.items.map(item => {\n if (!hasSnapshots && item.value > 1) {\n return null;\n }\n return(\n onClick(item.value)}\n >\n {item.name}\n )\n }\n )}\n
\n )\n }\n}\n\nexport default TimelineSelector;\n","import React, { Component } from 'react';\nimport './styles.scss';\nimport Notification from '../Notification';\nimport { getBaseUrl } from '../utils';\n\nconst baseUrl = getBaseUrl();\n\nclass ProtectedPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n password: '',\n wrongPassword: false,\n image: '',\n showNotification: false,\n isLoading: false\n }\n }\n\n componentDidMount() {\n this.setFavicon();\n this.setTabName();\n }\n\n setFavicon() {\n const { favicon } = this.props.data;\n\n if (!!favicon) {\n document.querySelector(\"link[rel='shortcut icon']\").href = favicon;\n }\n }\n\n setTabName() {\n document.title = (this.props.data.name || 'System') + ' Status';\n }\n\n onChangePassword = (e) => {\n this.setState({ password: e.target.value });\n }\n\n submit = (e) => {\n e.preventDefault();\n this.setState({ isLoading: true });\n fetch(`${baseUrl}/v1/public/statuspage/authenticate`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n credentials: 'include',\n body: JSON.stringify({\n password: this.state.password,\n hostname: window.location.hostname\n })\n }).then(response => response.json())\n .then(response => {\n this.setState({ isLoading: false });\n if (response.message === 'Wrong password') {\n this.setState({ showNotification: true });\n } else {\n window.location.reload();\n }\n });\n }\n \n closeNotification = () => {\n this.setState({ showNotification: false });\n }\n\n render() {\n const { password, isLoading } = this.state;\n const { image, name } = this.props.data;\n\n return(\n
\n
\n
\n {!!image &&\n
\"Logo\"
\n }\n
{name} Service Status
\n
\n \n
\n \n \n {this.state.showNotification &&\n \n }\n
\n );\n }\n}\n\nexport default ProtectedPage;\n","import React, { Component } from 'react';\n\nclass PoweredBy extends Component {\n getHostname() {\n const { hostname } = window.location;\n return hostname;\n }\n\n render() {\n const hostname = this.getHostname();\n\n if (hostname === 'status.mysocket.io') return <>

;\n\n return (\n
\n Powered by Hyperping\n
\n )\n }\n}\n\nexport default PoweredBy;","import { getBaseUrl } from '../utils';\n\nconst fetchWrapper = (endpoint, method = 'GET', params) => {\n const urlParams = { hostname: window.location.hostname, ...params };\n return fetch(getBaseUrl() + endpoint + '?' + new URLSearchParams(urlParams), {\n method,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n credentials: 'include'\n })\n .then((response) => response.json());\n}\n\nconst getIncidents = () => fetchWrapper('/v2/statuspages/incidents');\nconst getIncident = (uuid) => fetchWrapper('/v2/statuspages/incident', 'GET', { uuid });\nconst getSnapshots = () => fetchWrapper('/v2/services-snapshots');\nconst getPings = () => fetchWrapper('/v2/services-pings');\nconst getStatuspage = () => fetchWrapper('/v2/services');\n\nexport default {\n getIncidents,\n getIncident,\n getSnapshots,\n getPings,\n getStatuspage\n}\n","import React, { Component } from 'react';\nimport Header from './Header';\nimport WhiteBoxHeader from './WhiteBoxHeader';\nimport WhiteBoxStats from './WhiteBoxStats';\nimport TimelineSelector from './TimelineSelector';\nimport Notification from './Notification';\nimport ProtectedPage from './ProtectedPage';\nimport './App.scss';\nimport { getBaseUrl, setFavicon } from './utils';\nimport { Link, withRouter } from 'react-router-dom';\nimport PoweredBy from './PoweredBy';\nimport API from './API';\n\nconst baseUrl = getBaseUrl();\n \nclass App extends Component {\n constructor(props) {\n super(props);\n\n let showNotification = false;\n let notificationMessage = '';\n if (!!this.props.location.search) {\n const { search } = this.props.location;\n showNotification = search.includes('confirm=true') || search.includes('unsubscribe=true');\n \n if (search.includes('confirm=true')) {\n notificationMessage = 'You successfully confirmed your subscription to this status page';\n } else if (search.includes('unsubscribe=true')) {\n notificationMessage = 'You successfully unsubscribed to this status page';\n }\n }\n\n this.state = {\n statusPageId: null,\n environment: '',\n loading: false,\n services: [],\n statuspage: {},\n timelineItems: [\n { value: 1, name: '24 hours'},\n { value: 8, name: '1 week'},\n { value: 31, name: '1 month'},\n { value: 91, name: '3 months'},\n { value: 365, name: '12 months'},\n ],\n selectedTimeline: 1,\n baseUrl,\n color: '',\n showNotification,\n notificationMessage,\n protected: false,\n protectedPageData: {},\n incidents: [],\n incident: {},\n topLevelStatus: {},\n hasLoaded: false,\n hasLoadedPings: false,\n hasLoadedSnapshots: false\n };\n }\n\n componentDidMount() {\n this.fetchStatuspage(this.props.history.location.response);\n }\n\n setTabName() {\n document.title = (this.state.statuspage.name || 'System') + ' Status';\n }\n\n fetchSnapshots() {\n if (this.state.protected) return;\n API.getSnapshots()\n .then((response) => {\n const services = this.state.services;\n\n response.forEach(service => {\n if (!!service && !!service.alias && service.snapshots && service.snapshots.length > 0) {\n const index = services.findIndex(s => s.alias === service.alias);\n if (index !== -1) {\n if (!!services[index]) {\n services[index].snapshots = service.snapshots;\n }\n } else {\n let groupIndex = -1;\n let serviceIndex = -1;\n services.forEach((s, i) => {\n if (s.isGroup) {\n const indexGroup = s.services.findIndex(sr => sr.alias === service.alias);\n if (indexGroup !== -1) {\n groupIndex = indexGroup;\n serviceIndex = i;\n }\n }\n });\n if (!!services[serviceIndex]) {\n services[serviceIndex].services[groupIndex].snapshots = service.snapshots;\n }\n }\n }\n if (!service.snapshots) {\n service.snapshots = [];\n }\n });\n this.setState({ services, hasLoadedSnapshots: true });\n });\n }\n\n fetchPings() {\n if (this.state.protected) return;\n API.getPings()\n .then((response) => {\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n const services = this.state.services;\n\n response.forEach(service => {\n if (service.pings.length > 0) {\n const index = this.state.services.findIndex(s => s.alias === service.alias);\n if (index !== -1) {\n if (!!services[index] && !!services[index].pings) {\n services[index].pings = service.pings;\n }\n } else {\n let groupIndex = -1;\n let serviceIndex = -1;\n services.forEach((s, i) => {\n if (s.isGroup) {\n const indexGroup = s.services.findIndex(sr => sr.alias === service.alias);\n if (indexGroup !== -1) {\n groupIndex = indexGroup;\n serviceIndex = i;\n }\n }\n });\n if (!!services[serviceIndex]) {\n services[serviceIndex].services[groupIndex].pings = service.pings;\n }\n }\n }\n });\n this.setState({ services, hasLoadedPings: true });\n this.fetchSnapshots();\n });\n }\n\n fetchStatuspage(response) {\n if (!!response) {\n setFavicon(response);\n this.setState({\n services: response.services,\n incident: response.ongoingIncident,\n statuspage: response.statuspage,\n topLevelStatus: response.topLevelStatus,\n hasLoaded: true\n });\n this.fetchPings();\n } else {\n this.setState({ loading: true });\n API.getStatuspage()\n .then((response) => {\n setFavicon(response);\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n return response;\n })\n .then((response) => {\n this.setState({\n services: response.services,\n incident: response.ongoingIncident,\n statuspage: response.statuspage,\n topLevelStatus: response.topLevelStatus,\n hasLoaded: true\n }, () => setFavicon(response.statuspage));\n this.fetchPings();\n });\n }\n }\n\n handleTimelineSelector = (value) => {\n const selectedTimeline = parseInt(value, 10);\n this.setState({ selectedTimeline });\n }\n\n hasSnapshotsLoaded() {\n const services = this.state.services;\n const servicesWithGraphs = services.filter(service => service.isResponseTimeSelected || service.isUptimeSelected);\n const hasSnapshots = servicesWithGraphs.every(service => !!service.snapshots);\n if (!hasSnapshots) {\n return false;\n }\n const hasLoaded = servicesWithGraphs.every(service => !!service.snapshots.length);\n return hasLoaded;\n }\n\n closeNotification = () => {\n this.setState({ showNotification: false });\n }\n\n hasAtLeastOneMetric = () => {\n let hasAtLeastOne = false;\n\n for (const service of this.state.services) {\n if (service.showUptime || service.showResponseTime) {\n hasAtLeastOne = true;\n }\n\n if (!!service.services && service.services.length) {\n for (const s of service.services) {\n if (s.showUptime || s.showResponseTime) {\n hasAtLeastOne = true;\n }\n }\n }\n }\n\n return hasAtLeastOne;\n }\n\n render() {\n if (this.state.protected) {\n return (\n \n )\n }\n\n const { incident, topLevelStatus, statuspage, hasLoaded } = this.state;\n\n return (\n
\n {this.state.showNotification && }\n
\n\n {!!this.state.services.length &&\n \n }\n\n {this.state.hasLoadedPings && !!this.state.services.length && this.hasAtLeastOneMetric() &&\n this.handleTimelineSelector(event)}\n selected={this.state.selectedTimeline}\n hasSnapshots={this.hasSnapshotsLoaded()}\n />\n }\n\n {this.state.hasLoadedPings && !!this.state.services.length && !!statuspage &&\n \n }\n\n {hasLoaded &&
See incident history
}\n\n {!!this.state.services.length &&\n
\n \n
\n }\n
\n );\n }\n}\n\nexport default withRouter(App);\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import React from 'react';\nimport { Link, withRouter } from 'react-router-dom';\nimport * as moment from 'moment-timezone';\n\nimport {\n getEstimatedDuration,\n getMaintenanceStatus,\n formatText,\n getDateRange } from '../utils/index.js';\n\nimport './styles.scss';\nimport Cone from '../TopLevelStatus/assets/cone'\nimport NotOk from '../TopLevelStatus/assets/notok-empty'\nimport Wrench from '../TopLevelStatus/assets/wrench';\n\nconst GetSpan = ({ children }) => ({children});\n\nconst isJSON = (str) => {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n\nconst getText = (text) => {\n if (isJSON(text)) {\n text = JSON.parse(text);\n if (!!text.en) return text.en;\n const [first] = Object.keys(text)\n return first;\n }\n return text;\n}\n\nclass Incidents extends React.Component {\n getBackLink = () => {\n const { isIncidentPage } = this.props;\n const backlink = isIncidentPage ? `/history` : '/';\n\n return backlink;\n }\n\n goToIncidentPage(incidentId) {\n if (this.props.isIncidentPage) {\n return;\n }\n\n const { pathname } = this.props.location;\n\n if (pathname.includes('/history')) {\n this.props.history.push(`${pathname}/${incidentId}`)\n }\n }\n\n capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n render() {\n let { incidents, statuspage } = this.props;\n const { isIncidentPage } = this.props;\n const Tag = isIncidentPage ? GetSpan : Link;\n\n return(\n
\n {!isIncidentPage && History}\n {isIncidentPage === true && Updates}\n \n Back\n \n
\n\n {incidents.length <= 0 &&
No incidents reported.
}\n {incidents.map((incident, index) => (\n \n
\n
{getDateRange(incident)}
\n
\n
\n {!!incident.type && incident.type === 'incident' && }\n {!!incident.type && incident.type === 'outage' && }\n {!!incident.type && incident.type === 'maintenance' && }\n {getText(incident.title)}\n
\n {(incident.type === 'maintenance') &&
{getEstimatedDuration(incident)}
}\n {incident.updates.map((update, index) => (\n
\n {!!update && !!update.text &&\n <>\n
{incident.type === 'maintenance' ? getMaintenanceStatus(incident.date, incident.endDate, index) : update.type}
\n
\n \n }\n
{moment(update.UTCTime).format('MMM DD, h:mm A')}
\n
\n ))}\n \n
\n {!!incident.affectedComponents && !!incident.affectedComponents.length > 0 &&
\n Affected services: {incident.affectedComponents.map((c, index) => ({c.name}))}\n
}\n
\n \n ))}\n
\n );\n }\n}\n\nexport default withRouter(Incidents);\n","import React from 'react';\nimport IncidentsComponent from './Incidents/index.jsx';\nimport ProtectedPage from './ProtectedPage';\nimport { withRouter } from 'react-router-dom';\nimport Header from './Header';\nimport PoweredBy from './PoweredBy';\nimport './App.scss';\nimport API from './API';\nimport { setFavicon } from './utils/index.js';\n\nclass Incidents extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n incident: props.history.location.incident,\n incidents: [],\n statuspage: props.history.location.statuspage,\n protected: false,\n protectedPageData: {},\n topLevelStatus: props.history.location.topLevelStatus,\n response: {},\n hasLoaded: !!props.history.location.incident\n }\n }\n\n componentDidMount() {\n this.fetchStatuspage();\n }\n\n fetchStatuspage = () => {\n API.getStatuspage()\n .then((response) => {\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n return response;\n })\n .then((response) => {\n this.setState({\n incident: response.ongoingIncident,\n statuspage: response.statuspage,\n topLevelStatus: response.topLevelStatus,\n hasLoaded: true,\n response\n }, () => setFavicon(response.statuspage));\n });\n\n API.getIncidents()\n .then((response) => {\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n return response;\n })\n .then((incidents) => {\n this.setState({ incidents });\n });\n }\n\n setTabName() {\n document.title = (this.state.statuspage.name || 'System') + ' Incidents';\n }\n\n hasFavicon() {\n return !!this.state.statuspage.favicon && this.state.statuspage.favicon.length\n }\n\n render() {\n if (this.state.protected) {\n return (\n \n )\n }\n\n const { statuspage, incident, incidents, topLevelStatus, hasLoaded, response } = this.state;\n if (!statuspage) {\n return null;\n }\n\n return(\n
\n
\n\n {!!incidents && incidents.length > 0 && }\n\n
\n
\n );\n }\n}\n\nexport default withRouter(Incidents);\n","import React from 'react';\nimport IncidentsComponent from './Incidents/index.jsx';\nimport Header from './Header';\nimport './App.scss';\nimport ProtectedPage from './ProtectedPage';\nimport { setFavicon } from './utils';\nimport { withRouter } from 'react-router-dom';\nimport PoweredBy from './PoweredBy';\nimport API from './API';\n\n\nclass Incident extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n incident: props.history.location.incident,\n statuspage: props.history.location.statuspage,\n incidentId: props.match.params.incidentId,\n protected: false,\n protectedPageData: {}\n }\n }\n\n componentDidMount() {\n this.fetchStatuspage();\n this.fetchIncident();\n }\n\n fetchStatuspage = () => {\n if (!!this.state.statuspage) {\n this.setTabName();\n return null;\n }\n\n API.getStatuspage()\n .then((response) => {\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n return response;\n })\n .then((response) => {\n this.setState({\n statuspage: response.statuspage,\n response\n }, () => setFavicon(response.statuspage));\n });\n }\n\n\n fetchIncident() {\n if (!!this.state.incident) {\n return;\n }\n\n API.getIncident(this.state.incidentId)\n .then((response) => {\n if (response.message === 'Unauthorized') {\n this.setState({ protected: true, protectedPageData: response.data });\n return Promise.reject();\n }\n return response;\n })\n .then((response) => {\n this.setState({ incident: response.incident, });\n });\n }\n\n setTabName() {\n document.title = this.state.statuspage.name + ' Incidents';\n }\n\n hasFavicon() {\n return !!this.state.statuspage.favicon && this.state.statuspage.favicon.length;\n }\n\n render() {\n if (this.state.protected) {\n return ()\n }\n\n const { incident, statuspage } = this.state;\n\n if (!statuspage) {\n return null;\n }\n\n return (\n
\n
\n\n {!!incident\n && \n }\n
\n \n
\n
\n );\n }\n}\n\nexport default withRouter(Incident);\n","import React from 'react';\nimport { Redirect } from 'react-router-dom';\nimport { getBaseUrl } from './utils';\nimport './App.scss';\n\nconst baseUrl = getBaseUrl();\n\nclass ConfirmSubscription extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n token: null,\n isConfirmed: false,\n redirect: false\n }\n }\n\n componentDidMount() {\n const { token } = this.props.match.params;\n\n this.setState({ token }, () => {\n this.confirmSusbcription();\n });\n }\n\n confirmSusbcription = () => {\n fetch(`${baseUrl}/v1/confirm-subscription?token=${this.state.token}`, {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n credentials: 'include'\n })\n .then(response => response.json())\n .then((response) => {\n this.setState({ isConfirmed: true, redirect: true });\n });\n }\n\n renderRedirect = () => {\n const { pathname } = this.props.location;\n let pathnameDestination = '/';\n if (pathname.includes('/public/')) {\n pathnameDestination = pathname.split('/confirm/')[0];\n }\n if (this.state.redirect) {\n return \n }\n }\n\n render() {\n return(\n
\n {this.renderRedirect()}\n {!this.isConfirmed && Confirming your subscription}\n
\n );\n }\n}\n\nexport default ConfirmSubscription;\n","import React from 'react';\nimport { Redirect } from 'react-router-dom';\nimport { getBaseUrl } from './utils';\nimport './App.scss';\n\nconst baseUrl = getBaseUrl();\n\nclass Unsubscribe extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n token: null,\n isUnsubscribed: false,\n redirect: false\n }\n }\n\n componentDidMount() {\n const { token } = this.props.match.params;\n\n this.setState({ token }, () => {\n this.confirmSusbcription();\n });\n }\n\n confirmSusbcription = () => {\n fetch(`${baseUrl}/v1/unsubscribe?token=${this.state.token}`)\n .then(response => response.json())\n .then((response) => {\n this.setState({ isUnsubscribed: true, redirect: true });\n });\n }\n\n renderRedirect = () => {\n const { pathname } = this.props.location;\n let pathnameDestination = '/';\n if (pathname.includes('/public/')) {\n pathnameDestination = pathname.split('/unsubscribe/')[0];\n }\n if (this.state.redirect) {\n return \n }\n }\n\n render() {\n return(\n
\n {this.renderRedirect()}\n {!this.isUnsubscribed && Unsubscribing}\n
\n );\n }\n}\n\nexport default Unsubscribe;\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 publicUrl = new URL(process.env.PUBLIC_URL, window.location);\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\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\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) {\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 if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\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(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Route, BrowserRouter as Router, Switch } from 'react-router-dom';\nimport './index.scss';\nimport App from './App';\nimport Incidents from './IncidentsPage';\nimport Incident from './IncidentPage';\nimport ConfirmSubscription from './ConfirmSubscriptionPage';\nimport Unsubscribe from './UnsubscribePage';\nimport { unregister } from './registerServiceWorker';\n\nconst routing = (\n \n \n \n \n \n \n \n \n \n);\n\nReactDOM.render(routing, document.getElementById('root'));\nunregister();\n","import React from 'react';\n\nimport './styles.scss';\n\nclass Notification extends React.Component {\n componentDidMount() {\n setTimeout(() => {\n this.props.closeNotification();\n }, 4500);\n }\n\n render() {\n return(\n
{this.props.message}
\n );\n }\n}\n\nexport default Notification;\n","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"Artboard\"}\n \n \n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import * as React from 'react';\nimport * as moment from 'moment-timezone';\n\nexport const formatDate = (rawDate) => {\n const date = new Date(rawDate);\n const formatted = moment(date).format('DD MMM YYYY');\n return formatted;\n}\n\nexport const formatDateAndTime = (rawDate) => {\n const date = new Date(rawDate);\n const formatted = moment(date).format('D MMM YYYY H:mm A');\n return formatted;\n}\n\nexport const getHourAndMinute = (rawDate) => {\n // 20:50\n const date = new Date(rawDate);\n const formatted = moment(date).format('HH:mm');\n return formatted;\n}\n\nexport const getTimeAgo = rawDate => moment(new Date(rawDate), 'YYYYMMDD').fromNow();\n\nexport const formatText = text => !!text && text.split('\\n').join('
');\n\nconst areDatesOnSameMonth = (latestDateRaw, oldestDateRaw) => {\n const latestDate = new Date(latestDateRaw);\n const oldestDate = new Date(oldestDateRaw);\n\n const formattedLatestDate = moment(latestDate).format('MMM');\n const formattedOldestDate = moment(oldestDate).format('MMM');\n return formattedLatestDate === formattedOldestDate;\n}\n\nconst areDatesOnSameDay = (latestDateRaw, oldestDateRaw) => {\n const latestDate = new Date(latestDateRaw);\n const oldestDate = new Date(oldestDateRaw);\n\n const latestDay = moment(latestDate).format('DD');\n const oldestDay = moment(oldestDate).format('DD');\n return { latestDay, oldestDay };\n}\n\nexport const getDateRange = (incident) => {\n const { updates } = incident;\n\n const latest = updates[0];\n if (!latest) {\n return moment(incident.date).format('DD MMM YYYY');\n }\n const oldest = updates[updates.length - 1];\n const aresameMonth = areDatesOnSameMonth(latest.UTCTime, oldest.UTCTime);\n const { latestDay, oldestDay } = areDatesOnSameDay(latest.UTCTime, oldest.UTCTime);\n if (aresameMonth && (latestDay === oldestDay)) {\n return formatDate(latest.UTCTime);\n }\n\n if (aresameMonth && (latestDay !== oldestDay)) {\n return `${oldestDay} - ${latestDay} ${moment(latest.UTCTime).format('MMM YYYY')}`;\n }\n\n if (!aresameMonth) {\n return `${oldestDay} ${moment(new Date(oldest.UTCTime)).format('MMM')} - ${latestDay} ${moment(new Date(latest.UTCTime)).format('MMM YYYY')}`;\n }\n}\n\nexport const isWithin24Hours = (dateRaw) => {\n const now = new Date();\n const hours = Math.abs(dateRaw - now) / 36e5;\n return hours <= 24;\n}\n\nexport const isUpcoming = (dateRaw) => {\n const now = new Date();\n return moment(dateRaw).isAfter(now);\n}\n\nconst getTimezone = () => moment.tz(moment.tz.guess()).format('z');\n\nconst getHourGrammar = (hour) => {\n if (hour > 1) {\n return ' hours';\n } else {\n return ' hour'\n }\n}\n\nconst getMinuteGrammar = (minute) => {\n if (minute > 1) {\n return 'minutes';\n } else {\n return 'minute'\n }\n}\n\nexport const getEstimatedDuration = (maintenance) => {\n const startDate = moment(maintenance.date);\n const startHumanDate = moment(maintenance.date).format('DD MMM h:mm A');\n const endDate = moment(maintenance.endDate);\n const endHumanDate = moment(maintenance.endDate).format('DD MMM h:mm A');\n\n const duration = moment.duration(endDate.diff(startDate));\n const hours = parseInt(duration.asHours());\n const minutes = parseInt(duration.asMinutes()) % 60;\n const timezone = getTimezone();\n\n const hasMinutes = minutes !== 0;\n const hasHours = hours !== 0;\n let humanDuration = `${hasHours ? (hours + getHourGrammar(hours)) : ''}`;\n if (hasHours && hasMinutes) {\n humanDuration += ` and ${minutes} ${getMinuteGrammar(minutes)}`\n } else if (hasMinutes) {\n humanDuration += `${minutes} ${getMinuteGrammar(minutes)}`\n }\n \n return (\n <>\n Estimated duration: {humanDuration}
\n{startHumanDate} {timezone} - {endHumanDate} {timezone}\n \n );\n}\n\nexport const getMaintenanceStatus = (startDate, endDate, index) => {\n if (index !== 0) {\n return;\n }\n\n const date = new Date();\n if (moment(date).isBetween(startDate, endDate)) {\n return 'In Progress';\n } else if (moment(date).isBefore(startDate)) {\n return 'Upcoming';\n } else if (moment(date).isAfter(endDate)) {\n return 'Completed'\n }\n}\n\nconst { hostname, protocol } = window.location;\n\nconst getProtocol = () => {\n // Only *.hyperping.io domains can be accessible without https\n // status.* domains are being redirected to https\n if (hostname.includes('.hyperping.io') && protocol === 'http:') {\n return 'https://';\n }\n if (!!process && !!process.env && process.env.REACT_APP_STAGE === 'dev') {\n return 'http://';\n }\n return 'https://';\n}\n\nconst devUrl = window.location.hostname;\n\nexport const getBaseUrl = () => !!process && !!process.env && process.env.REACT_APP_STAGE === 'dev'\n ? `http://${devUrl}:3011`\n : `${getProtocol()}api.hyperping.io`;\n\nexport const getHostname = () => process.env.REACT_APP_STAGE === 'dev' ? encodeURIComponent(`http://${devUrl}:3011`) : window.location.hostname;\n\nconst getIcon = (indicator) => {\n if (indicator === 'up') return '/static/media/check-ok.svg';\n if (indicator === 'down' || indicator === 'outage') return '/static/media/incident.svg';\n if (indicator === 'maintenance') return '/static/media/gear.svg';\n if (indicator === 'partialoutage') return '/static/media/incident.svg';\n if (indicator === 'incident') return '/static/media/incident.svg';\n}\n\nexport const setFavicon = (statuspage) => {\n if (!statuspage) {\n return;\n }\n const { favicon } = statuspage;\n if (!!statuspage && !!statuspage.name) document.title = statuspage.name + ' - System status';\n \n if (!!favicon && favicon.length) {\n document.querySelector(\"link[rel='shortcut icon']\").href = favicon;\n } else if (!!statuspage && !!statuspage.topLevelStatus) {\n document.querySelector(\"link[rel='shortcut icon']\").href = getIcon(statuspage.topLevelStatus.indicator);\n }\n}\n"],"sourceRoot":""}