{"version":3,"sources":["utils/index.js","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"],"names":["formatDateAndTime","rawDate","date","Date","moment","format","getHourAndMinute","getTimeAgo","fromNow","formatText","text","split","join","getDateRange","incident","updates","latest","oldest","length","aresameMonth","latestDateRaw","oldestDateRaw","latestDate","oldestDate","areDatesOnSameMonth","UTCTime","latestDay","oldestDay","areDatesOnSameDay","formatDate","getMinuteGrammar","minute","getEstimatedDuration","maintenance","hasMinutes","minutes","hasHours","hours","duration","startDate","startHumanDate","endDate","endHumanDate","timezone","guess","className","getMaintenanceStatus","index","isBetween","isBefore","isAfter","window","location","hostname","protocol","devUrl","getBaseUrl","process","REACT_APP_STAGE","includes","setFavicon","statuspage","favicon","document","querySelector","href","module","exports","_path","_polyline","_line","_extends","Object","assign","target","i","arguments","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","ref","d","points","x1","y1","x2","y2","ForwardRef","forwardRef","SvgComponent","fillRule","xmlns","TopLevelStatus","pathname","indicator","topLevelStatus","hasOngoingIncident","uuid","titleStatus","type","status","TopLevelIcon","UpIcon","NotOk","MaintenanceIcon","Cone","style","minWidth","dangerouslySetInnerHTML","__html","lastUpdateText","lastUpdateDate","isIncidentView","Link","to","lastIncidentDate","Component","withRouter","baseUrl","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","JSON","stringify","email","then","response","json","notificationMessage","message","showNotification","notificationType","toggle","test","isPhoneValid","onChangeEmail","value","toLowerCase","onChangePhone","closeNotification","isOriginalCoverColor","coverColor","getChannel","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","Header","hasSubscriberFeature","features","subscribers","subscribersPhone","subscribersSlack","hasLoaded","hasStatuspageLoaded","image","homepage","cx","cy","r","x","y","rx","ry","GetRow","service","isExpanded","display","isGroup","alias","domain","getAlias","up","getIndex","services","GetServices","collapsed","map","s","WhiteBoxHeader","React","useState","setCollapsed","indexRemove","c","newCollapsed","splice","months","Uptime","CustomTooltip","payload","hour","ts","valueFormat","valueName","labels","getTimeLabel","today","year","getFullYear","month","getMonth","day","getDate","getHumanDate","data","dataset","row","skeleton","uptime","elapsedTime","time","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","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","e","password","preventDefault","credentials","reload","wrongPassword","setTabName","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","str","charAt","Tag","update","affectedComponents","Incident","match","fetchIncident","isHomePage","ConfirmSubscription","confirmSusbcription","token","isConfirmed","redirect","renderRedirect","pathnameDestination","Redirect","Unsubscribe","isUnsubscribed","Boolean","routing","Switch","Route","exact","path","component","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister","setTimeout"],"mappings":"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","file":"static/js/main.4e0e5a65.chunk.js","sourcesContent":["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 hasMinutes = maintenance.minutes !== 0;\n const hasHours = maintenance.hours !== 0;\n let duration = `${hasHours ? (maintenance.hours + getHourGrammar(maintenance.hours)) : ''}`;\n if (hasHours && hasMinutes) {\n duration += ` and ${maintenance.minutes} ${getMinuteGrammar(maintenance.minutes)}`\n } else if (hasMinutes) {\n duration += `${maintenance.minutes} ${getMinuteGrammar(maintenance.minutes)}`\n }\n\n const startDate = new Date(maintenance.date);\n const startHumanDate = moment(startDate).format('DD MMM h:mm A');\n const endDate = new Date(maintenance.endDate);\n const endHumanDate = moment(endDate).format('DD MMM h:mm A');\n\n const timezone = getTimezone();\n \n return (\n <>\n Estimated duration: {duration}
\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}:3000`\n : `${getProtocol()}app.hyperping.io` \n\nexport const getHostname = () => process.env.REACT_APP_STAGE === 'dev' ? encodeURIComponent(`http://${devUrl}:3000`) : window.location.hostname;\n\nexport const setFavicon = (statuspage) => {\n if (!statuspage) {\n return;\n }\n const { favicon } = statuspage;\n\n if (!!favicon && favicon.length) {\n document.querySelector(\"link[rel='shortcut icon']\").href = favicon;\n }\n}\n","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\nfunction _extends() { _extends = Object.assign || 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, [\"svgRef\", \"title\"]);\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\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 ? incident.title : 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}/api/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://app.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}/api/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 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('/api/v2/statuspages/incidents');\nconst getIncident = (uuid) => fetchWrapper('/api/v2/statuspages/incident', 'GET', { uuid });\nconst getSnapshots = () => fetchWrapper('/api/v2/services-snapshots');\nconst getPings = () => fetchWrapper('/api/v2/services-pings');\nconst getStatuspage = () => fetchWrapper('/api/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 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 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\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 {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}/api/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}/api/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"],"sourceRoot":""}