github-up 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin/cli.mjs CHANGED
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
- import{ParseError as e,cli as t,command as n,flag as r,osc8 as i}from"@kjanat/dreamcli";import{createColors as a}from"ansispeck";import{spawn as o,spawnSync as s}from"node:child_process";import{existsSync as c,mkdtempSync as ee,readFileSync as te,rmSync as ne}from"node:fs";import{tmpdir as re}from"node:os";import{join as l,win32 as ie}from"node:path";import{setTimeout as u}from"node:timers/promises";import{argv as ae,platform as oe,stdout as se}from"node:process";import{createNodeAdapter as ce}from"@kjanat/dreamcli/runtime";var le=`github-up`,d=`0.1.1`,ue=`Is GitHub down? Probably...`,f=`https://github-up.kjanat.dev`,de={type:`git`,url:`git+https://github.com/kjanat/github-up.git`};const p=[`github`,`downdetector`],m={github:`GitHub`,downdetector:`Downdetector`},h=[`actions`,`api`,`codespaces`,`copilot`,`git`,`issues`,`packages`,`pages`,`pr`,`webhooks`],fe={actions:/\bactions\b/i,api:/\bapi\b/i,codespaces:/\bcodespaces\b/i,copilot:/\bcopilot\b/i,git:/\bgit\b/i,issues:/\bissues\b/i,packages:/\bpackages\b/i,pages:/\bpages\b/i,pr:/\bpull requests?\b/i,webhooks:/\bwebhooks?\b/i},pe=/\b(?:all|many|most|multiple|several|some|various)\s+(?:github\s+)?(?:components|services|systems)\b/i;function g(e){return pe.test(e)}function _(e,t){let n=[];for(let r of t)fe[r].test(e)&&n.push(r);return n}function v(e,t){return t.size>0&&(_(e,t).length>0||g(e))}const y={none:0,minor:1,major:2,critical:2,unavailable:21},b=`https://www.githubstatus.com`,x=`https://downdetector.com/status/github/`,S=[`google-chrome-stable`,`google-chrome`,`chromium`,`brave`,`microsoft-edge-stable`,`microsoft-edge`],me=[`chrome.exe`,`msedge.exe`,`brave.exe`],he=[[`Google`,`Chrome`,`Application`,`chrome.exe`],[`Microsoft`,`Edge`,`Application`,`msedge.exe`],[`BraveSoftware`,`Brave-Browser`,`Application`,`brave.exe`],[`Chromium`,`Application`,`chrome.exe`]],ge=[`ProgramFiles`,`ProgramFiles(x86)`,`LOCALAPPDATA`],_e=[`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`,`/Applications/Brave Browser.app/Contents/MacOS/Brave Browser`,`/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`,`/Applications/Chromium.app/Contents/MacOS/Chromium`];function C(t,n){return r=>{let i=[];for(let a of String(r).split(`,`)){let r=a.trim();if(r.length===0)continue;let o=t.find(e=>e===r);if(o===void 0)throw new e(`Invalid value '${r}' for flag --${n}. Allowed: ${t.join(`, `)}`,{code:`INVALID_VALUE`,details:{flag:n,input:`--${n}`,value:r,allowed:t}});i.push(o)}return i}}const ve=C(p,`source`),ye=C(h,`component`),w=r.boolean().alias(`q`).describe(`Silent; exit code only`),T=r.custom(e=>new URL(String(e))).alias(`github-status-base`,{hidden:!0}).alias(`base`).alias(`b`).default(new URL(b)).env(`GITHUB_UP_GITHUB_STATUS_BASE`).describe(`Override GitHub status page base URL`),be=r.array(r.custom(ve)).alias(`s`).default([[...p]]).env(`GITHUB_UP_SOURCE`).env(`GITHUB_UP_SOURCES`).describe(`Data source(s) to check`),E=r.string().env(`GITHUB_UP_CHROME`).describe(`Path to a Chrome/Chromium binary`),xe=r.array(r.custom(ye)).alias(`c`).describe(`Only report incidents/components mentioning these component(s)`),D={actions:r.boolean().describe(`Shortcut for --component actions`),api:r.boolean().describe(`Shortcut for --component api`),codespaces:r.boolean().describe(`Shortcut for --component codespaces`),copilot:r.boolean().describe(`Shortcut for --component copilot`),git:r.boolean().describe(`Shortcut for --component git`),issues:r.boolean().alias(`issue`).describe(`Shortcut for --component issues`),packages:r.boolean().describe(`Shortcut for --component packages`),pages:r.boolean().describe(`Shortcut for --component pages`),pr:r.boolean().alias(`prs`).describe(`Shortcut for --component pr`),webhooks:r.boolean().describe(`Shortcut for --component webhooks`)};function O(e){let t=new Set(e.component.flat());for(let n of h)e[n]&&t.add(n);return t}function Se(e){return[...new Set(e.flat())]}function Ce(e){return{none:e.green,minor:e.yellow,major:e.red,critical:e.red}}function we(e,t){return e.indicator===`unavailable`?t.dim:Ce(t)[e.indicator]}function Te(e){return e.source===`github`?b:x}function k(e,t,n){if(n.length!==0){e.push(` ${t}:`);for(let t of n)e.push(` - ${t}`)}}function A(e,t){let n=a(t),r=we(e,n),i=[n.link(Te(e),n.underline(n.bold(r(m[e.source]))))];if(e.indicator===`unavailable`){let t=e.summaryText??`unknown error`;return i.push(` ${r(`Unavailable: ${t}`)}`),i.join(`
2
+ import{argv as e,platform as t}from"node:process";import{ParseError as n,cli as r,command as i,flag as a,osc8 as o,packageRepositoryUrl as s}from"@kjanat/dreamcli";import{createColors as c}from"ansispeck";import{spawn as l,spawnSync as u}from"node:child_process";import{existsSync as d,mkdtempSync as ee,readFileSync as te,rmSync as ne}from"node:fs";import{tmpdir as re}from"node:os";import{join as f,win32 as ie}from"node:path";import{setTimeout as p}from"node:timers/promises";import{createAdapter as ae}from"@kjanat/dreamcli/runtime";const m=[`github`,`downdetector`],h={github:`GitHub`,downdetector:`Downdetector`},g=[`actions`,`api`,`codespaces`,`copilot`,`git`,`issues`,`packages`,`pages`,`pr`,`webhooks`],oe={actions:/\bactions\b/i,api:/\bapi\b/i,codespaces:/\bcodespaces\b/i,copilot:/\bcopilot\b/i,git:/\bgit\b/i,issues:/\bissues\b/i,packages:/\bpackages\b/i,pages:/\bpages\b/i,pr:/\bpull requests?\b/i,webhooks:/\bwebhooks?\b/i},se=/\b(?:all|many|most|multiple|several|some|various)\s+(?:github\s+)?(?:components|services|systems)\b/i;function _(e){return se.test(e)}function v(e,t){let n=[];for(let r of t)oe[r].test(e)&&n.push(r);return n}function y(e,t){return t.size>0&&(v(e,t).length>0||_(e))}const b={none:0,minor:1,major:2,critical:2,unavailable:21},x=`https://www.githubstatus.com`,S=`https://downdetector.com/status/github/`,C=[`google-chrome-stable`,`google-chrome`,`chromium`,`brave`,`microsoft-edge-stable`,`microsoft-edge`],ce=[`chrome.exe`,`msedge.exe`,`brave.exe`],le=[[`Google`,`Chrome`,`Application`,`chrome.exe`],[`Microsoft`,`Edge`,`Application`,`msedge.exe`],[`BraveSoftware`,`Brave-Browser`,`Application`,`brave.exe`],[`Chromium`,`Application`,`chrome.exe`]],ue=[`ProgramFiles`,`ProgramFiles(x86)`,`LOCALAPPDATA`],de=[`/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`,`/Applications/Brave Browser.app/Contents/MacOS/Brave Browser`,`/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge`,`/Applications/Chromium.app/Contents/MacOS/Chromium`];function w(e,t){return r=>{let i=[];for(let a of String(r).split(`,`)){let r=a.trim();if(r.length===0)continue;let o=e.find(e=>e===r);if(o===void 0)throw new n(`Invalid value '${r}' for flag --${t}. Allowed: ${e.join(`, `)}`,{code:`INVALID_VALUE`,details:{flag:t,input:`--${t}`,value:r,allowed:e}});i.push(o)}return i}}const fe=w(m,`source`),pe=w(g,`component`),T=a.boolean().alias(`q`).describe(`Silent; exit code only`),E=a.custom(e=>new URL(String(e))).alias(`github-status-base`,{hidden:!0}).alias(`base`).alias(`b`).default(new URL(x)).env(`GITHUB_UP_GITHUB_STATUS_BASE`).describe(`Override GitHub status page base URL`),me=a.array(a.custom(fe)).alias(`s`).default([[...m]]).env(`GITHUB_UP_SOURCE`).env(`GITHUB_UP_SOURCES`).describe(`Data source(s) to check`),D=a.string().env(`GITHUB_UP_CHROME`).describe(`Path to a Chrome/Chromium binary`),he=a.array(a.custom(pe)).alias(`c`).describe(`Only report incidents/components mentioning these component(s)`),O={actions:a.boolean().describe(`Shortcut for --component actions`),api:a.boolean().describe(`Shortcut for --component api`),codespaces:a.boolean().describe(`Shortcut for --component codespaces`),copilot:a.boolean().describe(`Shortcut for --component copilot`),git:a.boolean().describe(`Shortcut for --component git`),issues:a.boolean().alias(`issue`).describe(`Shortcut for --component issues`),packages:a.boolean().describe(`Shortcut for --component packages`),pages:a.boolean().describe(`Shortcut for --component pages`),pr:a.boolean().alias(`prs`).describe(`Shortcut for --component pr`),webhooks:a.boolean().describe(`Shortcut for --component webhooks`)};function k(e){let t=new Set(e.component.flat());for(let n of g)e[n]&&t.add(n);return t}function ge(e){return[...new Set(e.flat())]}var _e=`github-up`,ve=`0.1.2`,A=`https://github-up.kjanat.dev`,ye={type:`git`,url:`git+https://github.com/kjanat/github-up.git`};function be(e){return{none:e.green,minor:e.yellow,major:e.red,critical:e.red}}function xe(e,t){return e.indicator===`unavailable`?t.dim:be(t)[e.indicator]}function Se(e){return e.source===`github`?x:S}function j(e,t,n){if(n.length!==0){e.push(` ${t}:`);for(let t of n)e.push(` - ${t}`)}}function M(e,t){let n=c(t),r=xe(e,n),i=[n.link(Se(e),n.underline(n.bold(r(h[e.source]))))];if(e.indicator===`unavailable`){let t=e.summaryText??`unknown error`;return i.push(` ${r(`Unavailable: ${t}`)}`),i.join(`
3
3
  `)}if(e.source===`downdetector`){let t=e.summaryText??`No user-reported issues`;return i.push(` ${r(t)}`),i.join(`
4
- `)}let o=e.summaryText??`All systems operational`;i.push(` ${r(o)}`);let s=e.incidents?.map(e=>`${e.name} (${e.status})`)??[];return k(i,s.length===1?`Active incident`:`Active incidents`,s),k(i,`Affected components`,e.affectedComponents?.map(e=>e.name)??[]),i.join(`
5
- `)}function Ee(e){return e.source===`downdetector`?{source:`downdetector`,status:e.indicator===`unavailable`?`unavailable`:e.reportsOutage?`down`:`up`,details:e.summaryText}:{source:`github`,status:e.indicator===`none`?`up`:e.indicator,details:e.summaryText,incidents:e.incidents,affected:e.affectedComponents}}function De(e){return e.map(e=>Ee(e))}function Oe(e,t){if(t.jsonMode||!t.isTTY){t.json(De(e));return}t.log(e.map(e=>A(e,t.isTTY)).join(`
4
+ `)}let a=e.summaryText??`All systems operational`;i.push(` ${r(a)}`);let o=e.incidents?.map(e=>`${e.name} (${e.status})`)??[];return j(i,o.length===1?`Active incident`:`Active incidents`,o),j(i,`Affected components`,e.affectedComponents?.map(e=>e.name)??[]),i.join(`
5
+ `)}function Ce(e){return e.source===`downdetector`?{source:`downdetector`,status:e.indicator===`unavailable`?`unavailable`:e.reportsOutage?`down`:`up`,details:e.summaryText}:{source:`github`,status:e.indicator===`none`?`up`:e.indicator,details:e.summaryText,incidents:e.incidents,affected:e.affectedComponents}}function we(e){return e.map(e=>Ce(e))}function Te(e,t){if(t.jsonMode||!t.isTTY){t.json(we(e));return}t.log(e.map(e=>M(e,t.isTTY)).join(`
6
6
 
7
- `))}function ke(e,t,n={}){let r=n.leadingBlank===!0?`
8
- `:``;t.log(`${r}${A(e,t.isTTY)}`)}function Ae(e){if(e.jsonMode||!e.isTTY)return;let t=a(!0),n=t.link(f,t.underline(f));e.log(`\n${t.dim(`Watch the live status page: ${n}`)}`)}function je(e){return typeof e==`object`&&!!e&&`webSocketDebuggerUrl`in e&&typeof e.webSocketDebuggerUrl==`string`}function Me(e){return typeof e==`object`&&!!e&&`id`in e&&typeof e.id==`number`}function Ne(e){let t=new Map,n=0;return e.onmessage=e=>{let n=typeof e.data==`string`?e.data:e.data instanceof ArrayBuffer?new TextDecoder().decode(e.data):null;if(n===null)return;let r;try{r=JSON.parse(n)}catch{return}if(!Me(r))return;let i=t.get(r.id);typeof i==`function`&&(t.delete(r.id),i(r))},(r,i={})=>new Promise((a,o)=>{let s=++n,c=setTimeout(()=>{t.delete(s),o(Error(`CDP command '${r}' timed out`))},5e3);t.set(s,e=>{clearTimeout(c),a(e)}),e.send(JSON.stringify({id:s,method:r,params:i}))})}async function Pe(e,t){let n=await(await fetch(`${e}/json/new?about%3Ablank`,{method:`PUT`})).json();if(!je(n))return{ok:!1,error:`unexpected CDP target shape`};let r=new WebSocket(n.webSocketDebuggerUrl);await new Promise((e,t)=>{r.onopen=()=>e(),r.onerror=()=>t(Error(`WebSocket connection failed`)),r.onclose=()=>t(Error(`WebSocket closed before opening`))});let i=Ne(r);return await i(`Page.enable`),await i(`Page.navigate`,{url:t}),{ok:!0,send:i,close:()=>r.close()}}function j(e,t){for(let n of t){let t=s(e,[n]);if(t.status===0&&t.stdout){let e=t.stdout.toString().split(/\r?\n/)[0]?.trim();if(e)return e}}return null}function M(e){for(let t of e)if(t&&c(t))return t;return null}function Fe(){let e=[];for(let t of ge){let n=process.env[t];if(n)for(let t of he)e.push(ie.join(n,...t))}return e}function Ie(e){let t=e??process.env.GITHUB_UP_CHROME;return t?c(t)?t:null:process.platform===`win32`?j(`where.exe`,me)??M(Fe()):process.platform===`darwin`?j(`which`,S)??M(_e):j(`which`,S)}async function Le(e,t){let n=Date.now()+t;for(;Date.now()<n;){try{if((await fetch(`${e}/json/version`)).ok)return!0}catch{}await u(100)}return!1}async function Re(e,t){let n=l(e,`DevToolsActivePort`),r=Date.now()+t;for(;Date.now()<r;){try{let e=te(n,`utf8`).split(`
9
- `)[0]?.trim(),t=Number(e);if(Number.isInteger(t)&&t>0)return t}catch{}await u(100)}return null}async function ze(e){let t;try{t=ee(l(re(),`github-up-`))}catch(e){return{ok:!1,error:`mkdtemp failed: ${e instanceof Error?e.message:String(e)}`}}let n=o(e,[`--headless=new`,`--disable-gpu`,`--no-sandbox`,`--disable-blink-features=AutomationControlled`,`--window-size=1920,1080`,`--user-data-dir=${t}`,`--remote-debugging-port=0`,`--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36`,`about:blank`],{stdio:`ignore`}),r=new Promise(e=>{n.once(`error`,t=>e({failed:t.message})),n.once(`exit`,(t,n)=>e({failed:`Chrome exited before CDP came up (${n??t??`unknown`})`}))}),i=await Promise.race([Re(t,5e3),r]);if(typeof i!=`number`)return N(n,t),{ok:!1,error:i===null?`CDP endpoint never came up`:`Chrome launch failed: ${i.failed}`};let a=`http://localhost:${i}`;return await Le(a,5e3)?{ok:!0,browser:{proc:n,userDataDir:t,base:a}}:(N(n,t),{ok:!1,error:`CDP endpoint never came up`})}function N(e,t){process.platform===`win32`&&e.pid!==void 0?s(`taskkill`,[`/pid`,String(e.pid),`/t`,`/f`]):e.kill();try{ne(t,{recursive:!0,force:!0,maxRetries:5,retryDelay:100})}catch{}}const P=`({
7
+ `))}function Ee(e,t,n={}){let r=n.leadingBlank===!0?`
8
+ `:``;t.log(`${r}${M(e,t.isTTY)}`)}function De(e){if(e.jsonMode||!e.isTTY)return;let t=c(!0),n=t.link(A,t.underline(A));e.log(`\n${t.dim(`Watch the live status page: ${n}`)}`)}function Oe(e){return typeof e==`object`&&!!e&&`webSocketDebuggerUrl`in e&&typeof e.webSocketDebuggerUrl==`string`}function ke(e){return typeof e==`object`&&!!e&&`id`in e&&typeof e.id==`number`}function Ae(e){let t=new Map,n=0;return e.onmessage=e=>{let n=typeof e.data==`string`?e.data:e.data instanceof ArrayBuffer?new TextDecoder().decode(e.data):null;if(n===null)return;let r;try{r=JSON.parse(n)}catch{return}if(!ke(r))return;let i=t.get(r.id);typeof i==`function`&&(t.delete(r.id),i(r))},(r,i={})=>new Promise((a,o)=>{let s=++n,c=setTimeout(()=>{t.delete(s),o(Error(`CDP command '${r}' timed out`))},5e3);t.set(s,e=>{clearTimeout(c),a(e)}),e.send(JSON.stringify({id:s,method:r,params:i}))})}async function je(e,t){let n=await(await fetch(`${e}/json/new?about%3Ablank`,{method:`PUT`})).json();if(!Oe(n))return{ok:!1,error:`unexpected CDP target shape`};let r=new WebSocket(n.webSocketDebuggerUrl);await new Promise((e,t)=>{r.onopen=()=>e(),r.onerror=()=>t(Error(`WebSocket connection failed`)),r.onclose=()=>t(Error(`WebSocket closed before opening`))});let i=Ae(r);return await i(`Page.enable`),await i(`Page.navigate`,{url:t}),{ok:!0,send:i,close:()=>r.close()}}function N(e,t){for(let n of t){let t=u(e,[n]);if(t.status===0&&t.stdout){let e=t.stdout.toString().split(/\r?\n/)[0]?.trim();if(e)return e}}return null}function P(e){for(let t of e)if(t&&d(t))return t;return null}function Me(){let e=[];for(let t of ue){let n=process.env[t];if(n)for(let t of le)e.push(ie.join(n,...t))}return e}function Ne(e){let t=e??process.env.GITHUB_UP_CHROME;return t?d(t)?t:null:process.platform===`win32`?N(`where.exe`,ce)??P(Me()):process.platform===`darwin`?N(`which`,C)??P(de):N(`which`,C)}async function Pe(e,t){let n=Date.now()+t;for(;Date.now()<n;){try{if((await fetch(`${e}/json/version`)).ok)return!0}catch{}await p(100)}return!1}async function Fe(e,t){let n=f(e,`DevToolsActivePort`),r=Date.now()+t;for(;Date.now()<r;){try{let e=te(n,`utf8`).split(`
9
+ `)[0]?.trim(),t=Number(e);if(Number.isInteger(t)&&t>0)return t}catch{}await p(100)}return null}async function Ie(e){let t;try{t=ee(f(re(),`github-up-`))}catch(e){return{ok:!1,error:`mkdtemp failed: ${e instanceof Error?e.message:String(e)}`}}let n=l(e,[`--headless=new`,`--disable-gpu`,`--no-sandbox`,`--disable-blink-features=AutomationControlled`,`--window-size=1920,1080`,`--user-data-dir=${t}`,`--remote-debugging-port=0`,`--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36`,`about:blank`],{stdio:`ignore`}),r=new Promise(e=>{n.once(`error`,t=>e({failed:t.message})),n.once(`exit`,(t,n)=>e({failed:`Chrome exited before CDP came up (${n??t??`unknown`})`}))}),i=await Promise.race([Fe(t,5e3),r]);if(typeof i!=`number`)return F(n,t),{ok:!1,error:i===null?`CDP endpoint never came up`:`Chrome launch failed: ${i.failed}`};let a=`http://localhost:${i}`;return await Pe(a,5e3)?{ok:!0,browser:{proc:n,userDataDir:t,base:a}}:(F(n,t),{ok:!1,error:`CDP endpoint never came up`})}function F(e,t){process.platform===`win32`&&e.pid!==void 0?u(`taskkill`,[`/pid`,String(e.pid),`/t`,`/f`]):e.kill();try{ne(t,{recursive:!0,force:!0,maxRetries:5,retryDelay:100})}catch{}}const I=`({
10
10
  title: document.title,
11
11
  pogo: window.PogoConfig ?? null,
12
12
  h1: document.querySelector('h1')?.innerText ?? null,
13
13
  cfChallenge: document.title === 'Just a moment...'
14
14
  || document.querySelector('script[src*="/cdn-cgi/challenge-platform/"]') !== null
15
15
  || document.body?.innerText?.includes('Enable JavaScript and cookies to continue') === true,
16
- })`;function Be(e){return typeof e==`object`&&!!e&&`result`in e&&typeof e.result==`object`&&e.result!==null&&`result`in e.result&&typeof e.result.result==`object`&&e.result.result!==null&&`value`in e.result.result&&typeof e.result.result.value==`string`}function F(e){if(typeof e!=`object`||!e||!(`title`in e)||typeof e.title!=`string`||`h1`in e&&e.h1!==null&&typeof e.h1!=`string`||`cfChallenge`in e&&e.cfChallenge!==void 0&&typeof e.cfChallenge!=`boolean`||!(`pogo`in e))return!1;let{pogo:t}=e;return t===null||!(typeof t!=`object`||`outage`in t&&t.outage!==void 0&&typeof t.outage!=`boolean`)}async function Ve(e,t){return await e(`Runtime.enable`),He(async t=>{let n=await e(`Runtime.evaluate`,{expression:`JSON.stringify(${t})`,returnByValue:!0});if(!Be(n))return null;try{return JSON.parse(n.result.result.value)}catch{return null}},t)}async function He(e,t){let n=Date.now()+t;for(;Date.now()<n;){let t=await e(P);if(F(t)&&t.cfChallenge===!0)return{kind:`cloudflare-challenge`};if(F(t)&&t.pogo!==null)return{kind:`status`,pogo:t.pogo,heading:t.h1};await u(700)}return null}const I=/possible problems/i;function L(e){return e!==null&&I.test(e)?e:void 0}const Ue=`
16
+ })`;function Le(e){return typeof e==`object`&&!!e&&`result`in e&&typeof e.result==`object`&&e.result!==null&&`result`in e.result&&typeof e.result.result==`object`&&e.result.result!==null&&`value`in e.result.result&&typeof e.result.result.value==`string`}function L(e){if(typeof e!=`object`||!e||!(`title`in e)||typeof e.title!=`string`||`h1`in e&&e.h1!==null&&typeof e.h1!=`string`||`cfChallenge`in e&&e.cfChallenge!==void 0&&typeof e.cfChallenge!=`boolean`||!(`pogo`in e))return!1;let{pogo:t}=e;return t===null||!(typeof t!=`object`||`outage`in t&&t.outage!==void 0&&typeof t.outage!=`boolean`)}async function Re(e,t){return await e(`Runtime.enable`),ze(async t=>{let n=await e(`Runtime.evaluate`,{expression:`JSON.stringify(${t})`,returnByValue:!0});if(!Le(n))return null;try{return JSON.parse(n.result.result.value)}catch{return null}},t)}async function ze(e,t){let n=Date.now()+t;for(;Date.now()<n;){let t=await e(I);if(L(t)&&t.cfChallenge===!0)return{kind:`cloudflare-challenge`};if(L(t)&&t.pogo!==null)return{kind:`status`,pogo:t.pogo,heading:t.h1};await p(700)}return null}const R=/possible problems/i;function z(e){return e!==null&&R.test(e)?e:void 0}const Be=`
17
17
  const WEBVIEW_WIDTH = 1920;
18
18
  const WEBVIEW_HEIGHT = 1080;
19
19
  const SNAPSHOT_TIMEOUT_MS = 20000;
20
20
  const POLL_INTERVAL_MS = 700;
21
21
  const CHROME_ARGV = ${JSON.stringify([`--headless=new`,`--disable-gpu`,`--no-sandbox`,`--disable-blink-features=AutomationControlled`,`--window-size=1920,1080`,`--user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36`])};
22
- const POSSIBLE_PROBLEMS_PATTERN = ${I};
23
- ${L.toString()}
22
+ const POSSIBLE_PROBLEMS_PATTERN = ${R};
23
+ ${z.toString()}
24
24
 
25
25
  function webViewOptions(chromePath) {
26
26
  if (chromePath || process.platform !== 'darwin') {
@@ -54,7 +54,7 @@ function isPogoSnapshot(value) {
54
54
  async function pollPogoSnapshot(view) {
55
55
  const deadline = Date.now() + SNAPSHOT_TIMEOUT_MS;
56
56
  while (Date.now() < deadline) {
57
- const snapshot = await view.evaluate(${JSON.stringify(P)}).catch(() => null);
57
+ const snapshot = await view.evaluate(${JSON.stringify(I)}).catch(() => null);
58
58
  if (isPogoSnapshot(snapshot) && snapshot.cfChallenge === true) {
59
59
  return { kind: 'cloudflare-challenge' };
60
60
  }
@@ -116,4 +116,6 @@ self.onmessage = async (event) => {
116
116
  });
117
117
  }
118
118
  };
119
- `;function We(){let e=globalThis.Bun;return e===void 0?null:e}function R(){let e=We()?.WebView;return typeof e==`function`?e:null}function Ge(){return R()!==null}function Ke(){let e=URL.createObjectURL(new Blob([Ue],{type:`text/javascript`}));return new Worker(e,{type:`module`})}async function qe(e,t,n=45e3){let r;try{r=Ke()}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{return await new Promise(i=>{let a=setTimeout(()=>{r.terminate(),i({ok:!1,error:`Bun.WebView timed out`})},n);r.onmessage=e=>{clearTimeout(a),r.terminate();let t=e.data;if(t.type===`result`){i(t.result);return}i({ok:!1,error:t.error})},r.onerror=e=>{clearTimeout(a),r.terminate(),i({ok:!1,error:e.message})},r.postMessage({url:e,chromePath:t})})}finally{await u(0)}}async function Je(e,t){return R()===null?{ok:!1,error:`Bun.WebView is unavailable; upgrade Bun or run with Node`}:qe(e,t??process.env.GITHUB_UP_CHROME)}async function Ye(e){if(Ge())return Je(x,e);let t=Ie(e);if(t===null)return{ok:!1,error:`no Chrome/Chromium found; set GITHUB_UP_CHROME or pass --chrome <path>`};let n=await ze(t);if(!n.ok)return n;let{browser:{proc:r,userDataDir:i,base:a}}=n;try{let e=await Pe(a,x);if(!e.ok)return e;let t=await Ve(e.send,2e4);if(e.close(),t===null)return{ok:!1,error:`CF challenge not cleared in time`};if(t.kind===`cloudflare-challenge`)return{ok:!1,error:`Cloudflare challenge page`};if(t.pogo.outage===!0)return{ok:!0,down:!0,reason:t.heading??`outage reported`};let n=L(t.heading);return n===void 0?{ok:!0,down:!1}:{ok:!0,down:!1,note:n}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}finally{N(r,i)}}const z=`/api/v2`,Xe={components(){return`${z}/components.json`},Incidents:{all(){return`${z}/incidents.json`},unresolved(){return`${z}/incidents/unresolved.json`}},ScheduledMaintenances:{active(){return`${z}/scheduled-maintenances/active.json`},all(){return`${z}/scheduled-maintenances.json`},upcoming(){return`${z}/scheduled-maintenances/upcoming.json`}},status(){return`${z}/status.json`},subscriber(e){return`${z}/subscribers/${encodeURIComponent(e)}.json`},subscribers(){return`${z}/subscribers.json`},summary(){return`${z}/summary.json`}};function B(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V(e){return B(e)&&typeof e.name==`string`&&typeof e.status==`string`}function Ze(e){return B(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function Qe(e){return V(e)&&B(e)&&typeof e.impact==`string`}function $e(e){return B(e)&&Ze(e.status)&&Array.isArray(e.components)&&e.components.every(V)&&Array.isArray(e.incidents)&&e.incidents.every(Qe)}async function et(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function tt(e=b){try{let t=await fetch(new URL(Xe.summary(),e));if(!t.ok){let{headers:e}=t;return{headers:e,kind:`unknown`,reason:await et(t)}}let n=await t.json();return $e(n)?{headers:t.headers,kind:`ok`,summary:n}:{headers:t.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}const H={none:0,minor:1,major:2,critical:3},nt={none:`All Systems Operational`,minor:`Minor Service Outage`,major:`Major Service Outage`,critical:`Critical Service Outage`};function rt(e){return typeof e==`string`&&e in H}function it(e){return rt(e)?e:`critical`}function U(e,t){return H[t]>H[e]?t:e}function at(e){switch(e){case`operational`:return`none`;case`degraded_performance`:case`under_maintenance`:return`minor`;case`partial_outage`:case`major_outage`:return`major`;default:return`major`}}function ot(e){switch(e){case`degraded_performance`:case`partial_outage`:case`major_outage`:return!0;default:return!1}}function W(e){let t=`none`,n=0;for(let r of e)ot(r.status)&&(n+=1),t=U(t,at(r.status));return n>=3?U(t,`major`):t}function st(e,t=[]){return U(it(e),W(t))}function ct(e){return nt[e]}function lt(e){return e===`operational`||e===`degraded_performance`||e===`partial_outage`||e===`major_outage`||e===`under_maintenance`?e:`major_outage`}async function G(e){let t=await tt(e);if(t.kind===`unknown`)return{source:`github`,indicator:`unavailable`,summaryText:t.reason,incidents:null,affectedComponents:null};let n=t.summary.status.indicator,r=st(n,t.summary.components),i=r===n?t.summary.status.description:`${ct(r)} (reported ${String(n)})`,a=t.summary.components.filter(e=>e.status!==`operational`);return{source:`github`,indicator:r,summaryText:i,incidents:t.summary.incidents.length>0?t.summary.incidents.map(e=>({name:e.name,status:e.status})):null,affectedComponents:a.length>0?a.map(e=>({name:e.name,status:lt(e.status)})):null}}async function K(e){let t=await Ye(e);return t.ok?t.down?{source:`downdetector`,indicator:`major`,summaryText:t.reason,reportsOutage:!0}:{source:`downdetector`,indicator:t.note===void 0?`none`:`minor`,summaryText:t.note??null,reportsOutage:!1}:{source:`downdetector`,indicator:`unavailable`,summaryText:t.error,reportsOutage:!1}}async function ut(e,t,n){switch(e){case`github`:return G(t);case`downdetector`:return K(n)}}function q(e,t,n){let r=!1;for(let i of t){g(i.name)&&(r=!0);for(let t of _(i.name,n))e.add(t)}return r}function dt(e,t,n){let r=new Set,i=q(r,e,n),a=q(r,t,n);if(i||a)for(let e of n)r.add(e);return[...n].filter(e=>r.has(e))}function J(e,t){if(e.source!==`github`||t.size===0||e.indicator===`unavailable`)return e;let n=e.incidents?.filter(e=>v(e.name,t))??[],r=e.affectedComponents?.filter(e=>v(e.name,t))??[],i=n.length+r.length,a=dt(n,r,t),o=W(r);return{source:`github`,indicator:n.length>0?U(o,`minor`):o,summaryText:i>0?`${i} report${i===1?``:`s`} affecting ${a.join(`, `)}`:`No incidents reported for ${[...t].join(`, `)}`,incidents:n.length>0?n:null,affectedComponents:r.length>0?r:null}}function ft(e){let t=y[e.indicator];return e.source===`github`&&e.incidents&&e.incidents.length>0?Math.max(t,y.minor):t}function Y(e){let t=e.filter(e=>e.indicator!==`unavailable`);return t.length===0?e.length===0?y.none:y.unavailable:t.reduce((e,t)=>Math.max(e,ft(t)),y.none)}function pt(e){return[...e].sort((e,t)=>e.source.localeCompare(t.source))}function mt(e,t=oe){switch(t){case`darwin`:return{command:`open`,args:[e]};case`win32`:return{command:`cmd`,args:[`/c`,`start`,``,e]};default:return{command:`xdg-open`,args:[e]}}}function ht(e){let{args:t,command:n}=mt(e);return new Promise((e,r)=>{let i=o(n,[...t],{detached:!0,stdio:`ignore`});i.once(`error`,r),i.once(`spawn`,()=>{i.unref(),e()})})}function X(e){return e.flag(`component`,xe).flag(`actions`,D.actions).flag(`api`,D.api).flag(`codespaces`,D.codespaces).flag(`copilot`,D.copilot).flag(`git`,D.git).flag(`issues`,D.issues).flag(`packages`,D.packages).flag(`pages`,D.pages).flag(`pr`,D.pr).flag(`webhooks`,D.webhooks)}async function Z(e,t,n,r){if(r.isTTY&&!r.jsonMode&&!n){let n=await gt(e,t,r);r.setExitCode(Y(n));return}_t(vt(await Promise.all(e.map(e=>e.run())),t),n,r)}function Q(e){return`Checking ${[...e].map(e=>m[e]).join(`, `)}…`}async function gt(e,t,n){let r=new Set(e.map(e=>e.source)),i=[],a=new Map(e.map((e,t)=>[t,e.run().then(t=>({source:e.source,row:t}))])),o=n.spinner(Q(r)),s=0;try{for(;a.size>0;){let e=await Promise.race([...a].map(([e,t])=>t.then(t=>({index:e,...t}))));a.delete(e.index),r.delete(e.source);let c=J(e.row,t);i.push(c),o.stop(),ke(c,n,{leadingBlank:s>0}),s+=1,r.size>0&&(o=n.spinner(Q(r)))}}catch(e){throw o.stop(),e}return Ae(n),i}function _t(e,t,n){t||Oe(pt(e),n),n.setExitCode(Y(e))}function vt(e,t){return t.size===0?e:e.map(e=>J(e,t))}const yt=X(n(`status`).description(`Check GitHub status across GitHub and Downdetector`).example(`status`,`Check all sources`).example(`status --source github`,`Check only GitHub`).example(`status --actions`,`Only report trouble mentioning Actions`).example(`status --json`,`Emit machine-readable source rows`)).flag(`githubStatusBase`,T).flag(`chrome`,E).flag(`quiet`,w).flag(`source`,be).action(async({flags:e,out:t})=>{let{source:n,githubStatusBase:r,chrome:i,quiet:a}=e;await Z(Se(n).map(e=>({source:e,run:()=>ut(e,r,i)})),O(e),a,t)}),bt=X(n(`github`).description(`Check only ${m.github}`).example(`github`,`Check only ${m.github}`).example(`github --component actions`,`Only report trouble mentioning Actions`)).flag(`githubStatusBase`,T).flag(`quiet`,w).action(async({flags:e,out:t})=>{await Z([{source:`github`,run:()=>G(e.githubStatusBase)}],O(e),e.quiet,t)}),xt=n(`downdetector`).description(`Check only ${m.downdetector}`).example(`downdetector`,`Check only ${m.downdetector}`).flag(`chrome`,E).flag(`quiet`,w).action(async({flags:e,out:t})=>{await Z([{source:`downdetector`,run:()=>K(e.chrome)}],new Set,e.quiet,t)});function St(e=ht){return n(`web`).alias(`site`).description(`Open the live status page`).example(`web`,`Open the live status page in your browser`).action(async({out:t})=>{await e(f),t.log(`Opening ${f}`)})}const Ct=St(),$=de.url.replace(/^git\+/,``).replace(/\.git$/,``),wt=t(le).version(d).description(ue).links({name:$,version:`${$}/releases/tag/v${d}`}).default(yt,{route:!0}).command(bt).command(xt).command(Ct).completions(),Tt=new Set([`--help`,`-h`]);function Et(e){return e.some(e=>Tt.has(e))}function Dt(e,t=!1){return`\nNo terminal? Watch the live status page: ${t?i(e,e):e}\n`}if(import.meta.main){let e=ce(),t=Et(ae.slice(2));wt.run({help:{width:se.columns},adapter:{...e,exit:n=>(t&&e.stdout(Dt(f,e.isTTY)),e.exit(n))}})}export{};
119
+ `;function Ve(){let e=globalThis.Bun;return e===void 0?null:e}function B(){let e=Ve()?.WebView;return typeof e==`function`?e:null}function He(){return B()!==null}function Ue(){let e=URL.createObjectURL(new Blob([Be],{type:`text/javascript`}));return new Worker(e,{type:`module`})}async function We(e,t,n=45e3){let r;try{r=Ue()}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{return await new Promise(i=>{let a=setTimeout(()=>{r.terminate(),i({ok:!1,error:`Bun.WebView timed out`})},n);r.onmessage=e=>{clearTimeout(a),r.terminate();let t=e.data;if(t.type===`result`){i(t.result);return}i({ok:!1,error:t.error})},r.onerror=e=>{clearTimeout(a),r.terminate(),i({ok:!1,error:e.message})},r.postMessage({url:e,chromePath:t})})}finally{await p(0)}}async function Ge(e,t){return B()===null?{ok:!1,error:`Bun.WebView is unavailable; upgrade Bun or run with Node`}:We(e,t??process.env.GITHUB_UP_CHROME)}async function Ke(e){if(He())return Ge(S,e);let t=Ne(e);if(t===null)return{ok:!1,error:`no Chrome/Chromium found; set GITHUB_UP_CHROME or pass --chrome <path>`};let n=await Ie(t);if(!n.ok)return n;let{browser:{proc:r,userDataDir:i,base:a}}=n;try{let e=await je(a,S);if(!e.ok)return e;let t=await Re(e.send,2e4);if(e.close(),t===null)return{ok:!1,error:`CF challenge not cleared in time`};if(t.kind===`cloudflare-challenge`)return{ok:!1,error:`Cloudflare challenge page`};if(t.pogo.outage===!0)return{ok:!0,down:!0,reason:t.heading??`outage reported`};let n=z(t.heading);return n===void 0?{ok:!0,down:!1}:{ok:!0,down:!1,note:n}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}finally{F(r,i)}}const qe={components(){return V(`/components.json`)},Incidents:{all(){return V(`/incidents.json`)},unresolved(){return V(`/incidents/unresolved.json`)}},ScheduledMaintenances:{active(){return V(`/scheduled-maintenances/active.json`)},all(){return V(`/scheduled-maintenances.json`)},upcoming(){return V(`/scheduled-maintenances/upcoming.json`)}},status(){return V(`/status.json`)},subscriber(e){return V(`/subscribers/${encodeURIComponent(e)}.json`)},subscribers(){return V(`/subscribers.json`)},summary(){return V(`/summary.json`)}},V=(e,t=`/api/v2/`)=>`${t.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`;function H(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function U(e){return H(e)&&typeof e.name==`string`&&typeof e.status==`string`}function Je(e){return H(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function Ye(e){return U(e)&&H(e)&&typeof e.impact==`string`}function Xe(e){return H(e)&&Je(e.status)&&Array.isArray(e.components)&&e.components.every(U)&&Array.isArray(e.incidents)&&e.incidents.every(Ye)}async function Ze(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function Qe(e=x){try{let t=await fetch(new URL(qe.summary(),e));if(!t.ok){let{headers:e}=t;return{headers:e,kind:`unknown`,reason:await Ze(t)}}let n=await t.json();return Xe(n)?{headers:t.headers,kind:`ok`,summary:n}:{headers:t.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}const W={none:0,minor:1,major:2,critical:3},$e={none:`All Systems Operational`,minor:`Minor Service Outage`,major:`Major Service Outage`,critical:`Critical Service Outage`};function et(e){return typeof e==`string`&&e in W}function tt(e){return et(e)?e:`critical`}function G(e,t){return W[t]>W[e]?t:e}function nt(e){switch(e){case`operational`:return`none`;case`degraded_performance`:case`under_maintenance`:return`minor`;case`partial_outage`:case`major_outage`:return`major`;default:return`major`}}function rt(e){switch(e){case`degraded_performance`:case`partial_outage`:case`major_outage`:return!0;default:return!1}}function K(e){let t=`none`,n=0;for(let r of e)rt(r.status)&&(n+=1),t=G(t,nt(r.status));return n>=3?G(t,`major`):t}function it(e,t=[]){return G(tt(e),K(t))}function at(e){return $e[e]}function ot(e){return e===`operational`||e===`degraded_performance`||e===`partial_outage`||e===`major_outage`||e===`under_maintenance`?e:`major_outage`}async function q(e){let t=await Qe(e);if(t.kind===`unknown`)return{source:`github`,indicator:`unavailable`,summaryText:t.reason,incidents:null,affectedComponents:null};let n=t.summary.status.indicator,r=it(n,t.summary.components),i=r===n?t.summary.status.description:`${at(r)} (reported ${String(n)})`,a=t.summary.components.filter(e=>e.status!==`operational`);return{source:`github`,indicator:r,summaryText:i,incidents:t.summary.incidents.length>0?t.summary.incidents.map(e=>({name:e.name,status:e.status})):null,affectedComponents:a.length>0?a.map(e=>({name:e.name,status:ot(e.status)})):null}}async function J(e){let t=await Ke(e);return t.ok?t.down?{source:`downdetector`,indicator:`major`,summaryText:t.reason,reportsOutage:!0}:{source:`downdetector`,indicator:t.note===void 0?`none`:`minor`,summaryText:t.note??null,reportsOutage:!1}:{source:`downdetector`,indicator:`unavailable`,summaryText:t.error,reportsOutage:!1}}async function st(e,t,n){switch(e){case`github`:return q(t);case`downdetector`:return J(n)}}function Y(e,t,n){let r=!1;for(let i of t){_(i.name)&&(r=!0);for(let t of v(i.name,n))e.add(t)}return r}function ct(e,t,n){let r=new Set,i=Y(r,e,n),a=Y(r,t,n);if(i||a)for(let e of n)r.add(e);return[...n].filter(e=>r.has(e))}function X(e,t){if(e.source!==`github`||t.size===0||e.indicator===`unavailable`)return e;let n=e.incidents?.filter(e=>y(e.name,t))??[],r=e.affectedComponents?.filter(e=>y(e.name,t))??[],i=n.length+r.length,a=ct(n,r,t),o=K(r);return{source:`github`,indicator:n.length>0?G(o,`minor`):o,summaryText:i>0?`${i} report${i===1?``:`s`} affecting ${a.join(`, `)}`:`No incidents reported for ${[...t].join(`, `)}`,incidents:n.length>0?n:null,affectedComponents:r.length>0?r:null}}function lt(e){let t=b[e.indicator];return e.source===`github`&&e.incidents&&e.incidents.length>0?Math.max(t,b.minor):t}function Z(e){let t=e.filter(e=>e.indicator!==`unavailable`);return t.length===0?e.length===0?b.none:b.unavailable:t.reduce((e,t)=>Math.max(e,lt(t)),b.none)}function ut(e){return[...e].sort((e,t)=>e.source.localeCompare(t.source))}function dt(e,n=t){switch(n){case`darwin`:return{command:`open`,args:[e]};case`win32`:return{command:`cmd`,args:[`/c`,`start`,``,e]};default:return{command:`xdg-open`,args:[e]}}}function ft(e){let{args:t,command:n}=dt(e);return new Promise((e,r)=>{let i=l(n,[...t],{detached:!0,stdio:`ignore`});i.once(`error`,r),i.once(`spawn`,()=>{i.unref(),e()})})}function Q(e){return e.flag(`component`,he).flag(`actions`,O.actions).flag(`api`,O.api).flag(`codespaces`,O.codespaces).flag(`copilot`,O.copilot).flag(`git`,O.git).flag(`issues`,O.issues).flag(`packages`,O.packages).flag(`pages`,O.pages).flag(`pr`,O.pr).flag(`webhooks`,O.webhooks)}async function $(e,t,n,r){if(r.isTTY&&!r.jsonMode&&!n){let n=await mt(e,t,r);r.setExitCode(Z(n));return}ht(gt(await Promise.all(e.map(e=>e.run())),t),n,r)}function pt(e){return`Checking ${[...e].map(e=>h[e]).join(`, `)}…`}async function mt(e,t,n){let r=new Set(e.map(e=>e.source)),i=[],a=new Map(e.map((e,t)=>[t,e.run().then(t=>({source:e.source,row:t}))])),o=n.spinner(pt(r)),s=0;try{for(;a.size>0;){let e=await Promise.race([...a].map(([e,t])=>t.then(t=>({index:e,...t}))));a.delete(e.index),r.delete(e.source);let c=X(e.row,t);i.push(c),o.stop(),Ee(c,n,{leadingBlank:s>0}),s+=1,r.size>0&&(o=n.spinner(pt(r)))}}catch(e){throw o.stop(),e}return De(n),i}function ht(e,t,n){t||Te(ut(e),n),n.setExitCode(Z(e))}function gt(e,t){return t.size===0?e:e.map(e=>X(e,t))}const _t=Q(i(`status`).description(`Check GitHub status across GitHub and Downdetector`).example(`status`,`Check all sources`).example(`status --source github`,`Check only GitHub`).example(`status --actions`,`Only report trouble mentioning Actions`).example(`status --json`,`Emit machine-readable source rows`)).flag(`githubStatusBase`,E).flag(`chrome`,D).flag(`quiet`,T).flag(`source`,me).action(async({flags:e,out:t})=>{let{source:n,githubStatusBase:r,chrome:i,quiet:a}=e;await $(ge(n).map(e=>({source:e,run:()=>st(e,r,i)})),k(e),a,t)}),vt=Q(i(`github`).description(`Check only ${h.github}`).example(`github`,`Check only ${h.github}`).example(`github --component actions`,`Only report trouble mentioning Actions`)).flag(`githubStatusBase`,E).flag(`quiet`,T).action(async({flags:e,out:t})=>{await $([{source:`github`,run:()=>q(e.githubStatusBase)}],k(e),e.quiet,t)}),yt=i(`downdetector`).description(`Check only ${h.downdetector}`).example(`downdetector`,`Check only ${h.downdetector}`).flag(`chrome`,D).flag(`quiet`,T).action(async({flags:e,out:t})=>{await $([{source:`downdetector`,run:()=>J(e.chrome)}],new Set,e.quiet,t)});function bt(e=ft){return i(`web`).alias(`site`).description(`Open the live status page`).example(`web`,`Open the live status page in your browser`).action(async({out:t})=>{await e(A),t.log(`Opening ${A}`)})}const xt=bt(),St=s({repository:ye}),Ct=r(_e).manifest({from:import.meta.url}).links({name:St,version:`${St}/releases/tag/v${ve}`}).default(_t,{route:!0}).command(vt).command(yt).command(xt).completions(),wt=new Set([`--help`,`-h`]);function Tt(e){return e.some(e=>wt.has(e))}function Et(e,t=!1){return`
120
+ No terminal? Watch the live status page: ${t?o(e,e):e}
121
+ `}if(import.meta.main){let t=ae(),n=Tt(e.slice(2));Ct.run({adapter:{...t,exit:e=>(n&&t.stdout(Et(A,t.isTTY)),t.exit(e))}})}export{};
@@ -1 +1 @@
1
- const e=`/api/v2`,t={components(){return`${e}/components.json`},Incidents:{all(){return`${e}/incidents.json`},unresolved(){return`${e}/incidents/unresolved.json`}},ScheduledMaintenances:{active(){return`${e}/scheduled-maintenances/active.json`},all(){return`${e}/scheduled-maintenances.json`},upcoming(){return`${e}/scheduled-maintenances/upcoming.json`}},status(){return`${e}/status.json`},subscriber(t){return`${e}/subscribers/${encodeURIComponent(t)}.json`},subscribers(){return`${e}/subscribers.json`},summary(){return`${e}/summary.json`}};function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function r(e){return n(e)&&typeof e.name==`string`&&typeof e.status==`string`}function i(e){return n(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function a(e){return r(e)&&n(e)&&typeof e.impact==`string`}function o(e){return n(e)&&i(e.status)&&Array.isArray(e.components)&&e.components.every(r)&&Array.isArray(e.incidents)&&e.incidents.every(a)}async function s(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function c(e=`https://www.githubstatus.com`){try{let n=await fetch(new URL(t.summary(),e));if(!n.ok){let{headers:e}=n;return{headers:e,kind:`unknown`,reason:await s(n)}}let r=await n.json();return o(r)?{headers:n.headers,kind:`ok`,summary:r}:{headers:n.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}var l={checkGitHub:c};export{c as checkGitHub,l as default};
1
+ const e={components(){return t(`/components.json`)},Incidents:{all(){return t(`/incidents.json`)},unresolved(){return t(`/incidents/unresolved.json`)}},ScheduledMaintenances:{active(){return t(`/scheduled-maintenances/active.json`)},all(){return t(`/scheduled-maintenances.json`)},upcoming(){return t(`/scheduled-maintenances/upcoming.json`)}},status(){return t(`/status.json`)},subscriber(e){return t(`/subscribers/${encodeURIComponent(e)}.json`)},subscribers(){return t(`/subscribers.json`)},summary(){return t(`/summary.json`)}},t=(e,t=`/api/v2/`)=>`${t.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`;function n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function r(e){return n(e)&&typeof e.name==`string`&&typeof e.status==`string`}function i(e){return n(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function a(e){return r(e)&&n(e)&&typeof e.impact==`string`}function o(e){return n(e)&&i(e.status)&&Array.isArray(e.components)&&e.components.every(r)&&Array.isArray(e.incidents)&&e.incidents.every(a)}async function s(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function c(t=`https://www.githubstatus.com`){try{let n=await fetch(new URL(e.summary(),t));if(!n.ok){let{headers:e}=n;return{headers:e,kind:`unknown`,reason:await s(n)}}let r=await n.json();return o(r)?{headers:n.headers,kind:`ok`,summary:r}:{headers:n.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}var l={checkGitHub:c};export{c as checkGitHub,l as default};
package/dist/index.mjs CHANGED
@@ -109,4 +109,4 @@ self.onmessage = async (event) => {
109
109
  });
110
110
  }
111
111
  };
112
- `;function L(){let e=globalThis.Bun;return e===void 0?null:e}function R(){let e=L()?.WebView;return typeof e==`function`?e:null}function z(){return R()!==null}function B(){let e=URL.createObjectURL(new Blob([I],{type:`text/javascript`}));return new Worker(e,{type:`module`})}async function V(e,t,n=45e3){let r;try{r=B()}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{return await new Promise(i=>{let a=setTimeout(()=>{r.terminate(),i({ok:!1,error:`Bun.WebView timed out`})},n);r.onmessage=e=>{clearTimeout(a),r.terminate();let t=e.data;if(t.type===`result`){i(t.result);return}i({ok:!1,error:t.error})},r.onerror=e=>{clearTimeout(a),r.terminate(),i({ok:!1,error:e.message})},r.postMessage({url:e,chromePath:t})})}finally{await l(0)}}async function H(e,t){return R()===null?{ok:!1,error:`Bun.WebView is unavailable; upgrade Bun or run with Node`}:V(e,t??process.env.GITHUB_UP_CHROME)}async function U(e){if(z())return H(d,e);let t=w(e);if(t===null)return{ok:!1,error:`no Chrome/Chromium found; set GITHUB_UP_CHROME or pass --chrome <path>`};let n=await D(t);if(!n.ok)return n;let{browser:{proc:r,userDataDir:i,base:a}}=n;try{let e=await b(a,d);if(!e.ok)return e;let t=await M(e.send,2e4);if(e.close(),t===null)return{ok:!1,error:`CF challenge not cleared in time`};if(t.kind===`cloudflare-challenge`)return{ok:!1,error:`Cloudflare challenge page`};if(t.pogo.outage===!0)return{ok:!0,down:!0,reason:t.heading??`outage reported`};let n=F(t.heading);return n===void 0?{ok:!0,down:!1}:{ok:!0,down:!1,note:n}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}finally{O(r,i)}}const W=`/api/v2`,G={components(){return`${W}/components.json`},Incidents:{all(){return`${W}/incidents.json`},unresolved(){return`${W}/incidents/unresolved.json`}},ScheduledMaintenances:{active(){return`${W}/scheduled-maintenances/active.json`},all(){return`${W}/scheduled-maintenances.json`},upcoming(){return`${W}/scheduled-maintenances/upcoming.json`}},status(){return`${W}/status.json`},subscriber(e){return`${W}/subscribers/${encodeURIComponent(e)}.json`},subscribers(){return`${W}/subscribers.json`},summary(){return`${W}/summary.json`}};function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function q(e){return K(e)&&typeof e.name==`string`&&typeof e.status==`string`}function J(e){return K(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function Y(e){return q(e)&&K(e)&&typeof e.impact==`string`}function X(e){return K(e)&&J(e.status)&&Array.isArray(e.components)&&e.components.every(q)&&Array.isArray(e.incidents)&&e.incidents.every(Y)}async function Z(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function Q(e=`https://www.githubstatus.com`){try{let t=await fetch(new URL(G.summary(),e));if(!t.ok){let{headers:e}=t;return{headers:e,kind:`unknown`,reason:await Z(t)}}let n=await t.json();return X(n)?{headers:t.headers,kind:`ok`,summary:n}:{headers:t.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}const $={checkGitHub:Q,checkDownDetector:U,EXIT_CODES:u};export{u as EXIT_CODES,U as checkDownDetector,Q as checkGitHub,$ as default};
112
+ `;function L(){let e=globalThis.Bun;return e===void 0?null:e}function R(){let e=L()?.WebView;return typeof e==`function`?e:null}function z(){return R()!==null}function B(){let e=URL.createObjectURL(new Blob([I],{type:`text/javascript`}));return new Worker(e,{type:`module`})}async function V(e,t,n=45e3){let r;try{r=B()}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}try{return await new Promise(i=>{let a=setTimeout(()=>{r.terminate(),i({ok:!1,error:`Bun.WebView timed out`})},n);r.onmessage=e=>{clearTimeout(a),r.terminate();let t=e.data;if(t.type===`result`){i(t.result);return}i({ok:!1,error:t.error})},r.onerror=e=>{clearTimeout(a),r.terminate(),i({ok:!1,error:e.message})},r.postMessage({url:e,chromePath:t})})}finally{await l(0)}}async function H(e,t){return R()===null?{ok:!1,error:`Bun.WebView is unavailable; upgrade Bun or run with Node`}:V(e,t??process.env.GITHUB_UP_CHROME)}async function U(e){if(z())return H(d,e);let t=w(e);if(t===null)return{ok:!1,error:`no Chrome/Chromium found; set GITHUB_UP_CHROME or pass --chrome <path>`};let n=await D(t);if(!n.ok)return n;let{browser:{proc:r,userDataDir:i,base:a}}=n;try{let e=await b(a,d);if(!e.ok)return e;let t=await M(e.send,2e4);if(e.close(),t===null)return{ok:!1,error:`CF challenge not cleared in time`};if(t.kind===`cloudflare-challenge`)return{ok:!1,error:`Cloudflare challenge page`};if(t.pogo.outage===!0)return{ok:!0,down:!0,reason:t.heading??`outage reported`};let n=F(t.heading);return n===void 0?{ok:!0,down:!1}:{ok:!0,down:!1,note:n}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}finally{O(r,i)}}const W={components(){return G(`/components.json`)},Incidents:{all(){return G(`/incidents.json`)},unresolved(){return G(`/incidents/unresolved.json`)}},ScheduledMaintenances:{active(){return G(`/scheduled-maintenances/active.json`)},all(){return G(`/scheduled-maintenances.json`)},upcoming(){return G(`/scheduled-maintenances/upcoming.json`)}},status(){return G(`/status.json`)},subscriber(e){return G(`/subscribers/${encodeURIComponent(e)}.json`)},subscribers(){return G(`/subscribers.json`)},summary(){return G(`/summary.json`)}},G=(e,t=`/api/v2/`)=>`${t.replace(/\/+$/,``)}/${e.replace(/^\/+/,``)}`;function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function q(e){return K(e)&&typeof e.name==`string`&&typeof e.status==`string`}function J(e){return K(e)&&typeof e.indicator==`string`&&typeof e.description==`string`}function Y(e){return q(e)&&K(e)&&typeof e.impact==`string`}function X(e){return K(e)&&J(e.status)&&Array.isArray(e.components)&&e.components.every(q)&&Array.isArray(e.incidents)&&e.incidents.every(Y)}async function Z(e){try{let t=await e.text(),n=t.length>0?`: ${t}`:``;return`Request failed with status code ${e.status}${n}`}catch{let{status:t,statusText:n}=e;return`Request failed with status code ${t}: ${n}`}}async function Q(e=`https://www.githubstatus.com`){try{let t=await fetch(new URL(W.summary(),e));if(!t.ok){let{headers:e}=t;return{headers:e,kind:`unknown`,reason:await Z(t)}}let n=await t.json();return X(n)?{headers:t.headers,kind:`ok`,summary:n}:{headers:t.headers,kind:`unknown`,reason:`unexpected response shape from status API`}}catch(e){return{kind:`unknown`,reason:e instanceof Error?e.message:String(e)}}}const $={checkGitHub:Q,checkDownDetector:U,EXIT_CODES:u};export{u as EXIT_CODES,U as checkDownDetector,Q as checkGitHub,$ as default};
@@ -83,51 +83,51 @@
83
83
  ></a>
84
84
  </footer>
85
85
  </main>
86
- <script type="module">var G="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjggMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxNCIgZmlsbD0iIzBEMTExNyIgLz4KCTxwYXRoIGQ9Ik0xMi4wMDcgMTguNjE0CgkgICAgICAgICBjLTMuMDE0LS4zNjUtNS4xMzYtMi41MzQtNS4xMzYtNS4zNDMgMC0xLjE0MS40MTEtMi4zNzUgMS4wOTYtMy4xOTctLjI5Ni0uNzU0LS4yNTEtMi4zNTMuMDkxLTMuMDE0LjkxNC0uMTE0IDIuMTQ3LjM2NSAyLjg3OCAxLjAyOC44NjctLjI3NCAxLjc4MS0uNDExIDIuOS0uNDExCgkgICAgICAgICBzMi4wMzMuMTM3IDIuODU1LjM4OAoJICAgICAgICAgYy43MDgtLjY0IDEuOTYzLTEuMTE5IDIuODc4LTEuMDA1LjMxOS42MTcuMzY1IDIuMjE2LjA2OCAyLjk5Mi43MzEuODY4IDEuMTE5IDIuMDMzIDEuMTE5IDMuMjIgMCAyLjgwOS0yLjEyNCA0LjkzMi01LjE4MyA1LjMyLjc3Ni41MDMgMS4zMDIgMS41OTkgMS4zMDIgMi44NTUKCSAgICAgICAgIHYyLjM3NQoJICAgICAgICAgYzAgLjY4NS41NzEgMS4wNzQgMS4yNTYuNzk5IDQuMTMzLTEuNTc2IDcuMzc2LTUuNzA4IDcuMzc2LTEwLjgyMSAwLTYuNDYyLTUuMjUxLTExLjczNS0xMS43MTMtMTEuNzM1CgkgICAgICAgICBTMi4xMjIgNy4zMzggMi4xMjIgMTMuOCBhMTEuNTE3IDExLjUxNyAwIDAgMCA3LjU1OCAxMC44NDQKCSAgICAgICAgIGMuNjE3LjIyOCAxLjIxMS0uMTgzIDEuMjExLS43OTkgdi0xLjgyNyBhMi45NDEgMi45NDEgMCAwIDEtMS4wOTYuMjI4CgkgICAgICAgICBjLTEuNTA3IDAtMi4zOTgtLjgyMi0zLjAzNy0yLjM1Mi0uMjUyLS42MTYtLjUyNi0uOTgxLTEuMDUxLTEuMDUtLjI3NC0uMDIzLS4zNjUtLjEzNy0uMzY1LS4yNzQgMC0uMjc0LjQ1Ni0uNDguOTEzLS40OC42NjMgMCAxLjIzNC40MTEgMS44MjcgMS4yNTYuNDU3LjY2Mi45MzYuOTU5IDEuNTA3Ljk1OQoJICAgICAgICAgcy45MzYtLjIwNSAxLjQ2MS0uNzMgYy4zODgtLjM4OS42ODUtLjczMS45NTktLjk2MSBaIgoJICAgICAgZmlsbD0iI0YwRjZGQyIgLz4KCTxjaXJjbGUgY3g9IjIxIiBjeT0iNyIgcj0iNC43NSIKCSAgICAgICAgZmlsbD0iI0VGNDQ0NCIgc3Ryb2tlPSIjMEQxMTE3IiBzdHJva2Utd2lkdGg9IjEuNSIgLz4KCTxwYXRoIGQ9Ik0yMSA0LjV2My4yIgoJICAgICAgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxLjM1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIC8+Cgk8Y2lyY2xlIGN4PSIyMSIgY3k9IjkuNTUiIHI9IjAuNyIgZmlsbD0id2hpdGUiIC8+Cjwvc3ZnPgo=";function a(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function d(o){return String(o).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function L(o){return String(o).replaceAll(/[^\w-]/gu,"")}function z(o,r=""){return typeof o==="string"?o:r}function U(o){return o instanceof Error?o.message:String(o)}function P(o){return new Date(o).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}var H="github-up:last-summary";function D(){try{let o=sessionStorage.getItem(H);if(o===null)return null;let r=JSON.parse(o);if(!a(r))return null;let{savedAt:i,intervalMs:n,result:c}=r;if(typeof i!=="number"||typeof n!=="number")return null;return{savedAt:i,intervalMs:n,result:c}}catch{return null}}function S(o,r){try{sessionStorage.setItem(H,JSON.stringify({savedAt:Date.now(),intervalMs:r,result:o}))}catch{}}var R="https://www.githubstatus.com";var W={components(){return"/api/v2/components.json"},Incidents:{all(){return"/api/v2/incidents.json"},unresolved(){return"/api/v2/incidents/unresolved.json"}},ScheduledMaintenances:{active(){return"/api/v2/scheduled-maintenances/active.json"},all(){return"/api/v2/scheduled-maintenances.json"},upcoming(){return"/api/v2/scheduled-maintenances/upcoming.json"}},status(){return"/api/v2/status.json"},subscriber(o){return`/api/v2/subscribers/${encodeURIComponent(o)}.json`},subscribers(){return"/api/v2/subscribers.json"},summary(){return"/api/v2/summary.json"}};function x(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function A(o){return x(o)&&typeof o.name==="string"&&typeof o.status==="string"}function ho(o){return x(o)&&typeof o.indicator==="string"&&typeof o.description==="string"}function mo(o){return A(o)&&x(o)&&typeof o.impact==="string"}function wo(o){return x(o)&&ho(o.status)&&Array.isArray(o.components)&&o.components.every(A)&&Array.isArray(o.incidents)&&o.incidents.every(mo)}async function ko(o){try{let r=await o.text(),i=r.length>0?`: ${r}`:"";return`Request failed with status code ${o.status}${i}`}catch{let{status:r,statusText:i}=o;return`Request failed with status code ${r}: ${i}`}}async function j(o=R){try{let r=await fetch(new URL(W.summary(),o));if(!r.ok){let{headers:n}=r;return{headers:n,kind:"unknown",reason:await ko(r)}}let i=await r.json();if(!wo(i))return{headers:r.headers,kind:"unknown",reason:"unexpected response shape from status API"};return{headers:r.headers,kind:"ok",summary:i}}catch(r){return{kind:"unknown",reason:r instanceof Error?r.message:String(r)}}}var C="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjggMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxNCIgZmlsbD0iIzMwMzYzRCIgLz4KCTxwYXRoIGQ9Ik0xMi4wMDcgMTguNjE0CgkgICAgICAgICBjLTMuMDE0LS4zNjUtNS4xMzYtMi41MzQtNS4xMzYtNS4zNDMgMC0xLjE0MS40MTEtMi4zNzUgMS4wOTYtMy4xOTctLjI5Ni0uNzU0LS4yNTEtMi4zNTMuMDkxLTMuMDE0LjkxNC0uMTE0IDIuMTQ3LjM2NSAyLjg3OCAxLjAyOC44NjctLjI3NCAxLjc4MS0uNDExIDIuOS0uNDExCgkgICAgICAgICBzMi4wMzMuMTM3IDIuODU1LjM4OAoJICAgICAgICAgYy43MDgtLjY0IDEuOTYzLTEuMTE5IDIuODc4LTEuMDA1LjMxOS42MTcuMzY1IDIuMjE2LjA2OCAyLjk5Mi43MzEuODY4IDEuMTE5IDIuMDMzIDEuMTE5IDMuMjIgMCAyLjgwOS0yLjEyNCA0LjkzMi01LjE4MyA1LjMyLjc3Ni41MDMgMS4zMDIgMS41OTkgMS4zMDIgMi44NTUKCSAgICAgICAgIHYyLjM3NQoJICAgICAgICAgYzAgLjY4NS41NzEgMS4wNzQgMS4yNTYuNzk5IDQuMTMzLTEuNTc2IDcuMzc2LTUuNzA4IDcuMzc2LTEwLjgyMSAwLTYuNDYyLTUuMjUxLTExLjczNS0xMS43MTMtMTEuNzM1CgkgICAgICAgICBTMi4xMjIgNy4zMzggMi4xMjIgMTMuOCBhMTEuNTE3IDExLjUxNyAwIDAgMCA3LjU1OCAxMC44NDQKCSAgICAgICAgIGMuNjE3LjIyOCAxLjIxMS0uMTgzIDEuMjExLS43OTkgdi0xLjgyNyBhMi45NDEgMi45NDEgMCAwIDEtMS4wOTYuMjI4CgkgICAgICAgICBjLTEuNTA3IDAtMi4zOTgtLjgyMi0zLjAzNy0yLjM1Mi0uMjUyLS42MTYtLjUyNi0uOTgxLTEuMDUxLTEuMDUtLjI3NC0uMDIzLS4zNjUtLjEzNy0uMzY1LS4yNzQgMC0uMjc0LjQ1Ni0uNDguOTEzLS40OC42NjMgMCAxLjIzNC40MTEgMS44MjcgMS4yNTYuNDU3LjY2Mi45MzYuOTU5IDEuNTA3Ljk1OQoJICAgICAgICAgcy45MzYtLjIwNSAxLjQ2MS0uNzMgYy4zODgtLjM4OS42ODUtLjczMS45NTktLjk2MSBaIgoJICAgICAgZmlsbD0iI0YwRjZGQyIgLz4KCTxjaXJjbGUgY3g9IjIxIiBjeT0iNyIgcj0iNC43NSIKCSAgICAgICAgZmlsbD0iIzhCOTQ5RSIgc3Ryb2tlPSIjMzAzNjNEIiBzdHJva2Utd2lkdGg9IjEuNSIgLz4KCTxwYXRoIGQ9Ik0xOC45IDdoNC4yIgoJICAgICAgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxLjM1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIC8+Cjwvc3ZnPgo=";function l(o){let r=document.querySelector(`#${o}`);if(r instanceof HTMLElement)return r;throw Error(`Missing #${o}`)}function yo(){let o=document.querySelector('link[rel~="icon"]');if(o instanceof HTMLLinkElement)return o;let r=document.createElement("link");return r.rel="icon",r.type="image/svg+xml",r.sizes.value="any",document.head.append(r),r}var t={lastUpdated:l("last-updated"),hero:l("hero"),heroIcon:l("hero-icon"),heroSub:l("hero-sub"),heroTitle:l("hero-title"),incidentsList:l("incidents-list"),componentsGrid:l("components-grid"),favicon:yo()},E={polling:G,idle:C};function p(o){let r=o?E.polling:E.idle;if(t.favicon.getAttribute("href")===r)return;let i=document.createElement("link");i.id="favicon",i.rel="icon",i.type="image/svg+xml",i.sizes.value="any",i.href=r,t.favicon.replaceWith(i),t.favicon=i}var N=1e4;function Mo(o){return Math.min(Math.max(o,3000),60000)}function O(o,r){if(o===null)return null;for(let i of o.split(",")){let[n,c]=i.trim().split("=");if(n===void 0||c===void 0)continue;if(n.toLowerCase()!==r)continue;let e=Number(c.trim().replace(/^"|"$/g,""));if(Number.isFinite(e)&&e>0)return e}return null}function T(o){let r=o.get("cache-control"),i=O(r,"s-maxage")??O(r,"max-age");if(i===null)return 1e4;return Mo(i*1000)}var K=`<svg width="18" height="18" viewBox="0 0 24 24"
86
+ <script type="module">var q="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjggMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxNCIgZmlsbD0iIzBEMTExNyIgLz4KCTxwYXRoIGQ9Ik0xMi4wMDcgMTguNjE0CgkgICAgICAgICBjLTMuMDE0LS4zNjUtNS4xMzYtMi41MzQtNS4xMzYtNS4zNDMgMC0xLjE0MS40MTEtMi4zNzUgMS4wOTYtMy4xOTctLjI5Ni0uNzU0LS4yNTEtMi4zNTMuMDkxLTMuMDE0LjkxNC0uMTE0IDIuMTQ3LjM2NSAyLjg3OCAxLjAyOC44NjctLjI3NCAxLjc4MS0uNDExIDIuOS0uNDExCgkgICAgICAgICBzMi4wMzMuMTM3IDIuODU1LjM4OAoJICAgICAgICAgYy43MDgtLjY0IDEuOTYzLTEuMTE5IDIuODc4LTEuMDA1LjMxOS42MTcuMzY1IDIuMjE2LjA2OCAyLjk5Mi43MzEuODY4IDEuMTE5IDIuMDMzIDEuMTE5IDMuMjIgMCAyLjgwOS0yLjEyNCA0LjkzMi01LjE4MyA1LjMyLjc3Ni41MDMgMS4zMDIgMS41OTkgMS4zMDIgMi44NTUKCSAgICAgICAgIHYyLjM3NQoJICAgICAgICAgYzAgLjY4NS41NzEgMS4wNzQgMS4yNTYuNzk5IDQuMTMzLTEuNTc2IDcuMzc2LTUuNzA4IDcuMzc2LTEwLjgyMSAwLTYuNDYyLTUuMjUxLTExLjczNS0xMS43MTMtMTEuNzM1CgkgICAgICAgICBTMi4xMjIgNy4zMzggMi4xMjIgMTMuOCBhMTEuNTE3IDExLjUxNyAwIDAgMCA3LjU1OCAxMC44NDQKCSAgICAgICAgIGMuNjE3LjIyOCAxLjIxMS0uMTgzIDEuMjExLS43OTkgdi0xLjgyNyBhMi45NDEgMi45NDEgMCAwIDEtMS4wOTYuMjI4CgkgICAgICAgICBjLTEuNTA3IDAtMi4zOTgtLjgyMi0zLjAzNy0yLjM1Mi0uMjUyLS42MTYtLjUyNi0uOTgxLTEuMDUxLTEuMDUtLjI3NC0uMDIzLS4zNjUtLjEzNy0uMzY1LS4yNzQgMC0uMjc0LjQ1Ni0uNDguOTEzLS40OC42NjMgMCAxLjIzNC40MTEgMS44MjcgMS4yNTYuNDU3LjY2Mi45MzYuOTU5IDEuNTA3Ljk1OQoJICAgICAgICAgcy45MzYtLjIwNSAxLjQ2MS0uNzMgYy4zODgtLjM4OS42ODUtLjczMS45NTktLjk2MSBaIgoJICAgICAgZmlsbD0iI0YwRjZGQyIgLz4KCTxjaXJjbGUgY3g9IjIxIiBjeT0iNyIgcj0iNC43NSIKCSAgICAgICAgZmlsbD0iI0VGNDQ0NCIgc3Ryb2tlPSIjMEQxMTE3IiBzdHJva2Utd2lkdGg9IjEuNSIgLz4KCTxwYXRoIGQ9Ik0yMSA0LjV2My4yIgoJICAgICAgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxLjM1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIC8+Cgk8Y2lyY2xlIGN4PSIyMSIgY3k9IjkuNTUiIHI9IjAuNyIgZmlsbD0id2hpdGUiIC8+Cjwvc3ZnPgo=";function s(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function d(o){return String(o).replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("'","&#39;")}function j(o){return String(o).replaceAll(/[^\w-]/gu,"")}function P(o,r=""){return typeof o==="string"?o:r}function R(o){return o instanceof Error?o.message:String(o)}function z(o){return new Date(o).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}var U="github-up:last-summary";function H(){try{let o=sessionStorage.getItem(U);if(o===null)return null;let r=JSON.parse(o);if(!s(r))return null;let{savedAt:n,intervalMs:i,result:c}=r;if(typeof n!=="number"||typeof i!=="number")return null;return{savedAt:n,intervalMs:i,result:c}}catch{return null}}function T(o,r){try{sessionStorage.setItem(U,JSON.stringify({savedAt:Date.now(),intervalMs:r,result:o}))}catch{}}var W="https://www.githubstatus.com";var D={components(){return a("/components.json")},Incidents:{all(){return a("/incidents.json")},unresolved(){return a("/incidents/unresolved.json")}},ScheduledMaintenances:{active(){return a("/scheduled-maintenances/active.json")},all(){return a("/scheduled-maintenances.json")},upcoming(){return a("/scheduled-maintenances/upcoming.json")}},status(){return a("/status.json")},subscriber(o){let r=encodeURIComponent(o);return a(`/subscribers/${r}.json`)},subscribers(){return a("/subscribers.json")},summary(){return a("/summary.json")}},a=(o,r="/api/v2/")=>`${r.replace(/\/+$/,"")}/${o.replace(/^\/+/,"")}`;function x(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function A(o){return x(o)&&typeof o.name==="string"&&typeof o.status==="string"}function mo(o){return x(o)&&typeof o.indicator==="string"&&typeof o.description==="string"}function wo(o){return A(o)&&x(o)&&typeof o.impact==="string"}function vo(o){return x(o)&&mo(o.status)&&Array.isArray(o.components)&&o.components.every(A)&&Array.isArray(o.incidents)&&o.incidents.every(wo)}async function ko(o){try{let r=await o.text(),n=r.length>0?`: ${r}`:"";return`Request failed with status code ${o.status}${n}`}catch{let{status:r,statusText:n}=o;return`Request failed with status code ${r}: ${n}`}}async function B(o=W){try{let r=await fetch(new URL(D.summary(),o));if(!r.ok){let{headers:i}=r;return{headers:i,kind:"unknown",reason:await ko(r)}}let n=await r.json();if(!vo(n))return{headers:r.headers,kind:"unknown",reason:"unexpected response shape from status API"};return{headers:r.headers,kind:"ok",summary:n}}catch(r){return{kind:"unknown",reason:r instanceof Error?r.message:String(r)}}}var E="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjggMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+Cgk8Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxNCIgZmlsbD0iIzMwMzYzRCIgLz4KCTxwYXRoIGQ9Ik0xMi4wMDcgMTguNjE0CgkgICAgICAgICBjLTMuMDE0LS4zNjUtNS4xMzYtMi41MzQtNS4xMzYtNS4zNDMgMC0xLjE0MS40MTEtMi4zNzUgMS4wOTYtMy4xOTctLjI5Ni0uNzU0LS4yNTEtMi4zNTMuMDkxLTMuMDE0LjkxNC0uMTE0IDIuMTQ3LjM2NSAyLjg3OCAxLjAyOC44NjctLjI3NCAxLjc4MS0uNDExIDIuOS0uNDExCgkgICAgICAgICBzMi4wMzMuMTM3IDIuODU1LjM4OAoJICAgICAgICAgYy43MDgtLjY0IDEuOTYzLTEuMTE5IDIuODc4LTEuMDA1LjMxOS42MTcuMzY1IDIuMjE2LjA2OCAyLjk5Mi43MzEuODY4IDEuMTE5IDIuMDMzIDEuMTE5IDMuMjIgMCAyLjgwOS0yLjEyNCA0LjkzMi01LjE4MyA1LjMyLjc3Ni41MDMgMS4zMDIgMS41OTkgMS4zMDIgMi44NTUKCSAgICAgICAgIHYyLjM3NQoJICAgICAgICAgYzAgLjY4NS41NzEgMS4wNzQgMS4yNTYuNzk5IDQuMTMzLTEuNTc2IDcuMzc2LTUuNzA4IDcuMzc2LTEwLjgyMSAwLTYuNDYyLTUuMjUxLTExLjczNS0xMS43MTMtMTEuNzM1CgkgICAgICAgICBTMi4xMjIgNy4zMzggMi4xMjIgMTMuOCBhMTEuNTE3IDExLjUxNyAwIDAgMCA3LjU1OCAxMC44NDQKCSAgICAgICAgIGMuNjE3LjIyOCAxLjIxMS0uMTgzIDEuMjExLS43OTkgdi0xLjgyNyBhMi45NDEgMi45NDEgMCAwIDEtMS4wOTYuMjI4CgkgICAgICAgICBjLTEuNTA3IDAtMi4zOTgtLjgyMi0zLjAzNy0yLjM1Mi0uMjUyLS42MTYtLjUyNi0uOTgxLTEuMDUxLTEuMDUtLjI3NC0uMDIzLS4zNjUtLjEzNy0uMzY1LS4yNzQgMC0uMjc0LjQ1Ni0uNDguOTEzLS40OC42NjMgMCAxLjIzNC40MTEgMS44MjcgMS4yNTYuNDU3LjY2Mi45MzYuOTU5IDEuNTA3Ljk1OQoJICAgICAgICAgcy45MzYtLjIwNSAxLjQ2MS0uNzMgYy4zODgtLjM4OS42ODUtLjczMS45NTktLjk2MSBaIgoJICAgICAgZmlsbD0iI0YwRjZGQyIgLz4KCTxjaXJjbGUgY3g9IjIxIiBjeT0iNyIgcj0iNC43NSIKCSAgICAgICAgZmlsbD0iIzhCOTQ5RSIgc3Ryb2tlPSIjMzAzNjNEIiBzdHJva2Utd2lkdGg9IjEuNSIgLz4KCTxwYXRoIGQ9Ik0xOC45IDdoNC4yIgoJICAgICAgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxLjM1IiBzdHJva2UtbGluZWNhcD0icm91bmQiIC8+Cjwvc3ZnPgo=";function l(o){let r=document.querySelector(`#${o}`);if(r instanceof HTMLElement)return r;throw Error(`Missing #${o}`)}function Lo(){let o=document.querySelector('link[rel~="icon"]');if(o instanceof HTMLLinkElement)return o;let r=document.createElement("link");return r.rel="icon",r.type="image/svg+xml",r.sizes.value="any",document.head.append(r),r}var t={lastUpdated:l("last-updated"),hero:l("hero"),heroIcon:l("hero-icon"),heroSub:l("hero-sub"),heroTitle:l("hero-title"),incidentsList:l("incidents-list"),componentsGrid:l("components-grid"),favicon:Lo()},C={polling:q,idle:E};function g(o){let r=o?C.polling:C.idle;if(t.favicon.getAttribute("href")===r)return;let n=document.createElement("link");n.id="favicon",n.rel="icon",n.type="image/svg+xml",n.sizes.value="any",n.href=r,t.favicon.replaceWith(n),t.favicon=n}var N=1e4;function Mo(o){return Math.min(Math.max(o,3000),60000)}function O(o,r){if(o===null)return null;for(let n of o.split(",")){let[i,c]=n.trim().split("=");if(i===void 0||c===void 0)continue;if(i.toLowerCase()!==r)continue;let e=Number(c.trim().replace(/^"|"$/g,""));if(Number.isFinite(e)&&e>0)return e}return null}function I(o){let r=o.get("cache-control"),n=O(r,"s-maxage")??O(r,"max-age");if(n===null)return 1e4;return Mo(n*1000)}var K=`<svg width="18" height="18" viewBox="0 0 24 24"
87
87
  fill="none" stroke="currentColor" stroke-width="2"
88
88
  xmlns="http://www.w3.org/2000/svg">
89
89
  <path d="M20 6L9 17l-5-5" />
90
90
  </svg>
91
- `;var I=`<svg width="32" height="32" viewBox="0 0 24 24"
91
+ `;var oo=`<svg width="32" height="32" viewBox="0 0 24 24"
92
92
  fill="none" stroke="currentColor" stroke-width="2.5"
93
93
  xmlns="http://www.w3.org/2000/svg">
94
94
  <path d="M20 6L9 17l-5-5" />
95
95
  </svg>
96
- `;var oo=`<svg width="32" height="32" viewBox="0 0 24 24"
96
+ `;var ro=`<svg width="32" height="32" viewBox="0 0 24 24"
97
97
  fill="none" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"
98
98
  xmlns="http://www.w3.org/2000/svg">
99
99
  <path d="M3.75 12h3.5l2.25-5.5 4 11 2.25-5.5h4.5" />
100
100
  <path d="M18 5.75v3.5" />
101
101
  <circle cx="18" cy="13.75" r="1" fill="currentColor" stroke="none" />
102
102
  </svg>
103
- `;var jo={operational:"Operational",degraded_performance:"Degraded",partial_outage:"Partial Outage",major_outage:"Major Outage",under_maintenance:"Maintenance"},ro="idle",F,_,V,B,io;function u(o){if(ro===o)return;F=void 0,_=void 0,V=void 0,B=void 0,ro=o}function Fo(o){return o==="operational"||o==="degraded_performance"||o==="partial_outage"||o==="major_outage"||o==="under_maintenance"}function _o(o){if(Fo(o))return{label:jo[o]??o,className:o};return{label:o,className:"unknown"}}function Vo(o){let i=/^(.+?)\s+\(([^)]+)\)\s*$/.exec(o);if(i===null||i[1]===void 0||i[2]===void 0)return{main:o,domain:null};return{main:i[1],domain:i[2]}}function no(o){let r=o.toLocaleTimeString();if(r===io)return;io=r,t.lastUpdated.textContent=`${r}`}function Z(o,r){u("error");let i=`${o}\x00${r}`;if(i===B)return;B=i,t.heroTitle.textContent=o,t.heroSub.textContent=r,t.hero.className="hero error",t.heroIcon.className="hero-icon error",t.incidentsList.innerHTML="",t.componentsGrid.innerHTML=""}function Bo(o,r){let{indicator:i,reportedIndicator:n}=o;if(i==="none")return r===0?"No active incidents":`${r} active incident${r===1?"":"s"}`;return n!==void 0&&n!==i?`Indicator: ${i} (reported ${n})`:`Indicator: ${i}`}function to(o,r){u("success");let i=`${JSON.stringify(o)}\x00${r}`;if(i===F)return;F=i;let{indicator:n,description:c}=o,e=n==="none"?"ok":L(n);t.hero.className=`hero ${e}`,t.heroIcon.className=`hero-icon ${e}`,t.heroIcon.innerHTML=n==="none"?`${I}`:`${oo}`,t.heroTitle.textContent=c,t.heroSub.textContent=Bo(o,r)}function co(o){u("success");let r=JSON.stringify(o);if(r===_)return;if(_=r,o.length===0){t.incidentsList.innerHTML=`
103
+ `;var Bo={operational:"Operational",degraded_performance:"Degraded",partial_outage:"Partial Outage",major_outage:"Major Outage",under_maintenance:"Maintenance"},no="idle",F,V,_,$,io;function b(o){if(no===o)return;F=void 0,V=void 0,_=void 0,$=void 0,no=o}function Fo(o){return o==="operational"||o==="degraded_performance"||o==="partial_outage"||o==="major_outage"||o==="under_maintenance"}function Vo(o){if(Fo(o))return{label:Bo[o]??o,className:o};return{label:o,className:"unknown"}}function _o(o){let n=/^(.+?)\s+\(([^)]+)\)\s*$/.exec(o);if(n===null||n[1]===void 0||n[2]===void 0)return{main:o,domain:null};return{main:n[1],domain:n[2]}}function to(o){let r=o.toLocaleTimeString();if(r===io)return;io=r,t.lastUpdated.textContent=`${r}`}function Z(o,r){b("error");let n=`${o}\x00${r}`;if(n===$)return;$=n,t.heroTitle.textContent=o,t.heroSub.textContent=r,t.hero.className="hero error",t.heroIcon.className="hero-icon error",t.incidentsList.innerHTML="",t.componentsGrid.innerHTML=""}function $o(o,r){let{indicator:n,reportedIndicator:i}=o;if(n==="none")return r===0?"No active incidents":`${r} active incident${r===1?"":"s"}`;return i!==void 0&&i!==n?`Indicator: ${n} (reported ${i})`:`Indicator: ${n}`}function co(o,r){b("success");let n=`${JSON.stringify(o)}\x00${r}`;if(n===F)return;F=n;let{indicator:i,description:c}=o,e=i==="none"?"ok":j(i);t.hero.className=`hero ${e}`,t.heroIcon.className=`hero-icon ${e}`,t.heroIcon.innerHTML=i==="none"?`${oo}`:`${ro}`,t.heroTitle.textContent=c,t.heroSub.textContent=$o(o,r)}function eo(o){b("success");let r=JSON.stringify(o);if(r===V)return;if(V=r,o.length===0){t.incidentsList.innerHTML=`
104
104
  <div class="empty-row">
105
105
  ${K}
106
106
  No active incidents
107
107
  </div>
108
- `;return}t.incidentsList.innerHTML=o.map((i)=>{let{name:n,impact:c,created_at:e,updated_at:w}=i,k=d(n),g=d(c),v=L(c),y=d(P(e)),M=d(P(w));return`
108
+ `;return}t.incidentsList.innerHTML=o.map((n)=>{let{name:i,impact:c,created_at:e,updated_at:v}=n,k=d(i),u=d(c),y=j(c),L=d(z(e)),M=d(z(v));return`
109
109
  <div class="incident-card">
110
110
  <div class="inc-header">
111
111
  <span class="inc-name">${k}</span>
112
- <span class="inc-badge ${v}">${g}</span>
112
+ <span class="inc-badge ${y}">${u}</span>
113
113
  </div>
114
114
  <div class="inc-meta">
115
- Created ${y} &middot; Updated ${M}
115
+ Created ${L} &middot; Updated ${M}
116
116
  </div>
117
117
  </div>
118
- `}).join("")}function eo(o){u("success");let r=JSON.stringify(o);if(r===V)return;V=r,t.componentsGrid.innerHTML=o.map((i)=>{let n=_o(i.status),c=Vo(i.name),{className:e,label:w}=n,{main:k,domain:g}=c,v=d(k),y=g===null?"":`<span class="comp-domain">${d(g)}</span>`,M=d(w);return`
118
+ `}).join("")}function so(o){b("success");let r=JSON.stringify(o);if(r===_)return;_=r,t.componentsGrid.innerHTML=o.map((n)=>{let i=Vo(n.status),c=_o(n.name),{className:e,label:v}=i,{main:k,domain:u}=c,y=d(k),L=u===null?"":`<span class="comp-domain">${d(u)}</span>`,M=d(v);return`
119
119
  <div class="comp-card">
120
120
  <div class="comp-dot ${e}"></div>
121
121
  <div class="comp-info">
122
122
  <div class="comp-block">
123
- <span class="comp-name">${v}</span>
124
- ${y}
123
+ <span class="comp-name">${y}</span>
124
+ ${L}
125
125
  </div>
126
126
  <div class="comp-status ${e}">
127
127
  ${M}
128
128
  </div>
129
129
  </div>
130
130
  </div>
131
- `}).join("")}var $={none:0,minor:1,major:2,critical:3},Zo={none:"All Systems Operational",minor:"Minor Service Outage",major:"Major Service Outage",critical:"Critical Service Outage"};function $o(o){return typeof o==="string"&&o in $}function Jo(o){return $o(o)?o:"critical"}function J(o,r){return $[r]>$[o]?r:o}function Qo(o){switch(o){case"operational":return"none";case"degraded_performance":case"under_maintenance":return"minor";case"partial_outage":case"major_outage":return"major";default:return"major"}}function Xo(o){switch(o){case"degraded_performance":case"partial_outage":case"major_outage":return!0;default:return!1}}function Yo(o){let r="none",i=0;for(let n of o){if(Xo(n.status))i+=1;r=J(r,Qo(n.status))}return i>=3?J(r,"major"):r}function ao(o,r=[]){return J(Jo(o),Yo(r))}function lo(o){return Zo[o]}function so(o){if(!a(o))return o instanceof Error?o.message:String(o);let r=o.reason??o.error??o.message;if(r instanceof Error)return r.message;if(typeof r==="string")return r;return"Unknown error"}function po(o){if(!a(o))return;return o.headers instanceof Headers?o.headers:void 0}function fo(o){if(!a(o))return!1;if(o.kind!==void 0)return o.kind!=="ok";if(o.ok!==void 0)return o.ok!==!0;if(o.success!==void 0)return o.success!==!0;return!1}function qo(o){if(!a(o))return o;return o.summary??o.data??o.value??o.result??o}function Go(o){if(a(o)){let r=z(o.indicator,"none");return{description:z(o.description,r==="none"?"All Systems Operational":`Indicator: ${r}`),indicator:r}}if(typeof o==="string")return{description:o,indicator:o==="operational"?"none":o};return{description:"Unknown status",indicator:"major"}}function s(o,r){return typeof o[r]==="string"}function Uo(o){return a(o)&&s(o,"name")&&s(o,"impact")&&s(o,"status")&&s(o,"created_at")&&s(o,"updated_at")}function Ho(o){return a(o)&&s(o,"name")&&s(o,"status")}function go(o){let r=qo(o);if(!a(r))throw Error("Invalid status response");let i=Go(r.status),n=Array.isArray(r.incidents)?r.incidents.filter(Uo):[],c=Array.isArray(r.components)?r.components.filter(Ho):[],e=ao(i.indicator,c);return{status:{description:e===i.indicator?i.description:lo(e),indicator:e,reportedIndicator:i.indicator},incidents:n,components:c}}var b,h=!1,m=N;function xo(o){m=o}function Q(o,r){if(no(r),fo(o)){Z("Error",so(o));return}let{status:i,incidents:n,components:c}=go(o);to(i,n.length),co(n),eo(c)}async function Do(){let o=await j();Q(o,new Date);let r=po(o),i=r===void 0?m:T(r);return{result:o,intervalMs:i}}function X(){if(b===void 0)return;window.clearTimeout(b),b=void 0}function f(){X(),p(!1)}function Y(o=m){if(X(),document.visibilityState!=="visible"){f();return}p(!0),b=window.setTimeout(()=>{uo()},Math.max(0,o))}function q(){if(document.visibilityState!=="visible"){f();return}if(p(!0),h)return;uo()}async function uo(){if(X(),document.visibilityState!=="visible"){f();return}if(h)return;h=!0,p(!0);try{let{result:o,intervalMs:r}=await Do();m=r,S(o,r)}catch(o){Z("Exception",U(o))}finally{h=!1}Y()}function So(){let o=D();if(o!==null){let r=Date.now()-o.savedAt;if(r>=0&&r<o.intervalMs){Q(o.result,new Date(o.savedAt)),xo(o.intervalMs),Y(o.intervalMs-r);return}}q()}document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible")q();else f()});So();
131
+ `}).join("")}var J={none:0,minor:1,major:2,critical:3},Zo={none:"All Systems Operational",minor:"Minor Service Outage",major:"Major Service Outage",critical:"Critical Service Outage"};function Jo(o){return typeof o==="string"&&o in J}function So(o){return Jo(o)?o:"critical"}function S(o,r){return J[r]>J[o]?r:o}function Go(o){switch(o){case"operational":return"none";case"degraded_performance":case"under_maintenance":return"minor";case"partial_outage":case"major_outage":return"major";default:return"major"}}function Qo(o){switch(o){case"degraded_performance":case"partial_outage":case"major_outage":return!0;default:return!1}}function Xo(o){let r="none",n=0;for(let i of o){if(Qo(i.status))n+=1;r=S(r,Go(i.status))}return n>=3?S(r,"major"):r}function ao(o,r=[]){return S(So(o),Xo(r))}function lo(o){return Zo[o]}function po(o){if(!s(o))return o instanceof Error?o.message:String(o);let r=o.reason??o.error??o.message;if(r instanceof Error)return r.message;if(typeof r==="string")return r;return"Unknown error"}function go(o){if(!s(o))return;return o.headers instanceof Headers?o.headers:void 0}function fo(o){if(!s(o))return!1;if(o.kind!==void 0)return o.kind!=="ok";if(o.ok!==void 0)return o.ok!==!0;if(o.success!==void 0)return o.success!==!0;return!1}function Yo(o){if(!s(o))return o;return o.summary??o.data??o.value??o.result??o}function qo(o){if(s(o)){let r=P(o.indicator,"none");return{description:P(o.description,r==="none"?"All Systems Operational":`Indicator: ${r}`),indicator:r}}if(typeof o==="string")return{description:o,indicator:o==="operational"?"none":o};return{description:"Unknown status",indicator:"major"}}function p(o,r){return typeof o[r]==="string"}function Ro(o){return s(o)&&p(o,"name")&&p(o,"impact")&&p(o,"status")&&p(o,"created_at")&&p(o,"updated_at")}function Uo(o){return s(o)&&p(o,"name")&&p(o,"status")}function uo(o){let r=Yo(o);if(!s(r))throw Error("Invalid status response");let n=qo(r.status),i=Array.isArray(r.incidents)?r.incidents.filter(Ro):[],c=Array.isArray(r.components)?r.components.filter(Uo):[],e=ao(n.indicator,c);return{status:{description:e===n.indicator?n.description:lo(e),indicator:e,reportedIndicator:n.indicator},incidents:i,components:c}}var h,m=!1,w=N;function xo(o){w=o}function G(o,r){if(to(r),fo(o)){Z("Error",po(o));return}let{status:n,incidents:i,components:c}=uo(o);co(n,i.length),eo(i),so(c)}async function Ho(){let o=await B();G(o,new Date);let r=go(o),n=r===void 0?w:I(r);return{result:o,intervalMs:n}}function Q(){if(h===void 0)return;window.clearTimeout(h),h=void 0}function f(){Q(),g(!1)}function X(o=w){if(Q(),document.visibilityState!=="visible"){f();return}g(!0),h=window.setTimeout(()=>{bo()},Math.max(0,o))}function Y(){if(document.visibilityState!=="visible"){f();return}if(g(!0),m)return;bo()}async function bo(){if(Q(),document.visibilityState!=="visible"){f();return}if(m)return;m=!0,g(!0);try{let{result:o,intervalMs:r}=await Ho();w=r,T(o,r)}catch(o){Z("Exception",R(o))}finally{m=!1}X()}function To(){let o=H();if(o!==null){let r=Date.now()-o.savedAt;if(r>=0&&r<o.intervalMs){G(o.result,new Date(o.savedAt)),xo(o.intervalMs),X(o.intervalMs-r);return}}Y()}document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible")Y();else f()});To();
132
132
  </script></body>
133
133
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-up",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Is GitHub down? Probably...",
5
5
  "homepage": "https://github-up.kjanat.dev",
6
6
  "bugs": {
@@ -26,6 +26,7 @@
26
26
  "#github-up": "./src/index.ts",
27
27
  "#github-up/cli": "./src/cli/index.ts",
28
28
  "#github-up/browser": "./src/browser.ts",
29
+ "#github-up/types": "./src/lib/types.ts",
29
30
  "#github-up/*": "./src/*.ts",
30
31
  "#demo/*": "./demo/*.ts",
31
32
  "#pkg": "./package.json",
@@ -72,7 +73,7 @@
72
73
  "publish:pkg-pr-new": "bunx pkg-pr-new publish --bun --bin --packageManager=npm,bun,pnpm"
73
74
  },
74
75
  "dependencies": {
75
- "@kjanat/dreamcli": "^3.0.0-rc.6",
76
+ "@kjanat/dreamcli": "^3.0.0-rc.7",
76
77
  "ansispeck": "^0.1.2"
77
78
  },
78
79
  "devDependencies": {