af360 0.1.13 → 0.1.15

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.
Files changed (178) hide show
  1. package/bin/af360.mjs +38 -5
  2. package/dist/.next/BUILD_ID +1 -1
  3. package/dist/.next/app-build-manifest.json +136 -138
  4. package/dist/.next/app-path-routes-manifest.json +20 -20
  5. package/dist/.next/build-manifest.json +5 -5
  6. package/dist/.next/prerender-manifest.json +46 -46
  7. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/dist/.next/server/app/_not-found.html +1 -1
  9. package/dist/.next/server/app/_not-found.rsc +3 -3
  10. package/dist/.next/server/app/ahead/page.js +1 -1
  11. package/dist/.next/server/app/ahead/page_client-reference-manifest.js +1 -1
  12. package/dist/.next/server/app/ahead.html +1 -1
  13. package/dist/.next/server/app/ahead.rsc +4 -4
  14. package/dist/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
  15. package/dist/.next/server/app/api/card/route.js +1 -1
  16. package/dist/.next/server/app/api/card/route.js.nft.json +1 -1
  17. package/dist/.next/server/app/api/card/route_client-reference-manifest.js +1 -1
  18. package/dist/.next/server/app/api/check/route_client-reference-manifest.js +1 -1
  19. package/dist/.next/server/app/api/config/route_client-reference-manifest.js +1 -1
  20. package/dist/.next/server/app/api/connections/route_client-reference-manifest.js +1 -1
  21. package/dist/.next/server/app/api/connectors/github/route_client-reference-manifest.js +1 -1
  22. package/dist/.next/server/app/api/consent/route_client-reference-manifest.js +1 -1
  23. package/dist/.next/server/app/api/context/route_client-reference-manifest.js +1 -1
  24. package/dist/.next/server/app/api/discover/route_client-reference-manifest.js +1 -1
  25. package/dist/.next/server/app/api/expiry/route_client-reference-manifest.js +1 -1
  26. package/dist/.next/server/app/api/first-light/route_client-reference-manifest.js +1 -1
  27. package/dist/.next/server/app/api/handoff/route_client-reference-manifest.js +1 -1
  28. package/dist/.next/server/app/api/health/route.js +1 -1
  29. package/dist/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  30. package/dist/.next/server/app/api/incidents/route_client-reference-manifest.js +1 -1
  31. package/dist/.next/server/app/api/insights/route.js +1 -1
  32. package/dist/.next/server/app/api/insights/route.js.nft.json +1 -1
  33. package/dist/.next/server/app/api/insights/route_client-reference-manifest.js +1 -1
  34. package/dist/.next/server/app/api/log/route.js +1 -1
  35. package/dist/.next/server/app/api/log/route_client-reference-manifest.js +1 -1
  36. package/dist/.next/server/app/api/pulse/route_client-reference-manifest.js +1 -1
  37. package/dist/.next/server/app/api/radar/route.js +1 -1
  38. package/dist/.next/server/app/api/radar/route_client-reference-manifest.js +1 -1
  39. package/dist/.next/server/app/api/report/route.js +1 -1
  40. package/dist/.next/server/app/api/report/route.js.nft.json +1 -1
  41. package/dist/.next/server/app/api/report/route_client-reference-manifest.js +1 -1
  42. package/dist/.next/server/app/api/services/route_client-reference-manifest.js +1 -1
  43. package/dist/.next/server/app/api/status/route.js +1 -1
  44. package/dist/.next/server/app/api/status/route.js.nft.json +1 -1
  45. package/dist/.next/server/app/api/status/route_client-reference-manifest.js +1 -1
  46. package/dist/.next/server/app/connections/page.js +2 -2
  47. package/dist/.next/server/app/connections/page_client-reference-manifest.js +1 -1
  48. package/dist/.next/server/app/connections.html +1 -1
  49. package/dist/.next/server/app/connections.rsc +4 -4
  50. package/dist/.next/server/app/dashboard/page_client-reference-manifest.js +1 -1
  51. package/dist/.next/server/app/dashboard.html +1 -1
  52. package/dist/.next/server/app/dashboard.rsc +3 -3
  53. package/dist/.next/server/app/discoveries/page.js +1 -1
  54. package/dist/.next/server/app/discoveries/page_client-reference-manifest.js +1 -1
  55. package/dist/.next/server/app/discoveries.html +1 -1
  56. package/dist/.next/server/app/discoveries.rsc +4 -4
  57. package/dist/.next/server/app/expiry/page_client-reference-manifest.js +1 -1
  58. package/dist/.next/server/app/expiry.html +1 -1
  59. package/dist/.next/server/app/expiry.rsc +3 -3
  60. package/dist/.next/server/app/fleet/page_client-reference-manifest.js +1 -1
  61. package/dist/.next/server/app/fleet.html +1 -1
  62. package/dist/.next/server/app/fleet.rsc +3 -3
  63. package/dist/.next/server/app/home/page_client-reference-manifest.js +1 -1
  64. package/dist/.next/server/app/home.html +1 -1
  65. package/dist/.next/server/app/home.rsc +3 -3
  66. package/dist/.next/server/app/legal/privacy/page_client-reference-manifest.js +1 -1
  67. package/dist/.next/server/app/legal/terms/page_client-reference-manifest.js +1 -1
  68. package/dist/.next/server/app/log/page.js +1 -1
  69. package/dist/.next/server/app/log/page_client-reference-manifest.js +1 -1
  70. package/dist/.next/server/app/log.html +1 -1
  71. package/dist/.next/server/app/log.rsc +4 -4
  72. package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
  73. package/dist/.next/server/app/projects/page.js +1 -1
  74. package/dist/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  75. package/dist/.next/server/app/projects.html +1 -1
  76. package/dist/.next/server/app/projects.rsc +4 -4
  77. package/dist/.next/server/app/radar/page.js +1 -64
  78. package/dist/.next/server/app/radar/page.js.nft.json +1 -1
  79. package/dist/.next/server/app/radar/page_client-reference-manifest.js +1 -1
  80. package/dist/.next/server/app/radar.html +1 -1
  81. package/dist/.next/server/app/radar.rsc +4 -4
  82. package/dist/.next/server/app/report/page.js +2 -2
  83. package/dist/.next/server/app/report/page.js.nft.json +1 -1
  84. package/dist/.next/server/app/report/page_client-reference-manifest.js +1 -1
  85. package/dist/.next/server/app/report.html +1 -1
  86. package/dist/.next/server/app/report.rsc +4 -4
  87. package/dist/.next/server/app/settings/page.js +1 -1
  88. package/dist/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  89. package/dist/.next/server/app/settings.html +1 -1
  90. package/dist/.next/server/app/settings.rsc +4 -4
  91. package/dist/.next/server/app/sites/page.js +1 -1
  92. package/dist/.next/server/app/sites/page_client-reference-manifest.js +1 -1
  93. package/dist/.next/server/app/sites.html +1 -1
  94. package/dist/.next/server/app/sites.rsc +4 -4
  95. package/dist/.next/server/app/welcome/page_client-reference-manifest.js +1 -1
  96. package/dist/.next/server/app/welcome.html +1 -1
  97. package/dist/.next/server/app/welcome.rsc +4 -4
  98. package/dist/.next/server/app-paths-manifest.json +20 -20
  99. package/dist/.next/server/chunks/2346.js +1 -1
  100. package/dist/.next/server/chunks/2465.js +64 -1
  101. package/dist/.next/server/chunks/2817.js +1 -1
  102. package/dist/.next/server/chunks/4825.js +1 -0
  103. package/dist/.next/server/chunks/572.js +1 -1
  104. package/dist/.next/server/chunks/6992.js +1 -1
  105. package/dist/.next/server/chunks/7511.js +1 -1
  106. package/dist/.next/server/chunks/7719.js +1 -1
  107. package/dist/.next/server/chunks/8134.js +1 -1
  108. package/dist/.next/server/chunks/8150.js +1 -1
  109. package/dist/.next/server/chunks/876.js +1 -1
  110. package/dist/.next/server/chunks/9170.js +1 -1
  111. package/dist/.next/server/middleware-build-manifest.js +1 -1
  112. package/dist/.next/server/middleware-manifest.json +5 -5
  113. package/dist/.next/server/pages/404.html +1 -1
  114. package/dist/.next/server/pages/500.html +1 -1
  115. package/dist/.next/server/server-reference-manifest.json +1 -1
  116. package/dist/.next/static/chunks/{1255-612df69cb02f2021.js → 1255-fc6c00ab2f765339.js} +1 -1
  117. package/dist/.next/static/chunks/3192-40ade9877c89ec45.js +1 -0
  118. package/dist/.next/static/chunks/5623-53fb7cea5de0afef.js +1 -0
  119. package/dist/.next/static/chunks/7897-b9c15e8805df61ef.js +1 -0
  120. package/dist/.next/static/chunks/8050-a75457e83cd8be0f.js +1 -0
  121. package/dist/.next/static/chunks/app/ahead/page-75602559f92be6c4.js +1 -0
  122. package/dist/.next/static/chunks/app/connections/page-ff9d0b4e4fcf5ebe.js +1 -0
  123. package/dist/.next/static/chunks/app/discoveries/{page-52696e6ee0c8d3d5.js → page-6b06c0c2a94f3b94.js} +1 -1
  124. package/dist/.next/static/chunks/app/{error-37987420de14c10c.js → error-c67c297ef2dd70de.js} +1 -1
  125. package/dist/.next/static/chunks/app/log/page-842048c36f071dd6.js +1 -0
  126. package/dist/.next/static/chunks/app/projects/{page-75a41d4a90675d93.js → page-1d6b330842a2ff80.js} +1 -1
  127. package/dist/.next/static/chunks/app/radar/page-584b42327baac21b.js +1 -0
  128. package/dist/.next/static/chunks/app/report/page-9dc52d7f76569e42.js +1 -0
  129. package/dist/.next/static/chunks/app/settings/{page-a38c457b7c57567b.js → page-582279bf3fe509d4.js} +1 -1
  130. package/dist/.next/static/chunks/app/sites/page-3dcc5a0990fae677.js +1 -0
  131. package/dist/.next/static/chunks/{main-6828c74376f2b965.js → main-574ae5bf2f2165c4.js} +1 -1
  132. package/dist/.next/static/css/fbb4cf81dde34731.css +1 -0
  133. package/dist/build-id.json +145 -147
  134. package/dist/node_modules/@next/env/package.json +1 -1
  135. package/dist/node_modules/next/dist/build/swc/index.js +1 -1
  136. package/dist/node_modules/next/dist/build/webpack-config.js +2 -2
  137. package/dist/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +2 -2
  138. package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +2 -2
  139. package/dist/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +2 -2
  140. package/dist/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +2 -2
  141. package/dist/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +1 -1
  142. package/dist/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +7 -7
  143. package/dist/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +2 -2
  144. package/dist/node_modules/next/dist/lib/has-necessary-dependencies.js +2 -0
  145. package/dist/node_modules/next/dist/lib/verify-typescript-setup.js +19 -0
  146. package/dist/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +1 -1
  147. package/dist/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  148. package/dist/node_modules/next/dist/server/image-optimizer.js +22 -2
  149. package/dist/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  150. package/dist/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +17 -4
  151. package/dist/node_modules/next/dist/server/lib/start-server.js +1 -1
  152. package/dist/node_modules/next/dist/shared/lib/canary-only.js +1 -1
  153. package/dist/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +1 -1
  154. package/dist/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  155. package/dist/node_modules/next/dist/telemetry/events/version.js +2 -2
  156. package/dist/node_modules/next/package.json +11 -11
  157. package/dist/package.json +2 -2
  158. package/dist/shell/bin/af360-bridge.exe +0 -0
  159. package/lib/mcpActivity.mjs +1 -0
  160. package/package.json +2 -2
  161. package/scripts/mcp-server.mjs +174 -2
  162. package/shell/bin/af360-bridge.exe +0 -0
  163. package/dist/.next/server/chunks/1155.js +0 -1
  164. package/dist/.next/server/chunks/6584.js +0 -1
  165. package/dist/.next/static/chunks/1681-b233404f9ec2fc2e.js +0 -1
  166. package/dist/.next/static/chunks/2036-e29441d605c493a4.js +0 -1
  167. package/dist/.next/static/chunks/3192-6b341d547a49fa85.js +0 -1
  168. package/dist/.next/static/chunks/5623-ec4f1a6f7695d8d1.js +0 -1
  169. package/dist/.next/static/chunks/7897-6e6c509aea495560.js +0 -1
  170. package/dist/.next/static/chunks/app/ahead/page-e72bed448dd40bd5.js +0 -1
  171. package/dist/.next/static/chunks/app/connections/page-5d6cae02e6f2b49a.js +0 -1
  172. package/dist/.next/static/chunks/app/log/page-45b4cfd8f1a29d09.js +0 -1
  173. package/dist/.next/static/chunks/app/radar/page-4b4aad549dffcd3a.js +0 -1
  174. package/dist/.next/static/chunks/app/report/page-145496e8f0d5bc86.js +0 -1
  175. package/dist/.next/static/chunks/app/sites/page-96a7dcf3c1e9aa19.js +0 -1
  176. package/dist/.next/static/css/94d302c686de7e23.css +0 -1
  177. /package/dist/.next/static/{da1c2e66999c334d135d9 → 4602553707d90d0fadeba}/_buildManifest.js +0 -0
  178. /package/dist/.next/static/{da1c2e66999c334d135d9 → 4602553707d90d0fadeba}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";exports.id=8150,exports.ids=[6995,8150],exports.modules={1232:(a,b,c)=>{c.d(b,{dK:()=>e,fI:()=>function a(b,c=0){if("string"==typeof b)return e(b);if(null===b||"object"!=typeof b)return b;if(c>=12)return"[too deeply nested for af360 to mask - not shown]";if(Array.isArray(b))return b.map(b=>a(b,c+1));let d={};for(let[f,g]of Object.entries(b))d[e(f)]=a(g,c+1);return d}});let d="[secret masked]";function e(a){let b=a;return(b=(b=(b=(b=(b=(b=(b=(b=(b=b.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,d)).replace(/\b([A-Za-z0-9_.-]*(?:SECRET|TOKEN|PASSWORD|PASSWD|API[_-]?KEY|APIKEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|CLIENT[_-]?SECRET|AUTH|CREDENTIAL|[A-Z0-9]_KEY|^KEY)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(a,b,c)=>`${b}${c}${d}`)).replace(/\b([A-Za-z0-9_.-]*(?:URL|URI|DSN|CONN)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(a,b,c)=>/[A-Za-z]/.test(b)&&(b.includes("_")||b===b.toUpperCase())?`${b}${c}${d}`:a)).replace(/\b([A-Za-z][A-Za-z0-9+.-]*):\/\/([^\s/:@]{1,128}):([^\s/@]{1,256})@/g,(a,b,c)=>`${b}://${c}:${d}@`).replace(/(^|[\s(<'"`=,])([A-Za-z0-9._%+-]{1,64}):([^\s:@/\\]{4,128})@((?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}|\d{1,3}(?:\.\d{1,3}){3}|localhost)(?=[:/?\s'"`)>,]|$)/g,(a,b,c,e,f)=>`${b}${c}:${d}@${f}`)).replace(/gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}/g,d)).replace(/(?<![A-Za-z0-9])(AKIA[0-9A-Z]{12,}|ASIA[0-9A-Z]{12,}|sk_(?:live|test)_[0-9A-Za-z]{10,}|rk_(?:live|test)_[0-9A-Za-z]{10,}|pk_live_[0-9A-Za-z]{10,}|glpat-[A-Za-z0-9_-]{16,}|AIza[0-9A-Za-z_-]{30,}|ya29\.[0-9A-Za-z_-]{20,}|xox[baprs]-[0-9A-Za-z-]{8,}|npm_[A-Za-z0-9]{30,}|dop_v1_[a-f0-9]{40,}|SG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}|hf_[A-Za-z0-9]{30,}|sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{32,})(?![A-Za-z0-9])/g,d)).replace(/\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]{12,}/gi,(a,b)=>`${b} ${d}`)).replace(/(?<![A-Za-z0-9])eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}(?![A-Za-z0-9])/g,d)).replace(/(?<![A-Za-z0-9])[0-9a-f]{32,}(?![A-Za-z0-9])/gi,d)).replace(/(?<![A-Za-z0-9])[A-Za-z0-9+/]{40,}={0,2}(?![A-Za-z0-9+/=])/g,d)}},4683:(a,b,c)=>{c.d(b,{APP_CONFIGURED:()=>h,II:()=>k,f2:()=>l,Zd:()=>t,Re:()=>s});var d=c(73024),e=c(76760);let f=["githubClientId"],g=process.env.AF360_GITHUB_CLIENT_ID??function(){let a=function(){let a,b;try{a=(0,d.readFileSync)(function(){let a=process.env.AF360_APP_IDENTITY;return a||e.join(void 0,"app-identity.json")}(),"utf8")}catch{return{ok:!1,reason:"af360 could not read its own app identity file"}}try{b=JSON.parse(a)}catch{return{ok:!1,reason:"af360's app identity file is not readable JSON"}}if(!b||"object"!=typeof b||Array.isArray(b))return{ok:!1,reason:"af360's app identity file is not a JSON object"};let c=Object.keys(b).filter(a=>!f.includes(a));if(c.length>0)return{ok:!1,reason:`af360's app identity file carries a key that may not ship: ${c.join(", ")}`};let g=b.githubClientId;return"string"!=typeof g||0===g.length?{ok:!1,reason:"af360's app identity file carries no GitHub client id"}:{ok:!0,githubClientId:g}}();return a.ok&&a.githubClientId?a.githubClientId:"REPLACE_WITH_APP_CLIENT_ID"}(),h=!g.startsWith("REPLACE_WITH"),i="https://github.com",j=`${i}/login/device`,k=process.env.AF360_GITHUB_APP_SLUG??"af360-app",l=Object.freeze({arrived:"GitHub's answer arrived on this machine",declined:"you declined the authorization on GitHub - nothing was stored",refused:"GitHub refused the authorization - nothing was stored",expired:"the sign-in code expired before it was used, so af360 stopped asking - nothing was stored",cancelled:"you cancelled the authorization in af360 - nothing was stored",issued:"GitHub issued a sign-in code and af360 is waiting for you to enter it","slow-down":"GitHub asked af360 to check less often, and af360 slowed down"});Object.freeze(["issued","slow-down"]);let m=Object.freeze({expired_token:"that sign-in code had expired before it was used - press Connect to get a fresh one",access_denied:"the sign-in was declined on GitHub, so nothing was stored",incorrect_device_code:"GitHub did not recognise this sign-in attempt, so nothing was stored - press Connect to start a fresh one",unsupported_grant_type:"GitHub would not accept the way af360 asked, so nothing was stored - this is af360's own registration and not something to fix here",device_flow_disabled:"GitHub says device sign-in is turned off for af360, so nothing was stored - this is af360's own registration and not something to fix here",incorrect_client_credentials:"GitHub did not recognise af360 itself, so nothing was stored - this is af360's own registration and not something to fix here",unverified_user_email:"GitHub needs a verified email address on your account before it will complete this"});function n(a){return m[a]??"GitHub refused to complete the sign-in, so nothing was stored - press Connect to try again"}let o=Object.freeze({access_denied:"declined",expired_token:"expired"});async function p(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),15e3);try{return await q(a,b,c)}finally{clearTimeout(d)}}async function q(a,b,c){let d,e;try{d=await fetch(`${i}${a}`,{method:"POST",signal:c.signal,redirect:"error",headers:{accept:"application/json","content-type":"application/x-www-form-urlencoded","user-agent":"af360"},body:new URLSearchParams(b).toString()})}catch(a){return{ok:!1,reason:a?.name==="AbortError"?"GitHub did not answer in time":"this machine could not reach GitHub"}}if(!d.ok){var f;return{ok:!1,reason:404===(f=d.status)?"GitHub did not recognise af360's app registration":401===f||403===f?"GitHub would not accept af360's app credentials":`GitHub answered ${f}`}}try{e=await d.json()}catch(a){if(a?.name==="AbortError")return{ok:!1,reason:"GitHub did not answer in time"};return{ok:!1,reason:"GitHub's answer was not readable"}}return e&&"object"==typeof e?{ok:!0,json:e}:{ok:!1,reason:"GitHub's answer was not readable"}}let r=(a,b)=>"number"==typeof a&&Number.isFinite(a)&&a>0?a:b;async function s(){let a=await p("/login/device/code",{client_id:g});if(!a.ok)return a;let b=a.json;if("string"==typeof b.error)return{ok:!1,reason:n(b.error)};let c="string"==typeof b.device_code?b.device_code:"",d="string"==typeof b.user_code?b.user_code:"";return c&&d?{ok:!0,device:{deviceCode:c,userCode:d,verificationUri:"string"==typeof b.verification_uri&&b.verification_uri?b.verification_uri:j,expiresAt:Date.now()+1e3*r(b.expires_in,900),intervalMs:Math.max(5e3,1e3*r(b.interval,5))}}:{ok:!1,reason:"GitHub did not send a sign-in code"}}async function t(a,b={}){let c=b.cancelled??(()=>!1),d=b.sleep??(a=>new Promise(b=>setTimeout(b,a))),e=a.intervalMs;for(;;){if(c())return{ok:!1,ending:"cancelled",reason:l.cancelled};if(Date.now()>=a.expiresAt)return{ok:!1,ending:"expired",reason:l.expired};if(await d(e),c())return{ok:!1,ending:"cancelled",reason:l.cancelled};let f=await p("/login/oauth/access_token",{client_id:g,device_code:a.deviceCode,grant_type:"urn:ietf:params:oauth:grant-type:device_code"});if(!f.ok)continue;let h=f.json,i="string"==typeof h.error?h.error:"";if("authorization_pending"===i)continue;if("slow_down"===i){e=Math.max(5e3,("number"==typeof h.interval&&Number.isFinite(h.interval)&&h.interval>0?1e3*h.interval:0)||e+5e3),b.onEnding?.("slow-down");continue}if(i)return{ok:!1,ending:o[i]??"refused",reason:n(i)};let j="string"==typeof h.access_token?h.access_token:"";if(!j)return{ok:!1,ending:"refused",reason:"GitHub returned no access token"};let k=Date.now();return{ok:!0,ending:"arrived",tokens:{accessToken:j,accessExpiresAt:"number"==typeof h.expires_in&&Number.isFinite(h.expires_in)&&h.expires_in>0?k+1e3*h.expires_in:0,refreshToken:"",refreshExpiresAt:0}}}}},18150:(a,b,c)=>{c.d(b,{PC:()=>B,y6:()=>M,github:()=>y,state:()=>J,M_:()=>L,ZL:()=>F,fn:()=>I});var d=c(1232);let e=a=>({ok:!0,value:a}),f=(a,b)=>({ok:!1,kind:a,reason:(0,d.dK)(b)}),g="https://api.github.com";async function h(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),8e3);try{return await i(a,b,c)}finally{clearTimeout(d)}}async function i(a,b,c){let d,h,i;try{d=await fetch(g+a,{signal:c.signal,redirect:"manual",headers:{authorization:`Bearer ${b}`,accept:"application/vnd.github+json","x-github-api-version":"2022-11-28","user-agent":"af360"}})}catch(c){if(c?.name==="AbortError")return f("timeout","GitHub did not answer in time");let a=c?.code??c?.name,b="string"==typeof a&&/^[A-Z][A-Z0-9_]{2,31}$/.test(a)?a:null;return f("unreachable",b?`af360 could not open a connection to GitHub (${b})`:"af360 could not open a connection to GitHub")}if(301===d.status||308===d.status){let a=function(a){let b;if(!a)return null;try{b=new URL(a,g)}catch{return null}if(b.origin!==new URL(g).origin)return null;let c=b.pathname.replace(/^\/+/,"").split("/").filter(Boolean);if(3!==c.length||"repos"!==c[0])return null;let[,d,e]=c,f=a=>/^[A-Za-z0-9._-]{1,100}$/.test(a)&&"."!==a&&".."!==a;return f(d)&&f(e)?`${d}/${e}`:null}(d.headers.get("location"));return f("moved",a?`GitHub now calls this repository ${a}`:"GitHub says this repository has moved, and did not say where")}let k=d.headers.get("github-authentication-token-expiration"),l=d.headers.get("x-oauth-scopes"),m=d.headers.get("x-ratelimit-remaining"),n=null===m?null:Number.parseInt(m,10);if((403===d.status||429===d.status)&&0===n)return f("ratelimited","your GitHub rate limit is spent - it refills on its own");if(401===d.status)return f("unauthorized","GitHub did not accept the token - it may have been revoked or have expired");if(d.status>=500)return f("down",`GitHub answered ${d.status}`);try{h=await j(d)}catch(a){if(a?.name==="AbortError")return f("timeout","GitHub did not answer in time");throw a}if(null===h)return f("down","GitHub's answer was larger than af360 will read");if(!d.ok)return f(404===d.status||403===d.status?"forbidden":"down",404===d.status?"GitHub has no repository there that this token can see":"GitHub accepted the token but this is outside what it was granted");try{i=JSON.parse(h)}catch{return f("down","GitHub's answer was not readable")}return e({body:i,tokenExpiry:k,oauthScopes:l,rateRemaining:n})}async function j(a){let b=Number.parseInt(a.headers.get("content-length")??"",10);if(Number.isFinite(b)&&b>524288)return null;let c=a.body?.getReader();if(!c)return await a.text();let d=[],e=0;for(;;){let{done:a,value:b}=await c.read();if(a)break;if(b){if((e+=b.byteLength)>524288)return await c.cancel().catch(()=>{}),null;d.push(b)}}let f=new Uint8Array(e),g=0;for(let a of d)f.set(a,g),g+=a.byteLength;return new TextDecoder("utf-8").decode(f)}let k=a=>encodeURIComponent(a),l=(a,b)=>h(`/user/installations/${encodeURIComponent(String(a))}/repositories?per_page=100`,b);var m=c(71011),n=c(46995);let o="dpapi:v1:",p=new Map;async function q(a){if("string"!=typeof a||!a)return{stored:a,encrypted:!1};let b=await (0,n.bridge)("protect",a);if(!b.ok)return{stored:a,encrypted:!1,reason:b.reason};let c=o+b.out;return p.set(c,a),{stored:c,encrypted:!0}}async function r(a){if("string"!=typeof a||!a)return{ok:!1,reason:"empty"};if(!("string"==typeof a&&a.startsWith(o)))return{ok:!0,token:a,encrypted:!1};let b=p.get(a);if(void 0!==b)return{ok:!0,token:b,encrypted:!0};let c=await (0,n.bridge)("unprotect",a.slice(o.length));return c.ok?(p.set(a,c.out),{ok:!0,token:c.out,encrypted:!0}):{ok:!1,reason:c.reason,encrypted:!0}}let s={unreachable:"not checked this scan - af360 could not open a connection to GitHub",down:"not checked this scan - GitHub did not answer properly",expired:"not checked this scan - the GitHub token has expired",unauthorized:"not checked this scan - GitHub would not accept the token",forbidden:"not checked this scan - the token is fine, but this is outside what af360 was granted",ratelimited:"not checked this scan - your GitHub rate limit is spent",timeout:"not checked this scan - GitHub did not answer in time",moved:"not checked - your remote points at a name GitHub has moved, and it will stay unchecked until the remote is updated","past-ceiling":"not checked - af360 asks GitHub about a limited number of repositories each scan, and this one is past that"},t={unreachable:"no connection",down:"GitHub down",expired:"token expired",unauthorized:"token refused",forbidden:"not granted",ratelimited:"rate limit",timeout:"no answer",moved:"remote moved","past-ceiling":"past the scan limit"};Object.fromEntries(Object.keys(t).map(a=>[a,`GitHub not checked (${t[a]})`]));var u=c(4683);let v=new Set(["read:org","read:user","read:packages","read:discussion","read:project","read:audit_log","read:gpg_key","read:public_key","user:email","read:enterprise","read:network"]),w=new Set(["read"]);async function x(a,b,c,d){var g;let i,j=await h(`/repos/${k(b)}/${k(c)}`,d);if(!j.ok)return f(j.kind,j.reason);let l="string"==typeof j.value.body.default_branch?j.value.body.default_branch:null,m=a.branch||l;if(!m)return f("down","GitHub did not name a default branch and local git did not name one either");let[n,o,p]=await Promise.all([h(`/repos/${k(b)}/${k(c)}/actions/runs?branch=${k(m)}&per_page=1&exclude_pull_requests=true`,d),h(`/repos/${k(b)}/${k(c)}/pulls?state=open&per_page=100`,d),(g=a).statusKnown&&0===g.ahead&&0===g.behind&&g.headSha?h(`/repos/${k(b)}/${k(c)}/branches/${k(m)}`,d):Promise.resolve(null)]),q=n.ok?e(function(a,b){if(!a)return null;let c=Date.parse(a.updated_at??a.created_at??""),d=a.conclusion??null;return{state:"success"===d?"passing":"failure"===d||"timed_out"===d||"startup_failure"===d?"failing":null===d?"running":"other",conclusion:d,workflow:"string"==typeof a.name&&a.name?a.name:"a workflow",branch:a.head_branch||b,at:Number.isFinite(c)?c:Date.now(),runNumber:"number"==typeof a.run_number?a.run_number:null}}(n.value.body?.workflow_runs?.[0],m)):f(n.kind,n.reason),r=o.ok?o.value.body??[]:null,s=o.ok?e((o.value.body??[]).length):f(o.kind,o.reason),t=null!==r&&r.length>=100,u="number"==typeof j.value.body.open_issues_count?j.value.body.open_issues_count:null;return i=null===u?f("down","GitHub did not say how many issues are open"):o.ok?e(Math.max(0,u-(r?.length??0))):f(o.kind,"af360 could not separate issues from pull requests this scan"),e({owner:b,name:c,fullName:j.value.body.full_name??`${b}/${c}`,defaultBranch:l,branch:m,ci:q,prCount:s,prCapped:t,issueCount:i,backup:function(a,b,c){if(!a.statusKnown)return{verdict:"unmeasured",reason:"local git did not finish answering, so there was nothing to confirm against"};if(!a.headSha)return{verdict:"unmeasured",reason:"af360 could not read this project's current commit"};if(null===a.ahead||null===a.behind)return{verdict:"unmeasured",reason:"local git did not report this branch's position against its remote"};if(a.ahead>0)return{verdict:"unmeasured",reason:"local git already reports commits that are not pushed - there is no claim to confirm"};if(a.behind>0)return{verdict:"unmeasured",reason:"this machine is behind its remote, so the two tips are expected to differ"};if(!c)return{verdict:"unmeasured",reason:"af360 did not ask GitHub for this branch"};if(!c.ok)return{verdict:"unmeasured",reason:c.reason};let d=c.value.body.commit?.sha;return"string"==typeof d&&d?d===a.headSha?{verdict:"confirmed",sha:d,branch:b}:{verdict:"refuted",localSha:a.headSha,remoteSha:d,branch:b}:{verdict:"unmeasured",reason:"GitHub did not name a commit for that branch"}}(a,m,p)})}let y={id:"github",label:"GitHub",host:"api.github.com",verify:async function a(a){let b,c=await h("/user",a);if(!c.ok)return{kind:"unreached",unreached:c.kind,reason:c.reason};let d="string"==typeof c.value.body.login?c.value.body.login:"";if(!d)return{kind:"unreached",unreached:"down",reason:"GitHub did not say who this token belongs to"};if(c.value.oauthScopes){let b=function(a){let b=a.split(",").map(a=>a.trim()).filter(Boolean);if(0===b.length)return{readOnly:!0,detail:"a classic token with no scopes - it can read public repositories only"};let c=b.filter(a=>!v.has(a));return 0===c.length?{readOnly:!0,detail:`classic token, read-only scopes (${b.join(", ")})`}:{readOnly:!1,detail:`it carries the ${c.join(", ")} scope${1===c.length?"":"s"}, which can write`}}(c.value.oauthScopes);if(!b.readOnly)return{kind:"refused-write",detail:b.detail};let e=await h("/user/repos?per_page=100&sort=pushed",a);if(!e.ok)return{kind:"unreached",unreached:e.kind,reason:`${e.reason} - af360 could not check what this token can reach, so nothing was stored`};let f=function(a){let b=a.filter(a=>a.permissions?.push||a.permissions?.admin||a.permissions?.maintain);if(0===b.length)return{readOnly:!0,detail:`fine-grained token, read-only on all ${a.length} repositor${1===a.length?"y":"ies"} it can see`};let c=b.slice(0,3).map(a=>a.full_name??"a repository").join(", "),d=b.length>3?` and ${b.length-3} more`:"";return{readOnly:!1,detail:`it can push to ${c}${d}`}}(e.value.body??[]);return f.readOnly?{kind:"ok",login:d,scopesRead:!0,expiryKnown:!1,repoNames:(e.value.body??[]).map(a=>a.full_name??"").filter(Boolean)}:{kind:"refused-write",detail:f.detail}}let e=await h("/user/installations?per_page=100",a);if(!e.ok)return{kind:"unreached",unreached:e.kind,reason:`${e.reason} - af360 could not check what it was granted, so nothing was stored`};let f=e.value.body.installations??[],g=f.filter(a=>a.app_slug===u.II);if(f.length>0&&0===g.length)return{kind:"unreached",unreached:"down",reason:`GitHub returned ${f.length} installation${1===f.length?"":"s"}, none of them af360's own, so af360 could not confirm the grant it was reading was its own - nothing was stored`};let i=function(a){if(0===a.length)return{readOnly:!0,detail:"the App is authorized but not installed on any account yet"};let b=[];for(let c of a)for(let[a,d]of Object.entries(c.permissions??{}))w.has(String(d).toLowerCase())||b.push(`${a}: ${d}${c.account?.login?` on ${c.account.login}`:""}`);return 0===b.length?{readOnly:!0,detail:`the App is installed read-only on ${a.length} account${1===a.length?"":"s"}`}:{readOnly:!1,detail:`the installation grants ${b.slice(0,3).join(", ")}${b.length>3?` and ${b.length-3} more`:""}`}}(g);if(!i.readOnly)return{kind:"refused-write",detail:i.detail};let j=[],k=0;for(let c of g){if("number"!=typeof c.id)continue;b??=c.id;let d=await l(c.id,a);if(!d.ok){k++;continue}for(let a of d.value.body.repositories??[])a.full_name&&j.push(a.full_name)}return{kind:"ok",login:d,repoNames:j,scopesRead:!0,expiryKnown:!1,installationId:b,installationCount:g.length,reposUnread:k}},facts:async function a(a){let b,c=Date.now(),d=await I();if(!d)return{at:c,byPath:{},outage:{kind:"unauthorized",reason:"af360 holds no GitHub token"}};if(d.expiresAt&&Date.parse(d.expiresAt)<=c)return{at:c,byPath:{},outage:{kind:"expired",reason:"the GitHub token's expiry date has passed"}};let e=a.map(a=>({s:a,repo:function(a){if(!a)return null;let b=a.trim(),c=null,d=null,e=/^(?:[A-Za-z0-9._-]+@)?([A-Za-z0-9._-]+):(.+)$/.exec(b);if(e&&!/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(b))c=e[1].toLowerCase(),d=e[2];else try{let a=new URL(b);c=a.hostname.toLowerCase(),d=a.pathname}catch{return null}if("github.com"!==c&&"www.github.com"!==c)return null;let f=(d??"").replace(/^\/+/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(2!==f.length)return null;let[g,h]=f,i=a=>/^[A-Za-z0-9._-]{1,100}$/.test(a)&&"."!==a&&".."!==a;return i(g)&&i(h)?{owner:g,name:h}:null}(a.remoteUrl)})).filter(a=>null!==a.repo),g={},h=e.slice(0,25);for(let a of e.slice(25))g[a.s.path.toLowerCase()]=f("past-ceiling","af360 asks GitHub about at most 25 repositories in one scan, and this one was past that");let i=0,j=Array.from({length:Math.min(4,h.length)},async()=>{for(;;){if(b)return;let a=i++;if(a>=h.length)return;let{s:c,repo:e}=h[a],f=await x(c,e.owner,e.name,d.token);if(!f.ok&&("ratelimited"===f.kind||"expired"===f.kind)){b={kind:f.kind,reason:f.reason};return}g[c.path.toLowerCase()]=f}});return await Promise.all(j),{at:c,byPath:g,outage:b}},expiry:function(a){return a.connected&&a.expiryKnown&&a.expiresAt&&Number.isFinite(Date.parse(a.expiresAt))?{id:"connector:github",name:"GitHub token (af360 stops seeing CI, PRs and issues)",date:a.expiresAt}:null},unmeasuredLine:a=>s[a]},z=null,A=null,B="This build of af360 has no GitHub App registration, so it cannot renew access",C=0,D=6e4;function E(a,b){C=b+D,D=Math.min(2*D,18e5),A!==a&&(A=a,z={ok:!1,reason:a})}function F(){let a=z;return z=null,a}async function G(a){let b=await r(a.token);if(!b.ok)return null;let c=a.refreshToken;if(c){let a=await r(c);c=a.ok?a.token:void 0}return{...a,token:b.token,refreshToken:c}}async function H(a){let b={...a,token:(await q(a.token)).stored};return a.refreshToken&&(b.refreshToken=(await q(a.refreshToken)).stored),b}async function I(a=Date.now()){try{let b=await (0,m.G5)(),d=b.config?.connectors?.github;if(!d||"string"!=typeof d.token||!d.token)return null;let e=await G(d);if(!e)return null;let f=e.expiresAt?Date.parse(e.expiresAt):NaN;if(!Number.isFinite(f)||f-a>3e5)return A=null,C=0,D=6e4,e;if(!e.refreshToken)return e;let{APP_CONFIGURED:g}=await Promise.resolve().then(c.bind(c,4683));if(!g)return E(B,a),e;if(A&&a<C)return e;return E("af360 cannot renew this sign-in with GitHub - press Connect to sign in again",a),e}catch{return null}}async function J(){let a,b={id:y.id,label:y.label,connected:!1},d=null;try{let a=await (0,m.G5)();d=a.config?.connectors?.github??null}catch{return b}if(!d?.token)return b;if(!(await r(d.token)).ok)return{...b,connected:!0,unreadable:!0,login:d.login,repoNames:d.repoNames,repoCount:d.repoNames?.length,connectedAt:d.connectedAt};let e=!1;try{let{cachedGithubScan:b}=await c.e(6988).then(c.bind(c,26988)),d=await b(),f=d?.outage?.kind;if(!f){for(let a of Object.values(d?.byPath??{}))if(!a.ok&&("unauthorized"===a.kind||"expired"===a.kind)){f=a.kind;break}}("unauthorized"===f||"expired"===f)&&(a=f),d&&!d.outage&&(e=Object.values(d.byPath??{}).some(a=>a.ok))}catch{}return K&&(e=!0),{...b,connected:!0,refusal:a,verified:e,login:d.login,repoNames:d.repoNames,repoCount:d.repoNames?.length,reposKnown:d.reposKnown,installationCount:d.installationCount,expiryKnown:!1,connectedAt:d.connectedAt}}let K=!1;async function L(a,b,c){let d=await (0,m.G5)();if("unreadable"===d.status||!d.config)throw Error("af360 could not read its own settings, so it did not store anything");let e=d.config;e.connectors={...e.connectors,github:await H({token:a,login:b.login,repoNames:b.repoNames,reposKnown:(b.reposUnread??0)===0,installationId:b.installationId,installationCount:b.installationCount,connectedAt:Date.now(),...c?{expiresAt:new Date(c.expiresAt).toISOString(),refreshToken:c.refreshToken,refreshExpiresAt:new Date(c.refreshExpiresAt).toISOString()}:{}})},await (0,m.ql)(e),K=!0}async function M(){var a;let b=await (0,m.G5)();if("unreadable"===b.status||!b.config)throw Error("af360 could not read its own settings, so it changed nothing");let c=b.config;"string"==typeof(a=c.connectors?.github?.token)?p.delete(a):p.clear(),c.connectors&&delete c.connectors.github,await (0,m.ql)(c),K=!1}},46995:(a,b,c)=>{c.d(b,{$:()=>i,bridge:()=>k});var d=c(79646),e=c(29021),f=c(33873),g=c(79551);let h=f.resolve(f.dirname((0,g.fileURLToPath)("file:///C:/dev/af360/lib/bridge.mjs")),"..");function i(){let a=process.env.AF360_BRIDGE;return a?(0,e.existsSync)(a)?a:null:j()}function j(){for(let a of[f.join(h,"af360-bridge.exe"),f.join(h,"shell","bin","af360-bridge.exe")])if((0,e.existsSync)(a))return a;return null}function k(a,b="",{fixedPath:c=!1,timeout:e=15e3}={}){let f=c?j():i();return f?new Promise(c=>{let g=(0,d.execFile)(f,[a],{windowsHide:!0,timeout:e,maxBuffer:1e6},(a,b,d)=>{if(a)return void c({ok:!1,reason:String(d||"").trim()||(a.killed?"timeout":"failed")});c({ok:!0,out:String(b||"").trim()})});g.stdin.on("error",()=>{}),g.stdin.end(b)}):Promise.resolve({ok:!1,reason:"absent"})}}};
1
+ "use strict";exports.id=8150,exports.ids=[6995,8150],exports.modules={1232:(a,b,c)=>{c.d(b,{dK:()=>e,fI:()=>function a(b,c=0){if("string"==typeof b)return e(b);if(null===b||"object"!=typeof b)return b;if(c>=12)return"[too deeply nested for af360 to mask - not shown]";if(Array.isArray(b))return b.map(b=>a(b,c+1));let d={};for(let[f,g]of Object.entries(b))d[e(f)]=a(g,c+1);return d}});let d="[secret masked]";function e(a){let b=a;return(b=(b=(b=(b=(b=(b=(b=(b=(b=b.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,d)).replace(/\b([A-Za-z0-9_.-]*(?:SECRET|TOKEN|PASSWORD|PASSWD|API[_-]?KEY|APIKEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|CLIENT[_-]?SECRET|AUTH|CREDENTIAL|[A-Z0-9]_KEY|^KEY)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(a,b,c)=>`${b}${c}${d}`)).replace(/\b([A-Za-z0-9_.-]*(?:URL|URI|DSN|CONN)[A-Za-z0-9_.-]*)(\s*[:=]\s*)(["'`]?)([^\s"'`,;]{4,})\3/gi,(a,b,c)=>/[A-Za-z]/.test(b)&&(b.includes("_")||b===b.toUpperCase())?`${b}${c}${d}`:a)).replace(/\b([A-Za-z][A-Za-z0-9+.-]*):\/\/([^\s/:@]{1,128}):([^\s/@]{1,256})@/g,(a,b,c)=>`${b}://${c}:${d}@`).replace(/(^|[\s(<'"`=,])([A-Za-z0-9._%+-]{1,64}):([^\s:@/\\]{4,128})@((?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}|\d{1,3}(?:\.\d{1,3}){3}|localhost)(?=[:/?\s'"`)>,]|$)/g,(a,b,c,e,f)=>`${b}${c}:${d}@${f}`)).replace(/gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}/g,d)).replace(/(?<![A-Za-z0-9])(AKIA[0-9A-Z]{12,}|ASIA[0-9A-Z]{12,}|sk_(?:live|test)_[0-9A-Za-z]{10,}|rk_(?:live|test)_[0-9A-Za-z]{10,}|pk_live_[0-9A-Za-z]{10,}|glpat-[A-Za-z0-9_-]{16,}|AIza[0-9A-Za-z_-]{30,}|ya29\.[0-9A-Za-z_-]{20,}|xox[baprs]-[0-9A-Za-z-]{8,}|npm_[A-Za-z0-9]{30,}|dop_v1_[a-f0-9]{40,}|SG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}|hf_[A-Za-z0-9]{30,}|sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{32,})(?![A-Za-z0-9])/g,d)).replace(/\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]{12,}/gi,(a,b)=>`${b} ${d}`)).replace(/(?<![A-Za-z0-9])eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}(?![A-Za-z0-9])/g,d)).replace(/(?<![A-Za-z0-9])[0-9a-f]{32,}(?![A-Za-z0-9])/gi,d)).replace(/(?<![A-Za-z0-9])[A-Za-z0-9+/]{40,}={0,2}(?![A-Za-z0-9+/=])/g,d)}},4683:(a,b,c)=>{c.d(b,{APP_CONFIGURED:()=>h,II:()=>k,f2:()=>l,Zd:()=>t,Re:()=>s});var d=c(73024),e=c(76760);let f=["githubClientId"],g=process.env.AF360_GITHUB_CLIENT_ID??function(){let a=function(){let a,b;try{a=(0,d.readFileSync)(function(){let a=process.env.AF360_APP_IDENTITY;return a||e.join(void 0,"app-identity.json")}(),"utf8")}catch{return{ok:!1,reason:"af360 could not read its own app identity file"}}try{b=JSON.parse(a)}catch{return{ok:!1,reason:"af360's app identity file is not readable JSON"}}if(!b||"object"!=typeof b||Array.isArray(b))return{ok:!1,reason:"af360's app identity file is not a JSON object"};let c=Object.keys(b).filter(a=>!f.includes(a));if(c.length>0)return{ok:!1,reason:`af360's app identity file carries a key that may not ship: ${c.join(", ")}`};let g=b.githubClientId;return"string"!=typeof g||0===g.length?{ok:!1,reason:"af360's app identity file carries no GitHub client id"}:{ok:!0,githubClientId:g}}();return a.ok&&a.githubClientId?a.githubClientId:"REPLACE_WITH_APP_CLIENT_ID"}(),h=!g.startsWith("REPLACE_WITH"),i="https://github.com",j=`${i}/login/device`,k=process.env.AF360_GITHUB_APP_SLUG??"af360-app",l=Object.freeze({arrived:"GitHub's answer arrived on this machine",declined:"you declined the authorization on GitHub - nothing was stored",refused:"GitHub refused the authorization - nothing was stored",expired:"the sign-in code expired before it was used, so af360 stopped asking - nothing was stored",cancelled:"you cancelled the authorization in af360 - nothing was stored",issued:"GitHub issued a sign-in code and af360 is waiting for you to enter it","slow-down":"GitHub asked af360 to check less often, and af360 slowed down"});Object.freeze(["issued","slow-down"]);let m=Object.freeze({expired_token:"that sign-in code had expired before it was used - press Connect to get a fresh one",access_denied:"the sign-in was declined on GitHub, so nothing was stored",incorrect_device_code:"GitHub did not recognise this sign-in attempt, so nothing was stored - press Connect to start a fresh one",unsupported_grant_type:"GitHub would not accept the way af360 asked, so nothing was stored - this is af360's own registration and not something to fix here",device_flow_disabled:"GitHub says device sign-in is turned off for af360, so nothing was stored - this is af360's own registration and not something to fix here",incorrect_client_credentials:"GitHub did not recognise af360 itself, so nothing was stored - this is af360's own registration and not something to fix here",unverified_user_email:"GitHub needs a verified email address on your account before it will complete this"});function n(a){return m[a]??"GitHub refused to complete the sign-in, so nothing was stored - press Connect to try again"}let o=Object.freeze({access_denied:"declined",expired_token:"expired"});async function p(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),15e3);try{return await q(a,b,c)}finally{clearTimeout(d)}}async function q(a,b,c){let d,e;try{d=await fetch(`${i}${a}`,{method:"POST",signal:c.signal,redirect:"error",headers:{accept:"application/json","content-type":"application/x-www-form-urlencoded","user-agent":"af360"},body:new URLSearchParams(b).toString()})}catch(a){return{ok:!1,reason:a?.name==="AbortError"?"GitHub did not answer in time":"this machine could not reach GitHub"}}if(!d.ok){var f;return{ok:!1,reason:404===(f=d.status)?"GitHub did not recognise af360's app registration":401===f||403===f?"GitHub would not accept af360's app credentials":`GitHub answered ${f}`}}try{e=await d.json()}catch(a){if(a?.name==="AbortError")return{ok:!1,reason:"GitHub did not answer in time"};return{ok:!1,reason:"GitHub's answer was not readable"}}return e&&"object"==typeof e?{ok:!0,json:e}:{ok:!1,reason:"GitHub's answer was not readable"}}let r=(a,b)=>"number"==typeof a&&Number.isFinite(a)&&a>0?a:b;async function s(){let a=await p("/login/device/code",{client_id:g});if(!a.ok)return a;let b=a.json;if("string"==typeof b.error)return{ok:!1,reason:n(b.error)};let c="string"==typeof b.device_code?b.device_code:"",d="string"==typeof b.user_code?b.user_code:"";return c&&d?{ok:!0,device:{deviceCode:c,userCode:d,verificationUri:"string"==typeof b.verification_uri&&b.verification_uri?b.verification_uri:j,expiresAt:Date.now()+1e3*r(b.expires_in,900),intervalMs:Math.max(5e3,1e3*r(b.interval,5))}}:{ok:!1,reason:"GitHub did not send a sign-in code"}}async function t(a,b={}){let c=b.cancelled??(()=>!1),d=b.sleep??(a=>new Promise(b=>setTimeout(b,a))),e=a.intervalMs;for(;;){if(c())return{ok:!1,ending:"cancelled",reason:l.cancelled};if(Date.now()>=a.expiresAt)return{ok:!1,ending:"expired",reason:l.expired};if(await d(e),c())return{ok:!1,ending:"cancelled",reason:l.cancelled};let f=await p("/login/oauth/access_token",{client_id:g,device_code:a.deviceCode,grant_type:"urn:ietf:params:oauth:grant-type:device_code"});if(!f.ok)continue;let h=f.json,i="string"==typeof h.error?h.error:"";if("authorization_pending"===i)continue;if("slow_down"===i){e=Math.max(5e3,("number"==typeof h.interval&&Number.isFinite(h.interval)&&h.interval>0?1e3*h.interval:0)||e+5e3),b.onEnding?.("slow-down");continue}if(i)return{ok:!1,ending:o[i]??"refused",reason:n(i)};let j="string"==typeof h.access_token?h.access_token:"";if(!j)return{ok:!1,ending:"refused",reason:"GitHub returned no access token"};let k=Date.now();return{ok:!0,ending:"arrived",tokens:{accessToken:j,accessExpiresAt:"number"==typeof h.expires_in&&Number.isFinite(h.expires_in)&&h.expires_in>0?k+1e3*h.expires_in:0,refreshToken:"",refreshExpiresAt:0,refreshOffered:"string"==typeof h.refresh_token&&h.refresh_token.length>0,refreshOfferedLifetimeMs:"number"==typeof h.refresh_token_expires_in&&Number.isFinite(h.refresh_token_expires_in)&&h.refresh_token_expires_in>0?1e3*h.refresh_token_expires_in:0}}}}},18150:(a,b,c)=>{c.d(b,{PC:()=>B,y6:()=>M,github:()=>y,state:()=>J,M_:()=>L,ZL:()=>F,fn:()=>I});var d=c(1232);let e=a=>({ok:!0,value:a}),f=(a,b)=>({ok:!1,kind:a,reason:(0,d.dK)(b)}),g="https://api.github.com";async function h(a,b){let c=new AbortController,d=setTimeout(()=>c.abort(),8e3);try{return await i(a,b,c)}finally{clearTimeout(d)}}async function i(a,b,c){let d,h,i;try{d=await fetch(g+a,{signal:c.signal,redirect:"manual",headers:{authorization:`Bearer ${b}`,accept:"application/vnd.github+json","x-github-api-version":"2022-11-28","user-agent":"af360"}})}catch(c){if(c?.name==="AbortError")return f("timeout","GitHub did not answer in time");let a=c?.code??c?.name,b="string"==typeof a&&/^[A-Z][A-Z0-9_]{2,31}$/.test(a)?a:null;return f("unreachable",b?`af360 could not open a connection to GitHub (${b})`:"af360 could not open a connection to GitHub")}if(301===d.status||308===d.status){let a=function(a){let b;if(!a)return null;try{b=new URL(a,g)}catch{return null}if(b.origin!==new URL(g).origin)return null;let c=b.pathname.replace(/^\/+/,"").split("/").filter(Boolean);if(3!==c.length||"repos"!==c[0])return null;let[,d,e]=c,f=a=>/^[A-Za-z0-9._-]{1,100}$/.test(a)&&"."!==a&&".."!==a;return f(d)&&f(e)?`${d}/${e}`:null}(d.headers.get("location"));return f("moved",a?`GitHub now calls this repository ${a}`:"GitHub says this repository has moved, and did not say where")}let k=d.headers.get("github-authentication-token-expiration"),l=d.headers.get("x-oauth-scopes"),m=d.headers.get("x-ratelimit-remaining"),n=null===m?null:Number.parseInt(m,10);if((403===d.status||429===d.status)&&0===n)return f("ratelimited","your GitHub rate limit is spent - it refills on its own");if(401===d.status)return f("unauthorized","GitHub did not accept the token - it may have been revoked or have expired");if(d.status>=500)return f("down",`GitHub answered ${d.status}`);try{h=await j(d)}catch(a){if(a?.name==="AbortError")return f("timeout","GitHub did not answer in time");throw a}if(null===h)return f("down","GitHub's answer was larger than af360 will read");if(!d.ok)return f(404===d.status||403===d.status?"forbidden":"down",404===d.status?"GitHub has no repository there that this token can see":"GitHub accepted the token but this is outside what it was granted");try{i=JSON.parse(h)}catch{return f("down","GitHub's answer was not readable")}return e({body:i,tokenExpiry:k,oauthScopes:l,rateRemaining:n})}async function j(a){let b=Number.parseInt(a.headers.get("content-length")??"",10);if(Number.isFinite(b)&&b>524288)return null;let c=a.body?.getReader();if(!c)return await a.text();let d=[],e=0;for(;;){let{done:a,value:b}=await c.read();if(a)break;if(b){if((e+=b.byteLength)>524288)return await c.cancel().catch(()=>{}),null;d.push(b)}}let f=new Uint8Array(e),g=0;for(let a of d)f.set(a,g),g+=a.byteLength;return new TextDecoder("utf-8").decode(f)}let k=a=>encodeURIComponent(a),l=(a,b)=>h(`/user/installations/${encodeURIComponent(String(a))}/repositories?per_page=100`,b);var m=c(71011),n=c(46995);let o="dpapi:v1:",p=new Map;async function q(a){if("string"!=typeof a||!a)return{stored:a,encrypted:!1};let b=await (0,n.bridge)("protect",a);if(!b.ok)return{stored:a,encrypted:!1,reason:b.reason};let c=o+b.out;return p.set(c,a),{stored:c,encrypted:!0}}async function r(a){if("string"!=typeof a||!a)return{ok:!1,reason:"empty"};if(!("string"==typeof a&&a.startsWith(o)))return{ok:!0,token:a,encrypted:!1};let b=p.get(a);if(void 0!==b)return{ok:!0,token:b,encrypted:!0};let c=await (0,n.bridge)("unprotect",a.slice(o.length));return c.ok?(p.set(a,c.out),{ok:!0,token:c.out,encrypted:!0}):{ok:!1,reason:c.reason,encrypted:!0}}let s={unreachable:"not checked this scan - af360 could not open a connection to GitHub",down:"not checked this scan - GitHub did not answer properly",expired:"not checked this scan - the GitHub token has expired",unauthorized:"not checked this scan - GitHub would not accept the token",forbidden:"not checked this scan - the token is fine, but this is outside what af360 was granted",ratelimited:"not checked this scan - your GitHub rate limit is spent",timeout:"not checked this scan - GitHub did not answer in time",moved:"not checked - your remote points at a name GitHub has moved, and it will stay unchecked until the remote is updated","past-ceiling":"not checked - af360 asks GitHub about a limited number of repositories each scan, and this one is past that"},t={unreachable:"no connection",down:"GitHub down",expired:"token expired",unauthorized:"token refused",forbidden:"not granted",ratelimited:"rate limit",timeout:"no answer",moved:"remote moved","past-ceiling":"past the scan limit"};Object.fromEntries(Object.keys(t).map(a=>[a,`GitHub not checked (${t[a]})`]));var u=c(4683);let v=new Set(["read:org","read:user","read:packages","read:discussion","read:project","read:audit_log","read:gpg_key","read:public_key","user:email","read:enterprise","read:network"]),w=new Set(["read"]);async function x(a,b,c,d){var g;let i,j=await h(`/repos/${k(b)}/${k(c)}`,d);if(!j.ok)return f(j.kind,j.reason);let l="string"==typeof j.value.body.default_branch?j.value.body.default_branch:null,m=a.branch||l;if(!m)return f("down","GitHub did not name a default branch and local git did not name one either");let[n,o,p]=await Promise.all([h(`/repos/${k(b)}/${k(c)}/actions/runs?branch=${k(m)}&per_page=1&exclude_pull_requests=true`,d),h(`/repos/${k(b)}/${k(c)}/pulls?state=open&per_page=100`,d),(g=a).statusKnown&&0===g.ahead&&0===g.behind&&g.headSha?h(`/repos/${k(b)}/${k(c)}/branches/${k(m)}`,d):Promise.resolve(null)]),q=n.ok?e(function(a,b){if(!a)return null;let c=Date.parse(a.updated_at??a.created_at??""),d=a.conclusion??null;return{state:"success"===d?"passing":"failure"===d||"timed_out"===d||"startup_failure"===d?"failing":null===d?"running":"other",conclusion:d,workflow:"string"==typeof a.name&&a.name?a.name:"a workflow",branch:a.head_branch||b,at:Number.isFinite(c)?c:Date.now(),runNumber:"number"==typeof a.run_number?a.run_number:null}}(n.value.body?.workflow_runs?.[0],m)):f(n.kind,n.reason),r=o.ok?o.value.body??[]:null,s=o.ok?e((o.value.body??[]).length):f(o.kind,o.reason),t=null!==r&&r.length>=100,u="number"==typeof j.value.body.open_issues_count?j.value.body.open_issues_count:null;return i=null===u?f("down","GitHub did not say how many issues are open"):o.ok?e(Math.max(0,u-(r?.length??0))):f(o.kind,"af360 could not separate issues from pull requests this scan"),e({owner:b,name:c,fullName:j.value.body.full_name??`${b}/${c}`,defaultBranch:l,branch:m,ci:q,prCount:s,prCapped:t,issueCount:i,backup:function(a,b,c){if(!a.statusKnown)return{verdict:"unmeasured",reason:"local git did not finish answering, so there was nothing to confirm against"};if(!a.headSha)return{verdict:"unmeasured",reason:"af360 could not read this project's current commit"};if(null===a.ahead||null===a.behind)return{verdict:"unmeasured",reason:"local git did not report this branch's position against its remote"};if(a.ahead>0)return{verdict:"unmeasured",reason:"local git already reports commits that are not pushed - there is no claim to confirm"};if(a.behind>0)return{verdict:"unmeasured",reason:"this machine is behind its remote, so the two tips are expected to differ"};if(!c)return{verdict:"unmeasured",reason:"af360 did not ask GitHub for this branch"};if(!c.ok)return{verdict:"unmeasured",reason:c.reason};let d=c.value.body.commit?.sha;return"string"==typeof d&&d?d===a.headSha?{verdict:"confirmed",sha:d,branch:b}:{verdict:"refuted",localSha:a.headSha,remoteSha:d,branch:b}:{verdict:"unmeasured",reason:"GitHub did not name a commit for that branch"}}(a,m,p)})}let y={id:"github",label:"GitHub",host:"api.github.com",verify:async function a(a){let b,c=await h("/user",a);if(!c.ok)return{kind:"unreached",unreached:c.kind,reason:c.reason};let d="string"==typeof c.value.body.login?c.value.body.login:"";if(!d)return{kind:"unreached",unreached:"down",reason:"GitHub did not say who this token belongs to"};if(c.value.oauthScopes){let b=function(a){let b=a.split(",").map(a=>a.trim()).filter(Boolean);if(0===b.length)return{readOnly:!0,detail:"a classic token with no scopes - it can read public repositories only"};let c=b.filter(a=>!v.has(a));return 0===c.length?{readOnly:!0,detail:`classic token, read-only scopes (${b.join(", ")})`}:{readOnly:!1,detail:`it carries the ${c.join(", ")} scope${1===c.length?"":"s"}, which can write`}}(c.value.oauthScopes);if(!b.readOnly)return{kind:"refused-write",detail:b.detail};let e=await h("/user/repos?per_page=100&sort=pushed",a);if(!e.ok)return{kind:"unreached",unreached:e.kind,reason:`${e.reason} - af360 could not check what this token can reach, so nothing was stored`};let f=function(a){let b=a.filter(a=>a.permissions?.push||a.permissions?.admin||a.permissions?.maintain);if(0===b.length)return{readOnly:!0,detail:`fine-grained token, read-only on all ${a.length} repositor${1===a.length?"y":"ies"} it can see`};let c=b.slice(0,3).map(a=>a.full_name??"a repository").join(", "),d=b.length>3?` and ${b.length-3} more`:"";return{readOnly:!1,detail:`it can push to ${c}${d}`}}(e.value.body??[]);return f.readOnly?{kind:"ok",login:d,scopesRead:!0,expiryKnown:!1,repoNames:(e.value.body??[]).map(a=>a.full_name??"").filter(Boolean)}:{kind:"refused-write",detail:f.detail}}let e=await h("/user/installations?per_page=100",a);if(!e.ok)return{kind:"unreached",unreached:e.kind,reason:`${e.reason} - af360 could not check what it was granted, so nothing was stored`};let f=e.value.body.installations??[],g=f.filter(a=>a.app_slug===u.II);if(f.length>0&&0===g.length)return{kind:"unreached",unreached:"down",reason:`GitHub returned ${f.length} installation${1===f.length?"":"s"}, none of them af360's own, so af360 could not confirm the grant it was reading was its own - nothing was stored`};let i=function(a){if(0===a.length)return{readOnly:!0,detail:"the App is authorized but not installed on any account yet"};let b=[];for(let c of a)for(let[a,d]of Object.entries(c.permissions??{}))w.has(String(d).toLowerCase())||b.push(`${a}: ${d}${c.account?.login?` on ${c.account.login}`:""}`);return 0===b.length?{readOnly:!0,detail:`the App is installed read-only on ${a.length} account${1===a.length?"":"s"}`}:{readOnly:!1,detail:`the installation grants ${b.slice(0,3).join(", ")}${b.length>3?` and ${b.length-3} more`:""}`}}(g);if(!i.readOnly)return{kind:"refused-write",detail:i.detail};let j=[],k=0;for(let c of g){if("number"!=typeof c.id)continue;b??=c.id;let d=await l(c.id,a);if(!d.ok){k++;continue}for(let a of d.value.body.repositories??[])a.full_name&&j.push(a.full_name)}return{kind:"ok",login:d,repoNames:j,scopesRead:!0,expiryKnown:!1,installationId:b,installationCount:g.length,reposUnread:k}},facts:async function a(a){let b,c=Date.now(),d=await I();if(!d)return{at:c,byPath:{},outage:{kind:"unauthorized",reason:"af360 holds no GitHub token"}};if(d.expiresAt&&Date.parse(d.expiresAt)<=c)return{at:c,byPath:{},outage:{kind:"expired",reason:"the GitHub token's expiry date has passed"}};let e=a.map(a=>({s:a,repo:function(a){if(!a)return null;let b=a.trim(),c=null,d=null,e=/^(?:[A-Za-z0-9._-]+@)?([A-Za-z0-9._-]+):(.+)$/.exec(b);if(e&&!/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(b))c=e[1].toLowerCase(),d=e[2];else try{let a=new URL(b);c=a.hostname.toLowerCase(),d=a.pathname}catch{return null}if("github.com"!==c&&"www.github.com"!==c)return null;let f=(d??"").replace(/^\/+/,"").replace(/\.git$/i,"").split("/").filter(Boolean);if(2!==f.length)return null;let[g,h]=f,i=a=>/^[A-Za-z0-9._-]{1,100}$/.test(a)&&"."!==a&&".."!==a;return i(g)&&i(h)?{owner:g,name:h}:null}(a.remoteUrl)})).filter(a=>null!==a.repo),g={},h=e.slice(0,25);for(let a of e.slice(25))g[a.s.path.toLowerCase()]=f("past-ceiling","af360 asks GitHub about at most 25 repositories in one scan, and this one was past that");let i=0,j=Array.from({length:Math.min(4,h.length)},async()=>{for(;;){if(b)return;let a=i++;if(a>=h.length)return;let{s:c,repo:e}=h[a],f=await x(c,e.owner,e.name,d.token);if(!f.ok&&("ratelimited"===f.kind||"expired"===f.kind)){b={kind:f.kind,reason:f.reason};return}g[c.path.toLowerCase()]=f}});return await Promise.all(j),{at:c,byPath:g,outage:b}},expiry:function(a){return a.connected&&a.expiryKnown&&a.expiresAt&&Number.isFinite(Date.parse(a.expiresAt))?{id:"connector:github",name:"GitHub token (af360 stops seeing CI, PRs and issues)",date:a.expiresAt}:null},unmeasuredLine:a=>s[a]},z=null,A=null,B="This build of af360 has no GitHub App registration, so it cannot renew access",C=0,D=6e4;function E(a,b){C=b+D,D=Math.min(2*D,18e5),A!==a&&(A=a,z={ok:!1,reason:a})}function F(){let a=z;return z=null,a}async function G(a){let b=await r(a.token);if(!b.ok)return null;let c=a.refreshToken;if(c){let a=await r(c);c=a.ok?a.token:void 0}return{...a,token:b.token,refreshToken:c}}async function H(a){let b={...a,token:(await q(a.token)).stored};return a.refreshToken&&(b.refreshToken=(await q(a.refreshToken)).stored),b}async function I(a=Date.now()){try{let b=await (0,m.G5)(),d=b.config?.connectors?.github;if(!d||"string"!=typeof d.token||!d.token)return null;let e=await G(d);if(!e)return null;let f=e.expiresAt?Date.parse(e.expiresAt):NaN;if(!Number.isFinite(f)||f-a>3e5)return A=null,C=0,D=6e4,e;if(!e.refreshToken)return e;let{APP_CONFIGURED:g}=await Promise.resolve().then(c.bind(c,4683));if(!g)return E(B,a),e;if(A&&a<C)return e;return E("af360 cannot renew this sign-in with GitHub - press Connect to sign in again",a),e}catch{return null}}async function J(){let a,b={id:y.id,label:y.label,connected:!1},d=null;try{let a=await (0,m.G5)();d=a.config?.connectors?.github??null}catch{return b}if(!d?.token)return b;if(!(await r(d.token)).ok)return{...b,connected:!0,unreadable:!0,login:d.login,repoNames:d.repoNames,repoCount:d.repoNames?.length,connectedAt:d.connectedAt};let e=!1;try{let{cachedGithubScan:b}=await c.e(6988).then(c.bind(c,26988)),d=await b(),f=d?.outage?.kind;if(!f){for(let a of Object.values(d?.byPath??{}))if(!a.ok&&("unauthorized"===a.kind||"expired"===a.kind)){f=a.kind;break}}("unauthorized"===f||"expired"===f)&&(a=f),d&&!d.outage&&(e=Object.values(d.byPath??{}).some(a=>a.ok))}catch{}return K&&(e=!0),{...b,connected:!0,refusal:a,verified:e,login:d.login,repoNames:d.repoNames,repoCount:d.repoNames?.length,reposKnown:d.reposKnown,installationCount:d.installationCount,expiryKnown:!1,connectedAt:d.connectedAt}}let K=!1;async function L(a,b,c){let d=await (0,m.G5)();if("unreadable"===d.status||!d.config)throw Error("af360 could not read its own settings, so it did not store anything");let e=d.config;e.connectors={...e.connectors,github:await H({token:a,login:b.login,repoNames:b.repoNames,reposKnown:(b.reposUnread??0)===0,installationId:b.installationId,installationCount:b.installationCount,connectedAt:Date.now(),...c?{expiresAt:new Date(c.expiresAt).toISOString(),refreshToken:c.refreshToken,refreshExpiresAt:new Date(c.refreshExpiresAt).toISOString()}:{}})},await (0,m.ql)(e),K=!0}async function M(){var a;let b=await (0,m.G5)();if("unreadable"===b.status||!b.config)throw Error("af360 could not read its own settings, so it changed nothing");let c=b.config;"string"==typeof(a=c.connectors?.github?.token)?p.delete(a):p.clear(),c.connectors&&delete c.connectors.github,await (0,m.ql)(c),K=!1}},46995:(a,b,c)=>{c.d(b,{$:()=>i,bridge:()=>k});var d=c(79646),e=c(29021),f=c(33873),g=c(79551);let h=f.resolve(f.dirname((0,g.fileURLToPath)("file:///C:/dev/af360/lib/bridge.mjs")),"..");function i(){let a=process.env.AF360_BRIDGE;return a?(0,e.existsSync)(a)?a:null:j()}function j(){for(let a of[f.join(h,"af360-bridge.exe"),f.join(h,"shell","bin","af360-bridge.exe")])if((0,e.existsSync)(a))return a;return null}function k(a,b="",{fixedPath:c=!1,timeout:e=15e3}={}){let f=c?j():i();return f?new Promise(c=>{let g=(0,d.execFile)(f,[a],{windowsHide:!0,timeout:e,maxBuffer:1e6},(a,b,d)=>{if(a)return void c({ok:!1,reason:String(d||"").trim()||(a.killed?"timeout":"failed")});c({ok:!0,out:String(b||"").trim()})});g.stdin.on("error",()=>{}),g.stdin.end(b)}):Promise.resolve({ok:!1,reason:"absent"})}}};
@@ -1 +1 @@
1
- "use strict";exports.id=876,exports.ids=[876],exports.modules={7769:(a,b,c)=>{c.d(b,{XF:()=>d});function d(a,b){return b&&b.text?a?`${a} "${b.text}"`:`"${b.text}"`:a}},10876:(a,b,c)=>{c.d(b,{JF:()=>r,rO:()=>s});var d=c(21124),e=c(38301),f=c(73450),g=c(7769),h=c(31296),i=c(78530),j=c(95938),k=c(71322),l=c(99511);function m({open:a,onClick:b,seeCard:c}){let e=(0,i.kj)();return(0,d.jsx)("button",{className:"b2 q wk-details",onClick:b,"aria-expanded":a,children:a?e("btn.hide",h.UI.common.hide):c?e("disc.seeCard",h.UI.discoveries.seeCard):e("disc.showMe",h.UI.discoveries.showMe)})}function n({d:a}){let b=(0,e.useContext)(f.vC),c=(0,i.kj)(),l=(0,i.XE)();return(0,d.jsxs)(d.Fragment,{children:[a.detail&&a.detail.length>0&&(0,d.jsx)("div",{className:"k",children:c("radar.whatISaw",h.UI.discoveries.whatISaw)}),a.detail?.map(a=>(0,d.jsx)(j.B,{mono:!0,children:a},a)),a.steps&&a.steps.length>0&&(0,d.jsx)("div",{className:"k",children:c("disc.fixSteps",h.UI.discoveries.fixSteps)}),a.steps?.map(a=>(0,d.jsx)("div",{className:"step",children:l(a)},a)),a.copy&&(0,d.jsx)(k.r8,{path:a.copy.text,label:h.UI.session.copyCommands,labelKey:"btn.copyCommands"}),(0,d.jsx)(k.hR,{text:function(a,b,c){if(!a)return"";let d=[];if(a.verdict&&d.push(a.verdict),a.why){let e="function"==typeof c?c(a.why,a.quoted):a.why;d.push(`${b.worth} ${e}`)}if(Array.isArray(a.detail)&&a.detail.length>0)for(let c of(d.push("",b.whatISaw),a.detail))d.push(` ${c}`);if(Array.isArray(a.steps)&&a.steps.length>0)for(let c of(d.push("",b.fixSteps),a.steps))d.push(` ${c}`);return a.copy&&"string"==typeof a.copy.text&&a.copy.text&&d.push("",a.copy.text),d.join("\n")}(a,{worth:c("disc.worth",h.UI.discoveries.worth),whatISaw:c("radar.whatISaw",h.UI.discoveries.whatISaw),fixSteps:c("disc.fixSteps",h.UI.discoveries.fixSteps)},g.XF),label:h.UI.discoveries.copyDetails,labelKey:"btn.copyDetails"}),b&&a.devDetail?.map(a=>(0,d.jsx)(j.B,{mono:!0,children:a},a))]})}function o({d:a,cockpit:b}){let c=(0,i.kj)(),e=b.dismissed.find(b=>b.id===a.id);return e?.resurface?(0,d.jsxs)("div",{className:"disc-resurface",children:[(0,d.jsx)("p",{className:"k",children:c("disc.changedSince",h.UI.discoveries.changedSince)}),(0,d.jsxs)("p",{children:[(0,d.jsx)("span",{className:"m",children:c("disc.dismissedThen",h.UI.discoveries.dismissedThen)})," ",(0,d.jsx)(j.B,{children:e.sentence})]}),(0,d.jsxs)("p",{children:[(0,d.jsx)("span",{className:"m",children:c("disc.dismissedNow",h.UI.discoveries.dismissedNow)})," ",(0,d.jsx)(j.B,{children:e.resurface.current})]}),(0,d.jsxs)("div",{className:"disc-foot",children:[(0,d.jsx)("button",{className:"b2 q",onClick:()=>b.stillDismiss(a.id),children:c("disc.stillDismiss",h.UI.discoveries.stillDismiss)}),(0,d.jsx)("button",{className:"b2 q",onClick:()=>b.undismiss(a.id),children:c("disc.undismiss",h.UI.discoveries.undismiss)})]})]}):null}function p({d:a,cockpit:b}){let c=(0,i.kj)();return(0,d.jsx)(l.ob,{actions:[{label:c("disc.dismiss",h.UI.discoveries.dismiss),effect:c("eff.dismiss",h.UI.discoveries.effDismiss),onClick:()=>{b.doDismiss(a.id,a.verdict)}}]})}function q({d:a,row:b,cockpit:c}){var j;let k=(0,e.useContext)(f.vC),[l,q]=(0,e.useState)(!1),r=(0,i.kj)(),s=(0,i.XE)(),u=(0,d.jsx)(i.T,{k:`cat.${a.cat}`,en:h.UI.discoveries.cat[a.cat]??a.cat}),v=a.verdictP?(0,d.jsx)(i.P,{p:a.verdictP}):a.verdict,w=a.why?(0,d.jsxs)(d.Fragment,{children:[r("disc.worth",h.UI.discoveries.worth)," ",s((j=(0,g.XF)(a.why,a.quoted)).charAt(0).toLowerCase()+j.slice(1))]}):null,x=a.detail&&a.detail.length>0||a.steps&&a.steps.length>0||b&&!!a.og,y=c?(0,d.jsx)(p,{d:a,cockpit:c}):null,z=c?(0,d.jsx)(o,{d:a,cockpit:c}):null;return b?(0,d.jsxs)("div",{className:`wkrow${l?" open":""}`,children:[(0,d.jsx)("span",{className:"fcat",children:u}),(0,d.jsxs)("span",{className:"fact",children:[v,w&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"why",children:w})]}),a.delta&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"why",children:a.delta})]}),z]}),x&&(0,d.jsx)(m,{open:l,onClick:()=>q(!l),seeCard:!!a.og}),y,l&&(0,d.jsxs)("div",{className:"wkdepth",children:[a.og&&(0,d.jsx)(t,{og:a.og}),(0,d.jsx)(n,{d:a}),a.link&&(0,d.jsx)("a",{className:"b2 q",href:a.link.href,children:a.link.label}),k&&a.dev&&(0,d.jsx)("div",{className:"devline",children:a.dev})]})]}):(0,d.jsxs)("div",{className:"disc",children:[(0,d.jsx)("div",{className:"fcat",children:u}),(0,d.jsx)("b",{children:v}),w&&(0,d.jsx)("p",{children:w}),a.delta&&(0,d.jsx)("p",{children:a.delta}),z,a.og&&(0,d.jsx)(t,{og:a.og}),(x||a.link||y)&&(0,d.jsxs)("div",{className:"disc-foot",children:[x&&(0,d.jsx)(m,{open:l,onClick:()=>q(!l),seeCard:!!a.og}),a.link&&(0,d.jsx)("a",{className:"b2 q",href:a.link.href,children:a.link.label}),y]}),x&&l&&(0,d.jsx)("div",{className:"evd",children:(0,d.jsx)(n,{d:a})}),k&&a.dev&&(0,d.jsx)("div",{className:"devline",children:a.dev})]})}function r({d:a,cockpit:b}){return(0,d.jsx)(q,{d:a,cockpit:b})}function s({d:a,cockpit:b}){return(0,d.jsx)(q,{d:a,row:!0,cockpit:b})}function t({og:a}){let b=(0,i.kj)();return a.title||a.description||a.image?(0,d.jsxs)("div",{className:"ogcard",children:[a.image&&(0,d.jsx)("img",{src:a.image,alt:""}),(0,d.jsxs)("div",{className:"ogcard-body",children:[(0,d.jsx)("div",{className:"ogcard-title",children:(0,d.jsx)(j.B,{children:a.title??b("disc.ogNoTitle",h.UI.discoveries.ogNoTitle)})}),a.description&&(0,d.jsx)("div",{className:"ogcard-desc",children:(0,d.jsx)(j.B,{children:a.description})}),(0,d.jsx)("div",{className:"ogcard-host",children:(0,d.jsx)(j.B,{mono:!0,children:a.host})})]})]}):(0,d.jsx)("div",{className:"ogcard bare",children:b("disc.ogBare",h.UI.discoveries.ogBare)})}}};
1
+ "use strict";exports.id=876,exports.ids=[876],exports.modules={10876:(a,b,c)=>{c.d(b,{JF:()=>r,rO:()=>s});var d=c(21124),e=c(38301),f=c(96197),g=c(7769),h=c(31296),i=c(78530),j=c(95938),k=c(71322),l=c(99511);function m({open:a,onClick:b,seeCard:c}){let e=(0,i.kj)();return(0,d.jsx)("button",{className:"b2 q wk-details",onClick:b,"aria-expanded":a,children:a?e("btn.hide",h.UI.common.hide):c?e("disc.seeCard",h.UI.discoveries.seeCard):e("disc.showMe",h.UI.discoveries.showMe)})}function n({d:a}){let b=(0,e.useContext)(f.vC),c=(0,i.kj)(),l=(0,i.XE)();return(0,d.jsxs)(d.Fragment,{children:[a.detail&&a.detail.length>0&&(0,d.jsx)("div",{className:"k",children:c("radar.whatISaw",h.UI.discoveries.whatISaw)}),a.detail?.map(a=>(0,d.jsx)(j.B,{mono:!0,children:a},a)),a.steps&&a.steps.length>0&&(0,d.jsx)("div",{className:"k",children:c("disc.fixSteps",h.UI.discoveries.fixSteps)}),a.steps?.map(a=>(0,d.jsx)("div",{className:"step",children:l(a)},a)),a.copy&&(0,d.jsx)(k.r8,{path:a.copy.text,label:h.UI.session.copyCommands,labelKey:"btn.copyCommands"}),(0,d.jsx)(k.hR,{text:function(a,b,c){if(!a)return"";let d=[];if(a.verdict&&d.push(a.verdict),a.why){let e="function"==typeof c?c(a.why,a.quoted):a.why;d.push(`${b.worth} ${e}`)}if(Array.isArray(a.detail)&&a.detail.length>0)for(let c of(d.push("",b.whatISaw),a.detail))d.push(` ${c}`);if(Array.isArray(a.steps)&&a.steps.length>0)for(let c of(d.push("",b.fixSteps),a.steps))d.push(` ${c}`);return a.copy&&"string"==typeof a.copy.text&&a.copy.text&&d.push("",a.copy.text),d.join("\n")}(a,{worth:c("disc.worth",h.UI.discoveries.worth),whatISaw:c("radar.whatISaw",h.UI.discoveries.whatISaw),fixSteps:c("disc.fixSteps",h.UI.discoveries.fixSteps)},g.XF),label:h.UI.discoveries.copyDetails,labelKey:"btn.copyDetails"}),b&&a.devDetail?.map(a=>(0,d.jsx)(j.B,{mono:!0,children:a},a))]})}function o({d:a,cockpit:b}){let c=(0,i.kj)(),e=b.dismissed.find(b=>b.id===a.id);return e?.resurface?(0,d.jsxs)("div",{className:"disc-resurface",children:[(0,d.jsx)("p",{className:"k",children:c("disc.changedSince",h.UI.discoveries.changedSince)}),(0,d.jsxs)("p",{children:[(0,d.jsx)("span",{className:"m",children:c("disc.dismissedThen",h.UI.discoveries.dismissedThen)})," ",(0,d.jsx)(j.B,{children:e.sentence})]}),(0,d.jsxs)("p",{children:[(0,d.jsx)("span",{className:"m",children:c("disc.dismissedNow",h.UI.discoveries.dismissedNow)})," ",(0,d.jsx)(j.B,{children:e.resurface.current})]}),(0,d.jsxs)("div",{className:"disc-foot",children:[(0,d.jsx)("button",{className:"b2 q",onClick:()=>b.stillDismiss(a.id),children:c("disc.stillDismiss",h.UI.discoveries.stillDismiss)}),(0,d.jsx)("button",{className:"b2 q",onClick:()=>b.undismiss(a.id),children:c("disc.undismiss",h.UI.discoveries.undismiss)})]})]}):null}function p({d:a,cockpit:b}){let c=(0,i.kj)();return(0,d.jsx)(l.ob,{actions:[{label:c("disc.dismiss",h.UI.discoveries.dismiss),effect:c("eff.dismiss",h.UI.discoveries.effDismiss),onClick:()=>{b.doDismiss(a.id,a.verdict)}}]})}function q({d:a,row:b,cockpit:c}){var j;let k=(0,e.useContext)(f.vC),[l,q]=(0,e.useState)(!1),r=(0,i.kj)(),s=(0,i.XE)(),u=(0,d.jsx)(i.T,{k:`cat.${a.cat}`,en:h.UI.discoveries.cat[a.cat]??a.cat}),v=a.verdictP?(0,d.jsx)(i.P,{p:a.verdictP}):a.verdict,w=a.why?(0,d.jsxs)(d.Fragment,{children:[r("disc.worth",h.UI.discoveries.worth)," ",s((j=(0,g.XF)(a.why,a.quoted)).charAt(0).toLowerCase()+j.slice(1))]}):null,x=a.detail&&a.detail.length>0||a.steps&&a.steps.length>0||b&&!!a.og,y=c?(0,d.jsx)(p,{d:a,cockpit:c}):null,z=c?(0,d.jsx)(o,{d:a,cockpit:c}):null;return b?(0,d.jsxs)("div",{className:`wkrow${l?" open":""}`,children:[(0,d.jsx)("span",{className:"fcat",children:u}),(0,d.jsxs)("span",{className:"fact",children:[v,w&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"why",children:w})]}),a.delta&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("br",{}),(0,d.jsx)("span",{className:"why",children:a.delta})]}),z]}),x&&(0,d.jsx)(m,{open:l,onClick:()=>q(!l),seeCard:!!a.og}),y,l&&(0,d.jsxs)("div",{className:"wkdepth",children:[a.og&&(0,d.jsx)(t,{og:a.og}),(0,d.jsx)(n,{d:a}),a.link&&(0,d.jsx)("a",{className:"b2 q",href:a.link.href,children:a.link.label}),k&&a.dev&&(0,d.jsx)("div",{className:"devline",children:a.dev})]})]}):(0,d.jsxs)("div",{className:"disc",children:[(0,d.jsx)("div",{className:"fcat",children:u}),(0,d.jsx)("b",{children:v}),w&&(0,d.jsx)("p",{children:w}),a.delta&&(0,d.jsx)("p",{children:a.delta}),z,a.og&&(0,d.jsx)(t,{og:a.og}),(x||a.link||y)&&(0,d.jsxs)("div",{className:"disc-foot",children:[x&&(0,d.jsx)(m,{open:l,onClick:()=>q(!l),seeCard:!!a.og}),a.link&&(0,d.jsx)("a",{className:"b2 q",href:a.link.href,children:a.link.label}),y]}),x&&l&&(0,d.jsx)("div",{className:"evd",children:(0,d.jsx)(n,{d:a})}),k&&a.dev&&(0,d.jsx)("div",{className:"devline",children:a.dev})]})}function r({d:a,cockpit:b}){return(0,d.jsx)(q,{d:a,cockpit:b})}function s({d:a,cockpit:b}){return(0,d.jsx)(q,{d:a,row:!0,cockpit:b})}function t({og:a}){let b=(0,i.kj)();return a.title||a.description||a.image?(0,d.jsxs)("div",{className:"ogcard",children:[a.image&&(0,d.jsx)("img",{src:a.image,alt:""}),(0,d.jsxs)("div",{className:"ogcard-body",children:[(0,d.jsx)("div",{className:"ogcard-title",children:(0,d.jsx)(j.B,{children:a.title??b("disc.ogNoTitle",h.UI.discoveries.ogNoTitle)})}),a.description&&(0,d.jsx)("div",{className:"ogcard-desc",children:(0,d.jsx)(j.B,{children:a.description})}),(0,d.jsx)("div",{className:"ogcard-host",children:(0,d.jsx)(j.B,{mono:!0,children:a.host})})]})]}):(0,d.jsx)("div",{className:"ogcard bare",children:b("disc.ogBare",h.UI.discoveries.ogBare)})}}};
@@ -1 +1 @@
1
- exports.id=9170,exports.ids=[9170],exports.modules={3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},5731:(a,b,c)=>{"use strict";c.d(b,{G2:()=>j,Mx:()=>l,Q6:()=>g,aC:()=>h,lF:()=>f,vh:()=>i,z_:()=>k}),c(79748);var d=c(23787);c(21820);var e=c(33873);let f=(0,d.M)(),g=e.join(f,"mcp-activity.log"),h=e.join(f,"mcp-activity.1.log"),i=Object.freeze(["estate_status","projects","changed_since","session_verify","sites","blast_radius","ahead","agent_handoff"]),j="unknown",k="unidentified",l=/^[a-z0-9][a-z0-9._+-]{0,31}$/;Object.freeze(["cmd","powershell","pwsh","sh","bash"]),RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\t(?:${[...i,j].join("|")})(?:\\t${l.source.replace(/^\^|\$$/g,"")})?$`)},22191:(a,b,c)=>{"use strict";c.d(b,{CL:()=>h,P6:()=>d.P6,logEvent:()=>g});var d=c(80069);let e=globalThis,f=e.__af360Log??(e.__af360Log=[]);function g(a,b){let c=f[f.length-1];if(c&&c.text===a&&Date.now()-c.ts<6e4)return;let e=b?{ts:Date.now(),text:a,kind:b}:{ts:Date.now(),text:a};f.push(e),f.length>200&&f.splice(0,f.length-200),(0,d.xv)(e).catch(()=>{})}async function h(a=Date.now()){let b=await (0,d.Oq)(a).catch(()=>({events:[],oldestTs:null,truncated:!1,spansWindow:!1})),c=new Set(b.events.map(a=>`${a.ts}\0${a.text}`)),e=f.filter(a=>!c.has(`${a.ts}\0${a.text}`)),g=[...b.events,...e].sort((a,b)=>b.ts-a.ts),i=g.length?g[g.length-1].ts:null;return{events:g,coverage:(0,d.ve)({oldestTs:i,truncated:b.truncated,spansWindow:b.spansWindow},a)}}},78335:()=>{},80069:(a,b,c)=>{"use strict";c.d(b,{Oq:()=>r,P6:()=>s,ve:()=>u,xv:()=>n});var d=c(79748),e=c(33873),f=c(5731);let g=e.join(f.lF,"log.jsonl"),h=e.join(f.lF,"log.1.jsonl"),i=new Set(["closed","mcp","connection"]);function j(a){let b;if(!a)return null;try{b=JSON.parse(a)}catch{return null}return b&&"object"==typeof b&&"number"==typeof b.ts&&Number.isFinite(b.ts)&&"string"==typeof b.text&&0!==b.text.length&&(void 0===b.kind||i.has(b.kind))?b.kind?{ts:b.ts,text:b.text,kind:b.kind}:{ts:b.ts,text:b.text}:null}function k(a){return JSON.stringify(a.kind?{ts:a.ts,text:a.text,kind:a.kind}:{ts:a.ts,text:a.text})+"\n"}let l=Promise.resolve();function m(a){let b=l.then(a,a);return l=b.then(()=>{},()=>{}),b}async function n(a){return m(()=>o(a))}async function o(a){let b=k(a),c=!1;try{let a=await (0,d.stat)(g);a.size+b.length>524288?await (0,d.rename)(g,h):c=await p(a.size)}catch{}try{await (0,d.appendFile)(g,c?"\n"+b:b,"utf8")}catch{}}async function p(a){let b;if(0===a)return!1;try{b=await (0,d.open)(g,"r");let c=Buffer.alloc(1);return await b.read(c,0,1,a-1),10!==c[0]}catch{return!1}finally{await b?.close?.().catch(()=>{})}}async function q(a){try{let b=await (0,d.readFile)(a,"utf8"),c=[],e=0;for(let a of b.split("\n")){if(""===a)continue;let b=j(a);b?c.push(b):e++}return{events:c,unreadable:e}}catch{return{events:[],unreadable:0}}}async function r(a=Date.now()){let b=await q(h),c=await q(g),d=b.events,e=[...d,...c.events].sort((a,b)=>a.ts-b.ts),f=b.unreadable+c.unreadable,i=a-6048e5,j=e.filter(a=>a.ts>=i),k=d.length>0&&d[0].ts>=i,l=e.some(a=>a.ts<i);return{events:j.reverse(),oldestTs:j.length?j[j.length-1].ts:null,truncated:k,spansWindow:l,unreadable:f}}async function s(a=Date.now()){return m(()=>t(a))}async function t(a){let b=a-6048e5-864e5;for(let a of[h,g]){let c;try{let e=(await (0,d.readFile)(a,"utf8")).split("\n").map(j).filter(Boolean);if((c=e.filter(a=>a.ts>=b)).length===e.length)continue}catch{continue}try{await (0,d.writeFile)(a,c.map(k).join(""),"utf8")}catch{}}}function u({oldestTs:a,truncated:b,spansWindow:c,unreadable:d=0},e=Date.now()){if(null==a)return{state:"empty",days:0,oldestTs:null,truncated:!1,unreadable:d};let f=Math.floor((e-a)/864e5);return b?{state:"truncated",days:f,oldestTs:a,truncated:!0,unreadable:d}:c?{state:"full",days:7,oldestTs:a,truncated:!1,unreadable:d}:{state:"partial",days:f,oldestTs:a,truncated:!1,unreadable:d}}},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};
1
+ exports.id=9170,exports.ids=[9170],exports.modules={3421:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},5731:(a,b,c)=>{"use strict";c.d(b,{G2:()=>j,Mx:()=>l,Q6:()=>g,aC:()=>h,lF:()=>f,vh:()=>i,z_:()=>k}),c(79748);var d=c(23787);c(21820);var e=c(33873);let f=(0,d.M)(),g=e.join(f,"mcp-activity.log"),h=e.join(f,"mcp-activity.1.log"),i=Object.freeze(["estate_status","projects","changed_since","session_verify","sites","blast_radius","ahead","discoveries","agent_handoff"]),j="unknown",k="unidentified",l=/^[a-z0-9][a-z0-9._+-]{0,31}$/;Object.freeze(["cmd","powershell","pwsh","sh","bash"]),RegExp(`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\t(?:${[...i,j].join("|")})(?:\\t${l.source.replace(/^\^|\$$/g,"")})?$`)},22191:(a,b,c)=>{"use strict";c.d(b,{CL:()=>h,P6:()=>d.P6,logEvent:()=>g});var d=c(80069);let e=globalThis,f=e.__af360Log??(e.__af360Log=[]);function g(a,b){let c=f[f.length-1];if(c&&c.text===a&&Date.now()-c.ts<6e4)return;let e=b?{ts:Date.now(),text:a,kind:b}:{ts:Date.now(),text:a};f.push(e),f.length>200&&f.splice(0,f.length-200),(0,d.xv)(e).catch(()=>{})}async function h(a=Date.now()){let b=await (0,d.Oq)(a).catch(()=>({events:[],oldestTs:null,truncated:!1,spansWindow:!1})),c=new Set(b.events.map(a=>`${a.ts}\u0000${a.text}`)),e=f.filter(a=>!c.has(`${a.ts}\u0000${a.text}`)),g=[...b.events,...e].sort((a,b)=>b.ts-a.ts),i=g.length?g[g.length-1].ts:null;return{events:g,coverage:(0,d.ve)({oldestTs:i,truncated:b.truncated,spansWindow:b.spansWindow},a)}}},78335:()=>{},80069:(a,b,c)=>{"use strict";c.d(b,{Oq:()=>r,P6:()=>s,ve:()=>u,xv:()=>n});var d=c(79748),e=c(33873),f=c(5731);let g=e.join(f.lF,"log.jsonl"),h=e.join(f.lF,"log.1.jsonl"),i=new Set(["closed","mcp","connection","look","change"]);function j(a){let b;if(!a)return null;try{b=JSON.parse(a)}catch{return null}return b&&"object"==typeof b&&"number"==typeof b.ts&&Number.isFinite(b.ts)&&"string"==typeof b.text&&0!==b.text.length&&(void 0===b.kind||i.has(b.kind))?b.kind?{ts:b.ts,text:b.text,kind:b.kind}:{ts:b.ts,text:b.text}:null}function k(a){return JSON.stringify(a.kind?{ts:a.ts,text:a.text,kind:a.kind}:{ts:a.ts,text:a.text})+"\n"}let l=Promise.resolve();function m(a){let b=l.then(a,a);return l=b.then(()=>{},()=>{}),b}async function n(a){return m(()=>o(a))}async function o(a){let b=k(a),c=!1;try{let a=await (0,d.stat)(g);a.size+b.length>524288?await (0,d.rename)(g,h):c=await p(a.size)}catch{}try{await (0,d.appendFile)(g,c?"\n"+b:b,"utf8")}catch{}}async function p(a){let b;if(0===a)return!1;try{b=await (0,d.open)(g,"r");let c=Buffer.alloc(1);return await b.read(c,0,1,a-1),10!==c[0]}catch{return!1}finally{await b?.close?.().catch(()=>{})}}async function q(a){try{let b=await (0,d.readFile)(a,"utf8"),c=[],e=0;for(let a of b.split("\n")){if(""===a)continue;let b=j(a);b?c.push(b):e++}return{events:c,unreadable:e}}catch{return{events:[],unreadable:0}}}async function r(a=Date.now()){let b=await q(h),c=await q(g),d=b.events,e=[...d,...c.events].sort((a,b)=>a.ts-b.ts),f=b.unreadable+c.unreadable,i=a-6048e5,j=e.filter(a=>a.ts>=i),k=d.length>0&&d[0].ts>=i,l=e.some(a=>a.ts<i);return{events:j.reverse(),oldestTs:j.length?j[j.length-1].ts:null,truncated:k,spansWindow:l,unreadable:f}}async function s(a=Date.now()){return m(()=>t(a))}async function t(a){let b=a-6048e5-864e5;for(let a of[h,g]){let c;try{let e=(await (0,d.readFile)(a,"utf8")).split("\n").map(j).filter(Boolean);if((c=e.filter(a=>a.ts>=b)).length===e.length)continue}catch{continue}try{await (0,d.writeFile)(a,c.map(k).join(""),"utf8")}catch{}}}function u({oldestTs:a,truncated:b,spansWindow:c,unreadable:d=0},e=Date.now()){if(null==a)return{state:"empty",days:0,oldestTs:null,truncated:!1,unreadable:d};let f=Math.floor((e-a)/864e5);return b?{state:"truncated",days:f,oldestTs:a,truncated:!0,unreadable:d}:c?{state:"full",days:7,oldestTs:a,truncated:!1,unreadable:d}:{state:"partial",days:f,oldestTs:a,truncated:!1,unreadable:d}}},95736:(a,b,c)=>{"use strict";a.exports=c(44870)},96487:()=>{}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-c271465961823a3e.js","static/chunks/4bd1b696-f785427dddbba9fb.js","static/chunks/1255-612df69cb02f2021.js","static/chunks/main-app-6dcbd7e901d0070a.js"],rootMainFilesTree:{},pages:{"/_app":["static/chunks/webpack-c271465961823a3e.js","static/chunks/framework-6dcb94a73b69c7a9.js","static/chunks/main-6828c74376f2b965.js","static/chunks/pages/_app-55d77747009218cb.js"],"/_error":["static/chunks/webpack-c271465961823a3e.js","static/chunks/framework-6dcb94a73b69c7a9.js","static/chunks/main-6828c74376f2b965.js","static/chunks/pages/_error-72c0e9c72b90d370.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-c271465961823a3e.js","static/chunks/4bd1b696-f785427dddbba9fb.js","static/chunks/1255-fc6c00ab2f765339.js","static/chunks/main-app-6dcbd7e901d0070a.js"],rootMainFilesTree:{},pages:{"/_app":["static/chunks/webpack-c271465961823a3e.js","static/chunks/framework-6dcb94a73b69c7a9.js","static/chunks/main-574ae5bf2f2165c4.js","static/chunks/pages/_app-55d77747009218cb.js"],"/_error":["static/chunks/webpack-c271465961823a3e.js","static/chunks/framework-6dcb94a73b69c7a9.js","static/chunks/main-574ae5bf2f2165c4.js","static/chunks/pages/_error-72c0e9c72b90d370.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
@@ -17,11 +17,11 @@
17
17
  "wasm": [],
18
18
  "assets": [],
19
19
  "env": {
20
- "__NEXT_BUILD_ID": "da1c2e66999c334d135d9",
21
- "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "4JMwGuCVqDQZYR34ct16W3e5tKgq2cynppiCEo01+6A=",
22
- "__NEXT_PREVIEW_MODE_ID": "3009809d6bb6110233a604a935877299",
23
- "__NEXT_PREVIEW_MODE_SIGNING_KEY": "fff034baeac7de052ab613235eb882ea3b1089d7e8f2de2c64b32dc3511ff741",
24
- "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "320a0cc6d28a2b5242edc5922764e6219c92aacf92bc1ddc95937f672808c22e"
20
+ "__NEXT_BUILD_ID": "4602553707d90d0fadeba",
21
+ "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "YdPu++v3t7SL5B92FFPux6ElqWEv+lhsJGojuIFAPjA=",
22
+ "__NEXT_PREVIEW_MODE_ID": "3f8a0dcf64bbfddbe99a7782cf3ab463",
23
+ "__NEXT_PREVIEW_MODE_SIGNING_KEY": "9446ae6ca7d23334de6523ce60710bef803c8dcf2dd3e4b64212d97995231f9f",
24
+ "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "0d4cd96639484e34ea687a06b45ddf113ca07c1412d1a90e80423cf7392da419"
25
25
  }
26
26
  }
27
27
  },
@@ -1 +1 @@
1
- <!DOCTYPE html><!--da1c2e66999c334d135d9--><html lang="en" dir="ltr" class="__variable_01ae00 __variable_f367f3 __variable_46fe82 __variable_c5564f"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/94d302c686de7e23.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9b639a814d15c5ff.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-c271465961823a3e.js"/><script src="/_next/static/chunks/4bd1b696-f785427dddbba9fb.js" async=""></script><script src="/_next/static/chunks/1255-612df69cb02f2021.js" async=""></script><script src="/_next/static/chunks/main-app-6dcbd7e901d0070a.js" async=""></script><script src="/_next/static/chunks/3192-6b341d547a49fa85.js" async=""></script><script src="/_next/static/chunks/1681-b233404f9ec2fc2e.js" async=""></script><script src="/_next/static/chunks/app/error-37987420de14c10c.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>af360 - everything you&#x27;ve built, watched from one place</title><script src="/boot.js"></script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-c271465961823a3e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[9567,[\"3192\",\"static/chunks/3192-6b341d547a49fa85.js\",\"1681\",\"static/chunks/1681-b233404f9ec2fc2e.js\",\"8039\",\"static/chunks/app/error-37987420de14c10c.js\"],\"default\"]\n4:I[8924,[],\"\"]\n5:I[4431,[],\"OutletBoundary\"]\n7:I[5278,[],\"AsyncMetadataOutlet\"]\n9:I[4431,[],\"ViewportBoundary\"]\nb:I[4431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[7150,[],\"\"]\n:HL[\"/_next/static/css/94d302c686de7e23.css\",\"style\"]\n:HL[\"/_next/static/css/9b639a814d15c5ff.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"da1c2e66999c334d135d9\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/94d302c686de7e23.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9b639a814d15c5ff.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"dir\":\"ltr\",\"suppressHydrationWarning\":true,\"className\":\"__variable_01ae00 __variable_f367f3 __variable_46fe82 __variable_c5564f\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"src\":\"/boot.js\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"af360 - everything you've built, watched from one place\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--4602553707d90d0fadeba--><html lang="en" dir="ltr" class="__variable_01ae00 __variable_f367f3 __variable_46fe82 __variable_c5564f"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/fbb4cf81dde34731.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/9b639a814d15c5ff.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-c271465961823a3e.js"/><script src="/_next/static/chunks/4bd1b696-f785427dddbba9fb.js" async=""></script><script src="/_next/static/chunks/1255-fc6c00ab2f765339.js" async=""></script><script src="/_next/static/chunks/main-app-6dcbd7e901d0070a.js" async=""></script><script src="/_next/static/chunks/3192-40ade9877c89ec45.js" async=""></script><script src="/_next/static/chunks/8050-a75457e83cd8be0f.js" async=""></script><script src="/_next/static/chunks/app/error-c67c297ef2dd70de.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>af360 - everything you&#x27;ve built, watched from one place</title><script src="/boot.js"></script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-c271465961823a3e.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[9567,[\"3192\",\"static/chunks/3192-40ade9877c89ec45.js\",\"8050\",\"static/chunks/8050-a75457e83cd8be0f.js\",\"8039\",\"static/chunks/app/error-c67c297ef2dd70de.js\"],\"default\"]\n4:I[8924,[],\"\"]\n5:I[4431,[],\"OutletBoundary\"]\n7:I[5278,[],\"AsyncMetadataOutlet\"]\n9:I[4431,[],\"ViewportBoundary\"]\nb:I[4431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[7150,[],\"\"]\n:HL[\"/_next/static/css/fbb4cf81dde34731.css\",\"style\"]\n:HL[\"/_next/static/css/9b639a814d15c5ff.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"4602553707d90d0fadeba\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/fbb4cf81dde34731.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9b639a814d15c5ff.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"dir\":\"ltr\",\"suppressHydrationWarning\":true,\"className\":\"__variable_01ae00 __variable_f367f3 __variable_46fe82 __variable_c5564f\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"src\":\"/boot.js\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"af360 - everything you've built, watched from one place\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c271465961823a3e.js" defer=""></script><script src="/_next/static/chunks/framework-6dcb94a73b69c7a9.js" defer=""></script><script src="/_next/static/chunks/main-6828c74376f2b965.js" defer=""></script><script src="/_next/static/chunks/pages/_app-55d77747009218cb.js" defer=""></script><script src="/_next/static/chunks/pages/_error-72c0e9c72b90d370.js" defer=""></script><script src="/_next/static/da1c2e66999c334d135d9/_buildManifest.js" defer=""></script><script src="/_next/static/da1c2e66999c334d135d9/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"da1c2e66999c334d135d9","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-c271465961823a3e.js" defer=""></script><script src="/_next/static/chunks/framework-6dcb94a73b69c7a9.js" defer=""></script><script src="/_next/static/chunks/main-574ae5bf2f2165c4.js" defer=""></script><script src="/_next/static/chunks/pages/_app-55d77747009218cb.js" defer=""></script><script src="/_next/static/chunks/pages/_error-72c0e9c72b90d370.js" defer=""></script><script src="/_next/static/4602553707d90d0fadeba/_buildManifest.js" defer=""></script><script src="/_next/static/4602553707d90d0fadeba/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"4602553707d90d0fadeba","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"4JMwGuCVqDQZYR34ct16W3e5tKgq2cynppiCEo01+6A="}
1
+ {"node":{},"edge":{},"encryptionKey":"YdPu++v3t7SL5B92FFPux6ElqWEv+lhsJGojuIFAPjA="}