station-kit 1.0.4 → 1.0.6

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 (71) hide show
  1. package/.next/standalone/packages/station-kit/.next/BUILD_ID +1 -1
  2. package/.next/standalone/packages/station-kit/.next/app-build-manifest.json +16 -16
  3. package/.next/standalone/packages/station-kit/.next/app-path-routes-manifest.json +3 -3
  4. package/.next/standalone/packages/station-kit/.next/build-manifest.json +2 -2
  5. package/.next/standalone/packages/station-kit/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/packages/station-kit/.next/server/app/_not-found.html +1 -1
  7. package/.next/standalone/packages/station-kit/.next/server/app/_not-found.rsc +7 -7
  8. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/[id]/page.js +1 -1
  9. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/[id]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.html +1 -1
  12. package/.next/standalone/packages/station-kit/.next/server/app/broadcasts.rsc +8 -8
  13. package/.next/standalone/packages/station-kit/.next/server/app/index.html +1 -1
  14. package/.next/standalone/packages/station-kit/.next/server/app/index.rsc +8 -8
  15. package/.next/standalone/packages/station-kit/.next/server/app/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/packages/station-kit/.next/server/app/runs/[id]/page.js +1 -1
  17. package/.next/standalone/packages/station-kit/.next/server/app/runs/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/packages/station-kit/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/packages/station-kit/.next/server/app/settings.html +1 -1
  20. package/.next/standalone/packages/station-kit/.next/server/app/settings.rsc +8 -8
  21. package/.next/standalone/packages/station-kit/.next/server/app/signals/[name]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/packages/station-kit/.next/server/app/signals/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/packages/station-kit/.next/server/app/signals.html +1 -1
  24. package/.next/standalone/packages/station-kit/.next/server/app/signals.rsc +8 -8
  25. package/.next/standalone/packages/station-kit/.next/server/app-paths-manifest.json +3 -3
  26. package/.next/standalone/packages/station-kit/.next/server/chunks/102.js +1 -1
  27. package/.next/standalone/packages/station-kit/.next/server/pages/404.html +1 -1
  28. package/.next/standalone/packages/station-kit/.next/server/pages/500.html +1 -1
  29. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/[id]/page-a0a20cccda13a0e9.js +1 -0
  30. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-937eb876f9087bc9.js +1 -0
  31. package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-68cd71116ba65cd8.js +1 -0
  32. package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-70b0c0958c03459a.js +1 -0
  33. package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-01f8040619fe56c5.js +1 -0
  34. package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-beac11049f90da31.js +1 -0
  35. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-931e6a38a4a53d25.js +1 -0
  36. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-6a123a355d93fec5.js +1 -0
  37. package/.next/standalone/packages/station-kit/package.json +5 -5
  38. package/dist/cli-main.js +0 -1
  39. package/dist/cli-main.js.map +1 -1
  40. package/dist/server/index.js +3 -3
  41. package/dist/server/index.js.map +1 -1
  42. package/dist/server/routes/broadcasts.d.ts.map +1 -1
  43. package/dist/server/routes/broadcasts.js +23 -0
  44. package/dist/server/routes/broadcasts.js.map +1 -1
  45. package/dist/server/routes/runs.d.ts +2 -0
  46. package/dist/server/routes/runs.d.ts.map +1 -1
  47. package/dist/server/routes/runs.js +66 -0
  48. package/dist/server/routes/runs.js.map +1 -1
  49. package/dist/server/routes/v1/trigger.d.ts +2 -1
  50. package/dist/server/routes/v1/trigger.d.ts.map +1 -1
  51. package/dist/server/routes/v1/trigger.js +88 -0
  52. package/dist/server/routes/v1/trigger.js.map +1 -1
  53. package/package.json +7 -7
  54. package/src/app/broadcasts/[id]/broadcast-detail.tsx +22 -1
  55. package/src/app/hooks/use-api.ts +3 -0
  56. package/src/app/runs/[id]/run-detail.tsx +45 -1
  57. package/src/cli-main.ts +0 -2
  58. package/src/server/index.ts +3 -3
  59. package/src/server/routes/broadcasts.ts +24 -0
  60. package/src/server/routes/runs.ts +76 -0
  61. package/src/server/routes/v1/trigger.ts +105 -1
  62. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/[id]/page-a41371d946262e43.js +0 -1
  63. package/.next/standalone/packages/station-kit/.next/static/chunks/app/broadcasts/page-1b9fa68dcc219e1d.js +0 -1
  64. package/.next/standalone/packages/station-kit/.next/static/chunks/app/layout-9d37f15ea4fdcabf.js +0 -1
  65. package/.next/standalone/packages/station-kit/.next/static/chunks/app/page-0c92bbc0acac1025.js +0 -1
  66. package/.next/standalone/packages/station-kit/.next/static/chunks/app/runs/[id]/page-87e302dcd2f7516b.js +0 -1
  67. package/.next/standalone/packages/station-kit/.next/static/chunks/app/settings/page-39f130df9a05bf2b.js +0 -1
  68. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/[name]/page-215ec395e232fb36.js +0 -1
  69. package/.next/standalone/packages/station-kit/.next/static/chunks/app/signals/page-35b38b909a017693.js +0 -1
  70. /package/.next/standalone/packages/station-kit/.next/static/{N35gaJaRzxsPz1eltAPt4 → kqMlNlRLox_FLRK-2GwrJ}/_buildManifest.js +0 -0
  71. /package/.next/standalone/packages/station-kit/.next/static/{N35gaJaRzxsPz1eltAPt4 → kqMlNlRLox_FLRK-2GwrJ}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[115],{593:(e,t,a)=>{"use strict";async function n(e,t){let a=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!a.ok)throw Error((await a.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return a.json()}async function s(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function r(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function l(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function o(){return{getHealth:()=>n("/health"),getSignals:()=>n("/signals"),getScheduledSignals:()=>n("/signals/scheduled"),getSignal:e=>n("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>n("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>n("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let a=t.toString();return n("/runs".concat(a?"?".concat(a):""))},getRunStats:()=>n("/runs/stats"),getRun:e=>n("/runs/".concat(e)),getRunSteps:e=>n("/runs/".concat(e,"/steps")),getRunLogs:e=>n("/runs/".concat(e,"/logs")),cancelRun:e=>n("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>n("/broadcasts"),getBroadcast:e=>n("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>n("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>n("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>n("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>n("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>n("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>n("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>n("/v1/keys"),createApiKey:(e,t)=>n("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>n("/v1/keys/".concat(e),{method:"DELETE"})}}a.d(t,{T5:()=>s,gf:()=>o,iD:()=>r,ri:()=>l})},1253:(e,t,a)=>{"use strict";a.d(t,{W:()=>s});var n=a(8111);function s(e){let{status:t}=e;return(0,n.jsxs)("span",{className:"status-badge status-badge--".concat(t),children:[(0,n.jsx)("span",{className:"status-badge-dot"}),t]})}},1489:(e,t,a)=>{"use strict";a.d(t,{s:()=>l});var n=a(8111),s=a(5271);function r(e){let t=Date.now()-new Date(e).getTime();if(t<0)return"just now";let a=Math.floor(t/1e3);if(a<5)return"just now";if(a<60)return"".concat(a,"s ago");let n=Math.floor(a/60);if(n<60)return"".concat(n,"m ago");let s=Math.floor(n/60);if(s<24)return"".concat(s,"h ago");let r=Math.floor(s/24);return"".concat(r,"d ago")}function l(e){let{date:t}=e,[a,l]=(0,s.useState)(()=>r(t));return(0,s.useEffect)(()=>{let e=setInterval(()=>{l(r(t))},5e3);return()=>clearInterval(e)},[t]),(0,n.jsx)("span",{className:"mono",title:new Date(t).toLocaleString(),style:{fontSize:"0.8125rem",color:"var(--muted)"},children:a})}},1794:(e,t,a)=>{"use strict";a.d(t,{p:()=>r});var n=a(8111),s=a(5271);function r(e){let t,{data:a,label:r}=e,[l,o]=(0,s.useState)(!0),[i,c]=(0,s.useState)(!0),[d,u]=(0,s.useState)("copy"),m=(0,s.useCallback)(()=>{if(!a)return;let e=function(e){try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(t){return e}}(a);navigator.clipboard.writeText(e).then(()=>{u("copied"),setTimeout(()=>u("copy"),1500)}).catch(()=>{u("failed"),setTimeout(()=>u("copy"),1500)})},[a]);if(!a)return null;try{t=JSON.parse(a)}catch(e){t=a}let h="object"==typeof t&&null!==t&&JSON.stringify(t).length>200;return(0,n.jsxs)("div",{children:[r&&(0,n.jsxs)("button",{onClick:()=>o(!l),style:{background:"none",border:"none",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:"0.75rem",color:"var(--muted)",padding:"0.25rem 0",textTransform:"uppercase",letterSpacing:"0.1em"},children:[l?"- ":"+ ",r]}),l&&(0,n.jsxs)("pre",{className:"json-viewer",style:{position:"relative"},children:[(0,n.jsx)("button",{className:"copy-btn",onClick:m,type:"button",children:d}),h&&(0,n.jsx)("button",{onClick:()=>c(!i),style:{position:"absolute",top:"0.5rem",right:"4rem",background:"var(--wire)",border:"none",borderRadius:"3px",padding:"0.25rem 0.5rem",fontFamily:"var(--font-mono)",fontSize:"0.625rem",color:"var(--muted-light)",cursor:"pointer",textTransform:"uppercase",letterSpacing:"0.1em"},type:"button",children:i?"collapse":"expand"}),function e(t,a,s){if(null===t)return(0,n.jsx)("span",{className:"json-null",children:"null"});if("boolean"==typeof t)return(0,n.jsx)("span",{className:"json-boolean",children:String(t)});if("number"==typeof t)return(0,n.jsx)("span",{className:"json-number",children:t});if("string"==typeof t)return(0,n.jsxs)("span",{className:"json-string",children:['"',t,'"']});if(Array.isArray(t))return 0===t.length?(0,n.jsx)("span",{children:"[]"}):!s&&a>3?(0,n.jsxs)("span",{children:["[",t.length," items]"]}):(0,n.jsxs)("span",{children:["[\n",t.map((r,l)=>(0,n.jsxs)("span",{children:[" ".repeat(a+1),e(r,a+1,s),l<t.length-1?",":"","\n"]},l))," ".repeat(a),"]"]});if("object"==typeof t){let r=Object.entries(t);return 0===r.length?(0,n.jsx)("span",{children:"{}"}):!s&&a>3?(0,n.jsx)("span",{children:"{".concat(r.length," keys}")}):(0,n.jsxs)("span",{children:["{\n",r.map((t,l)=>{let[o,i]=t;return(0,n.jsxs)("span",{children:[" ".repeat(a+1),(0,n.jsxs)("span",{className:"json-key",children:['"',o,'"']}),": ",e(i,a+1,s),l<r.length-1?",":"","\n"]},o)})," ".repeat(a),"}"]})}return(0,n.jsx)("span",{children:String(t)})}(t,0,i)]})]})}},3055:(e,t,a)=>{"use strict";a.d(t,{q:()=>l});var n=a(8111),s=a(5271);function r(e){let{schema:t}=e;if("object"!==t.type||!t.properties)return null;let a=Object.entries(t.properties);return 0===a.length?null:(0,n.jsxs)("div",{className:"schema-ref",children:[(0,n.jsx)("div",{className:"schema-ref-title",children:"Expected Input"}),a.map(e=>{let[t,a]=e;return(0,n.jsxs)("div",{className:"schema-field",children:[(0,n.jsx)("span",{className:"schema-field-name",children:t}),(0,n.jsx)("span",{className:"schema-field-type".concat(a.required?"":" schema-field-type--optional"),children:a.type})]},t)})]})}function l(e){let{schema:t,value:a,onChange:l}=e,[o,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if(!c){if(t&&"{}"===a){let e=JSON.stringify(function e(t){switch(t.type){case"string":return"";case"number":case"integer":return 0;case"boolean":return!1;case"array":return[];case"enum":if(t.values&&t.values.length>0)return t.values[0];return"";case"object":{if(!t.properties)return{};let a={};for(let[n,s]of Object.entries(t.properties))a[n]=e(s);return a}default:return null}}(t),null,2);"{}"!==e&&l(e)}d(!0)}},[t,a,l,c]),(0,n.jsxs)("div",{children:[t&&"object"===t.type&&t.properties&&(0,n.jsx)(r,{schema:t}),(0,n.jsx)("textarea",{className:"input-textarea",value:a,onChange:e=>(function(e){if(l(e),""===e.trim())return void i(null);try{JSON.parse(e),i(null)}catch(e){e instanceof SyntaxError?i(e.message):i("Invalid JSON")}})(e.target.value),rows:6,spellCheck:!1,placeholder:"{}"}),o&&(0,n.jsx)("div",{className:"json-parse-error",children:o})]})}},3957:(e,t,a)=>{Promise.resolve().then(a.bind(a,6537))},6537:(e,t,a)=>{"use strict";a.d(t,{BroadcastDetail:()=>B});var n=a(8111),s=a(5271),r=a(4736),l=a(5935),o=a.n(l),i=a(593),c=a(9275),d=a(7646),u=a(1253),m=a(9129);let h={completed:{bar:"#4A6741",fill:"rgba(74, 103, 65, 0.06)",stroke:"#4A6741",text:"#4A6741"},running:{bar:"#6B9962",fill:"rgba(107, 153, 98, 0.08)",stroke:"#6B9962",text:"#4A6741"},failed:{bar:"#8B5A2B",fill:"rgba(139, 90, 43, 0.06)",stroke:"#8B5A2B",text:"#8B5A2B"},pending:{bar:"#D4CEBF",fill:"#F9F7F3",stroke:"#D4CEBF",text:"#8A8A8E"},cancelled:{bar:"#AEAEB2",fill:"rgba(139, 90, 43, 0.03)",stroke:"#AEAEB2",text:"#8A8A8E"},skipped:{bar:"#AEAEB2",fill:"transparent",stroke:"#AEAEB2",text:"#8A8A8E"}},f={completed:{bar:"#6B9962",fill:"rgba(107, 153, 98, 0.12)",stroke:"#6B9962",text:"#8BB882"},running:{bar:"#8BB882",fill:"rgba(139, 185, 130, 0.1)",stroke:"#8BB882",text:"#8BB882"},failed:{bar:"#C4834A",fill:"rgba(196, 131, 74, 0.1)",stroke:"#C4834A",text:"#D4975C"},pending:{bar:"#4A4A4C",fill:"#252527",stroke:"#4A4A4C",text:"#8A8A8E"},cancelled:{bar:"#6A6A6E",fill:"rgba(60, 60, 62, 0.3)",stroke:"#6A6A6E",text:"#8A8A8E"},skipped:{bar:"#6A6A6E",fill:"transparent",stroke:"#6A6A6E",text:"#8A8A8E"}},g={bar:"#4A6741",fill:"#FFFFFF",stroke:"#D4CEBF",text:"#1C1C1E"},p={bar:"#6B9962",fill:"#222224",stroke:"#4A4A4C",text:"#E8E4DC"};function x(e){var t,a;if(0===e.length)return[];let n=new Map;for(let t of e)n.set(t.name,t);let s=new Map;for(let t of e)!function e(t,a){if(s.has(t))return s.get(t);if(a.has(t))return 0;a.add(t);let r=n.get(t);if(!r||0===r.dependsOn.length)return s.set(t,0),0;let l=0;for(let t of r.dependsOn)n.has(t)&&(l=Math.max(l,e(t,a)+1));return s.set(t,l),l}(t.name,new Set);let r=new Map;for(let a of e){let e=null!=(t=s.get(a.name))?t:0;r.has(e)||r.set(e,[]),r.get(e).push(a)}let l=Math.max(...Array.from(r.keys()),0),o=[];for(let e=0;e<=l;e++)o.push(null!=(a=r.get(e))?a:[]);return o.filter(e=>e.length>0)}function j(e){let{nodes:t,onNodeClick:a,selectedNode:s,compact:r}=e,{theme:l}=(0,m.D)(),o="dark"===l,i=o?f:h,c=o?p:g;if(0===t.length)return(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"No nodes."})});let d=r?140:184,u=r?36:60,{positions:j,svgWidth:v,svgHeight:N}=function(e,t){let a=new Map;if(0===e.length)return{positions:a,svgWidth:0,svgHeight:0};let{nodeWidth:n,nodeHeight:s,gapX:r,gapY:l,paddingX:o,paddingY:i}=t,c=Math.max(1,...e.map(e=>e.length))*(n+r)-r+2*o,d=e.length*(s+l)-l+2*i;for(let t=0;t<e.length;t++){let o=e[t],d=(c-(o.length*(n+r)-r))/2,u=i+t*(s+l);for(let e=0;e<o.length;e++){let t=d+e*(n+r);a.set(o[e].name,{x:t,y:u,node:o[e]})}}return{positions:a,svgWidth:c,svgHeight:d}}(x(t),{nodeWidth:d,nodeHeight:u,gapX:r?32:48,gapY:r?28:40,paddingX:r?20:32,paddingY:r?16:24}),b=t.some(e=>void 0!==e.status),y=new Map;for(let e of t)e.status&&y.set(e.name,e.status);let w=[];for(let e of t)for(let t of e.dependsOn)j.has(t)&&w.push({from:t,to:e.name});return(0,n.jsx)("div",{className:"dag-container",children:(0,n.jsxs)("svg",{width:v,height:N,viewBox:"0 0 ".concat(v," ").concat(N),style:{display:"block",margin:"0 auto"},children:[(0,n.jsxs)("defs",{children:[(0,n.jsx)("marker",{id:"dag-arrow",viewBox:"0 0 6 6",refX:"6",refY:"3",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:(0,n.jsx)("path",{d:"M 0 0 L 6 3 L 0 6 z",fill:o?"#4A4A4C":"#D4CEBF"})}),(0,n.jsx)("marker",{id:"dag-arrow-active",viewBox:"0 0 6 6",refX:"6",refY:"3",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse",children:(0,n.jsx)("path",{d:"M 0 0 L 6 3 L 0 6 z",fill:o?"#6B9962":"#4A6741"})})]}),w.map(e=>{let t=j.get(e.from),a=j.get(e.to);if(!t||!a)return null;let s="completed"===y.get(e.from),r="skipped"===y.get(e.to),l=t.x+d/2,o=t.y+u,i=a.x+d/2,c=a.y,m=(o+c)/2,h="M ".concat(l," ").concat(o," C ").concat(l," ").concat(m,", ").concat(i," ").concat(m,", ").concat(i," ").concat(c);return(0,n.jsx)("path",{d:h,className:"dag-edge".concat(s?" dag-edge--active":""),strokeDasharray:r?"4 3":void 0,markerEnd:"url(#".concat(s?"dag-arrow-active":"dag-arrow",")")},"".concat(e.from,"->").concat(e.to))}),Array.from(j.values()).map(e=>{var t;let{x:l,y:m,node:h}=e,f=void 0!==h.status&&null!==h.status,g=f&&null!=(t=i[h.status])?t:c,p="skipped"===h.status,x=s===h.name,j="running"===h.status,v=function(e,t){if(!e)return null;let a=new Date(e).getTime(),n=(t?new Date(t).getTime():Date.now())-a;return n<1e3?"".concat(n,"ms"):n<6e4?"".concat((n/1e3).toFixed(1),"s"):"".concat((n/6e4).toFixed(1),"m")}(h.startedAt,h.completedAt),N=r?14:18,y=h.name.length>N?h.name.slice(0,N-1)+"…":h.name,w=h.signalName.length>22?h.signalName.slice(0,21)+"…":h.signalName;return(0,n.jsxs)("g",{className:"dag-node".concat(x?" dag-node--selected":""),onClick:()=>null==a?void 0:a(h.name),style:{cursor:a?"pointer":"default"},role:a?"button":void 0,tabIndex:a?0:void 0,"aria-label":"".concat(h.name).concat(f?", "+h.status:""),onKeyDown:e=>{a&&("Enter"===e.key||" "===e.key)&&(e.preventDefault(),a(h.name))},children:[j&&(0,n.jsx)("rect",{x:l-3,y:m-3,width:d+6,height:u+6,rx:7,fill:"none",stroke:o?"#8BB882":"#6B9962",strokeWidth:2,children:(0,n.jsx)("animate",{attributeName:"opacity",values:"0;0.5;0",dur:"2.4s",repeatCount:"indefinite"})}),(0,n.jsx)("rect",{x:l,y:m,width:d,height:u,rx:4,fill:g.fill,stroke:g.stroke,strokeWidth:x?2.5:1.5,strokeDasharray:p?"4 3":void 0}),(0,n.jsx)("rect",{x:l,y:m,width:d,height:4,rx:4,fill:g.bar}),(0,n.jsx)("rect",{x:l,y:m+2,width:d,height:2,fill:g.bar}),(0,n.jsx)("text",{x:l+8,y:r?m+u/2+2:m+4+16,fill:g.text,dominantBaseline:"middle",style:{fontSize:r?"10px":"11px",fontFamily:"var(--font-mono)",fontWeight:500},children:y}),r&&b&&f&&(0,n.jsx)("text",{x:l+d-8,y:m+u/2+2,fill:g.text,opacity:.5,dominantBaseline:"middle",textAnchor:"end",style:{fontSize:"8px",fontFamily:"var(--font-mono)",textTransform:"uppercase",letterSpacing:"0.05em"},children:null!=v?v:h.status}),!r&&(0,n.jsxs)(n.Fragment,{children:[b&&v&&(0,n.jsx)("text",{x:l+d-10,y:m+4+16,fill:g.text,opacity:.6,dominantBaseline:"middle",textAnchor:"end",style:{fontSize:"9px",fontFamily:"var(--font-mono)"},children:v}),(0,n.jsx)("text",{x:l+10,y:m+u-10,fill:g.text,opacity:.45,dominantBaseline:"middle",style:{fontSize:"9px",fontFamily:"var(--font-mono)"},children:w}),b&&f&&(0,n.jsx)("text",{x:l+d-10,y:m+u-10,fill:g.text,opacity:.5,dominantBaseline:"middle",textAnchor:"end",style:{fontSize:"8px",fontFamily:"var(--font-mono)",textTransform:"uppercase",letterSpacing:"0.05em"},children:h.status})]})]},h.name)})]})})}var v=a(1794);function N(e){let{label:t,children:a}=e,[r,l]=(0,s.useState)(!1);return(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsxs)("button",{className:"collapsible-header",onClick:()=>l(!r),children:[(0,n.jsx)("span",{className:"collapsible-chevron",children:r?"▾":"▸"}),t]}),r&&(0,n.jsx)("div",{className:"collapsible-content",children:a})]})}function b(e){let{node:t,logs:a}=e,r=(0,s.useRef)(null);return(0,s.useEffect)(()=>{var e;null==(e=r.current)||e.scrollIntoView({behavior:"smooth"})},[null==a?void 0:a.length]),(0,n.jsxs)("div",{className:"workflow-panel",children:[(0,n.jsxs)("div",{className:"node-detail-header",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,n.jsx)("span",{className:"node-detail-title",children:t.nodeName}),(0,n.jsx)(u.W,{status:t.status})]}),(0,n.jsxs)("span",{className:"node-detail-meta",children:[t.signalName," ","\xb7"," ",function(e,t){if(!e)return"-";let a=new Date(e).getTime(),n=(t?new Date(t).getTime():Date.now())-a;return n<1e3?"".concat(n,"ms"):n<6e4?"".concat((n/1e3).toFixed(1),"s"):"".concat((n/6e4).toFixed(1),"m")}(t.startedAt,t.completedAt)]})]}),"skipped"===t.status&&t.skipReason&&(0,n.jsx)("div",{className:"detail-section",children:(0,n.jsxs)("div",{style:{fontFamily:"var(--font-mono)",fontSize:"0.8125rem",color:"var(--muted)",padding:"0.5rem 0"},children:["Skipped: ",t.skipReason]})}),t.error&&(0,n.jsx)("div",{className:"detail-section",children:(0,n.jsx)("div",{className:"error-block",children:t.error})}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Logs"}),(0,n.jsxs)("div",{className:"log-container",style:{maxHeight:"none",minHeight:"120px"},children:[a&&0!==a.length?a.map((e,t)=>(0,n.jsxs)("div",{className:"log-line",style:{color:"stderr"===e.level?"var(--rust)":"var(--charcoal)"},children:[(0,n.jsx)("span",{className:"log-timestamp",children:new Date(e.timestamp).toLocaleTimeString()}),(0,n.jsx)("span",{className:"log-level","data-level":e.level,children:"stderr"===e.level?"ERR":"OUT"}),(0,n.jsx)("span",{className:"log-message",children:e.message})]},t)):(0,n.jsx)("div",{style:{padding:"1rem",color:"var(--muted)",fontFamily:"var(--font-mono)",fontSize:"0.75rem"},children:"pending"===t.status?"Waiting for execution...":"skipped"===t.status?"Node was skipped.":"No log output captured."}),(0,n.jsx)("div",{ref:r})]})]}),t.input&&(0,n.jsx)(N,{label:"Input",children:(0,n.jsx)(v.p,{data:t.input})}),t.output&&(0,n.jsx)(N,{label:"Output",children:(0,n.jsx)(v.p,{data:t.output})}),t.signalRunId&&(0,n.jsx)("div",{className:"detail-section",style:{paddingTop:"0.25rem"},children:(0,n.jsx)(o(),{href:"/runs/".concat(t.signalRunId),className:"meta-value--link",style:{fontSize:"0.8125rem"},children:"View signal run →"})})]})}function y(e){let{nodes:t,selectedNode:a,onSelectNode:s}=e,r=function(){let{theme:e}=(0,m.D)();return"dark"===e?f:h}(),{theme:l}=(0,m.D)(),o="dark"===l?"#4A4A4C":"#D4CEBF";return(0,n.jsxs)("div",{className:"workflow-sidebar",children:[(0,n.jsx)("div",{className:"workflow-sidebar-label",children:"Nodes"}),t.map(e=>{var t;let l=a===e.nodeName,i=r[e.status],c=null!=(t=null==i?void 0:i.bar)?t:o,d=function(e,t){if(!e)return null;let a=new Date(e).getTime(),n=(t?new Date(t).getTime():Date.now())-a;return n<1e3?"".concat(n,"ms"):n<6e4?"".concat((n/1e3).toFixed(1),"s"):"".concat((n/6e4).toFixed(1),"m")}(e.startedAt,e.completedAt),u="running"===e.status,m="failed"===e.status;return(0,n.jsxs)("button",{className:"workflow-node-item".concat(l?" workflow-node-item--active":"").concat(m?" workflow-node-item--failed":""),onClick:()=>s(e.nodeName),style:{paddingLeft:"".concat(.75+.75*e.tier,"rem")},children:[(0,n.jsx)("span",{className:"workflow-node-dot".concat(u?" workflow-node-dot--running":""),style:{backgroundColor:c}}),(0,n.jsx)("span",{className:"workflow-node-name",children:e.nodeName}),d&&(0,n.jsx)("span",{className:"workflow-node-duration",children:d})]},e.nodeName)})]})}var w=a(3055),k=a(1489);function S(e){return e<1e3?"".concat(e,"ms"):e<6e4?"".concat((e/1e3).toFixed(1),"s"):e<36e5?"".concat((e/6e4).toFixed(1),"m"):"".concat((e/36e5).toFixed(1),"h")}function A(e,t){if(!e)return"—";let a=new Date(e).getTime();return S((t?new Date(t).getTime():Date.now())-a)}function B(){let e=(0,r.useParams)().id;return/^[0-9a-f]{8}-/.test(e)?(0,n.jsx)(E,{id:e}):(0,n.jsx)(C,{name:e})}function C(e){var t;let{name:a}=e,r=decodeURIComponent(a),l=(0,i.gf)(),{events:o}=(0,c.q)(),[m,h]=(0,s.useState)(null),[f,g]=(0,s.useState)([]),[p,x]=(0,s.useState)(!0),[v,N]=(0,s.useState)("{}"),[b,y]=(0,s.useState)(!1),[B,C]=(0,s.useState)(null),[E,R]=(0,s.useState)(!1);(0,d.rT)([{label:"Broadcasts",href:"/broadcasts"},{label:r}],"broadcasts");let F=(0,s.useCallback)(()=>{l.getBroadcastRuns(a).then(e=>g(e.data)).catch(e=>console.error("Failed to refresh broadcast runs:",e))},[a]);async function T(){y(!0);try{let e=JSON.parse(v);await l.triggerBroadcast(a,e),N("{}"),R(!1),setTimeout(F,300)}catch(e){e instanceof Error&&console.error("Trigger failed:",e.message)}y(!1)}if((0,s.useEffect)(()=>{!async function(){try{let[e,t]=await Promise.all([l.getBroadcast(a),l.getBroadcastRuns(a)]);h(e.data),g(t.data)}catch(e){e instanceof Error&&console.error("Failed to load broadcast:",e.message)}x(!1)}()},[a]),(0,s.useEffect)(()=>{if(!m)return;let e=m.nodes.filter(e=>0===e.dependsOn.length);1===e.length&&l.getSignal(e[0].signalName).then(e=>C(e.data.inputSchema)).catch(e=>console.error("Failed to load root input schema:",e))},[m]),(0,s.useEffect)(()=>{if(0===o.length)return;let e=o[0];(e.type.startsWith("broadcast:")||e.type.startsWith("node:"))&&F()},[o.length,F]),p)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:r}),(0,n.jsx)("div",{className:"loading-bar",children:(0,n.jsx)("div",{className:"loading-bar-fill"})})]});if(!m)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:r}),(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"Broadcast not found."})})]});let D=m.nodes.map(e=>({name:e.name,signalName:e.signalName,dependsOn:e.dependsOn}));return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"page-header",children:[(0,n.jsx)("h1",{className:"page-title",style:{marginBottom:0},children:r}),(0,n.jsx)("div",{className:"page-header-actions",children:(0,n.jsx)("button",{className:"btn btn--primary",onClick:()=>R(!E),children:E?"Close":"Trigger"})})]}),E&&(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)(w.q,{schema:B,value:v,onChange:N}),(0,n.jsx)("div",{style:{marginTop:"0.5rem"},children:(0,n.jsx)("button",{className:"btn btn--primary",onClick:T,disabled:b,children:b?"Dispatching...":"Dispatch"})})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Runs"}),0===f.length?(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"No runs yet. Trigger a broadcast to get started."})}):(0,n.jsxs)("table",{className:"station-table",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:"Status"}),(0,n.jsx)("th",{children:"Run"}),(0,n.jsx)("th",{children:"Duration"}),(0,n.jsx)("th",{children:"Created"})]})}),(0,n.jsx)("tbody",{children:f.map((e,t)=>(0,n.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*t,"ms")},onClick:()=>window.location.assign("/broadcasts/".concat(e.id)),children:[(0,n.jsx)("td",{children:(0,n.jsx)(u.W,{status:e.status})}),(0,n.jsx)("td",{className:"mono",children:e.id.slice(0,8)}),(0,n.jsx)("td",{className:"mono",children:A(e.startedAt,e.completedAt)}),(0,n.jsx)("td",{children:(0,n.jsx)(k.s,{date:e.createdAt})})]},e.id))})]})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Configuration"}),(0,n.jsxs)("div",{className:"config-grid",children:[(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Failure Policy"}),(0,n.jsx)("span",{className:"config-item-value",children:m.failurePolicy})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Timeout"}),(0,n.jsx)("span",{className:"config-item-value",children:null!==m.timeout?S(m.timeout):"—"})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Schedule"}),(0,n.jsx)("span",{className:"config-item-value",children:null!=(t=m.interval)?t:"Manual trigger"})]})]})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Workflow"}),(0,n.jsx)(j,{nodes:D})]})]})}function E(e){let{id:t}=e,a=(0,i.gf)(),{events:r}=(0,c.q)(),[l,m]=(0,s.useState)(null),[h,f]=(0,s.useState)([]),[g,p]=(0,s.useState)(null),[v,N]=(0,s.useState)([]),[w,k]=(0,s.useState)(!0),[S,B]=(0,s.useState)(!1),[C,E]=(0,s.useState)(null),R=(0,s.useRef)(new Set),F=(0,s.useRef)(!1);async function T(){B(!0);try{await a.cancelBroadcastRun(t);let e=await a.getBroadcastRun(t);m(e.data)}catch(e){e instanceof Error&&console.error("Cancel failed:",e.message)}B(!1)}(0,d.rT)(l?[{label:"Broadcasts",href:"/broadcasts"},{label:l.broadcastName,href:"/broadcasts/".concat(encodeURIComponent(l.broadcastName))},{label:"Run ".concat(t.slice(0,8))}]:[{label:"Broadcasts",href:"/broadcasts"},{label:"Run ".concat(t.slice(0,8))}],"broadcasts"),(0,s.useEffect)(()=>{!async function(){try{let[n,s,r]=await Promise.all([a.getBroadcastRun(t),a.getBroadcastRunNodes(t),a.getBroadcastRunLogs(t)]);m(n.data),f(s.data),N(r.data);let l=new Set;for(let e of s.data)e.signalRunId&&l.add(e.signalRunId);if(R.current=l,!F.current&&s.data.length>0){var e;F.current=!0;let t=s.data.find(e=>"failed"===e.status),a=s.data.find(e=>"running"===e.status);E((null!=(e=null!=t?t:a)?e:s.data[0]).nodeName)}n.data.broadcastName&&a.getBroadcast(n.data.broadcastName).then(e=>p(e.data)).catch(e=>console.error("Failed to load broadcast meta:",e))}catch(e){e instanceof Error&&console.error("Failed to load broadcast run:",e.message)}k(!1)}()},[t]),(0,s.useEffect)(()=>{if(0===r.length)return;let e=r[0];if("log:output"===e.type){let t=e.data.runId;if(R.current.has(t)){let a=h.find(e=>e.signalRunId===t);N(n=>{var s,r;return[...n,{runId:t,signalName:e.data.signalName,level:e.data.level,message:e.data.message,timestamp:null!=(s=e.data.timestamp)?s:e.timestamp,nodeName:null!=(r=null==a?void 0:a.nodeName)?r:""}]})}}(e.type.startsWith("broadcast:")||e.type.startsWith("node:"))&&(a.getBroadcastRun(t).then(e=>m(e.data)).catch(e=>console.error("Failed to refresh broadcast run:",e)),a.getBroadcastRunNodes(t).then(e=>{f(e.data);let t=new Set;for(let a of e.data)a.signalRunId&&t.add(a.signalRunId);R.current=t}).catch(e=>console.error("Failed to refresh node runs:",e)))},[r.length,t,h]);let D=(0,s.useMemo)(()=>{let e=new Map;if(g)for(let t of g.nodes)e.set(t.name,t.dependsOn);return e},[g]),O=(0,s.useMemo)(()=>h.map(e=>{var t;return{name:e.nodeName,signalName:e.signalName,dependsOn:null!=(t=D.get(e.nodeName))?t:[],status:e.status,startedAt:e.startedAt,completedAt:e.completedAt}}),[h,D]),I=(0,s.useMemo)(()=>{if(0===O.length)return[];let e=x(O),t=new Map;return e.forEach((e,a)=>{for(let n of e)t.set(n.name,a)}),e.flat().map(e=>{var a,n;let s=h.find(t=>t.nodeName===e.name);return{nodeName:e.name,signalName:e.signalName,status:null!=(a=null==s?void 0:s.status)?a:"pending",startedAt:null==s?void 0:s.startedAt,completedAt:null==s?void 0:s.completedAt,tier:null!=(n=t.get(e.name))?n:0}})},[O,h]),M=(0,s.useMemo)(()=>C?v.filter(e=>e.nodeName===C).map(e=>{let{level:t,message:a,timestamp:n}=e;return{level:t,message:a,timestamp:n}}):[],[v,C]),P=C?h.find(e=>e.nodeName===C):null;if(w)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Broadcast Run"}),(0,n.jsx)("div",{className:"loading-bar",children:(0,n.jsx)("div",{className:"loading-bar-fill"})})]});if(!l)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Broadcast Run"}),(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"Broadcast run not found."})})]});let W="pending"===l.status||"running"===l.status;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"page-header",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,n.jsx)(u.W,{status:l.status}),(0,n.jsx)(o(),{href:"/broadcasts/".concat(encodeURIComponent(l.broadcastName)),className:"page-title",style:{marginBottom:0,textDecoration:"none"},children:l.broadcastName}),(0,n.jsx)("span",{className:"mono",style:{color:"var(--muted)",fontSize:"0.75rem"},children:A(l.startedAt,l.completedAt)})]}),(0,n.jsx)("div",{className:"page-header-actions",children:W&&(0,n.jsx)("button",{className:"btn btn--danger",onClick:T,disabled:S,children:S?"Cancelling...":"Cancel"})})]}),l.error&&(0,n.jsx)("div",{className:"detail-section",children:(0,n.jsx)("div",{className:"error-block",children:l.error})}),O.length>0&&(0,n.jsx)("div",{className:"detail-section",children:(0,n.jsx)(j,{nodes:O,onNodeClick:e=>E(e),selectedNode:null!=C?C:void 0,compact:!0})}),I.length>0&&(0,n.jsxs)("div",{className:"workflow-layout",children:[(0,n.jsx)(y,{nodes:I,selectedNode:C,onSelectNode:E}),P?(0,n.jsx)(b,{node:P,logs:M}):(0,n.jsx)("div",{className:"workflow-panel",children:(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"Select a node to view details."})})})]})]})}},7646:(e,t,a)=>{"use strict";a.d(t,{Hc:()=>s,iQ:()=>l,rT:()=>r});var n=a(5271);let s=(0,n.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function r(e,t){let a=(0,n.useContext)(s);(0,n.useEffect)(()=>{a.setSegments(e),a.setActiveSection(t)},[JSON.stringify(e),t])}function l(){return(0,n.useContext)(s)}},9129:(e,t,a)=>{"use strict";a.d(t,{D:()=>l,ThemeProvider:()=>i});var n=a(8111),s=a(5271);let r=(0,s.createContext)({theme:"light",toggle:()=>{}});function l(){return(0,s.useContext)(r)}function o(){let e=localStorage.getItem("station-theme");return"light"===e||"dark"===e?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function i(e){let{children:t}=e,[a,l]=(0,s.useState)(o);(0,s.useEffect)(()=>{document.documentElement.setAttribute("data-theme",a),localStorage.setItem("station-theme",a)},[a]);let i=(0,s.useCallback)(()=>{l(e=>"light"===e?"dark":"light")},[]);return(0,n.jsx)(r.Provider,{value:{theme:a,toggle:i},children:t})}},9275:(e,t,a)=>{"use strict";a.d(t,{StationProvider:()=>o,q:()=>l});var n=a(8111),s=a(5271);let r=(0,s.createContext)({connected:!1,events:[]});function l(){return(0,s.useContext)(r)}function o(e){let{children:t}=e,[a,l]=(0,s.useState)([]),{connected:o}=function(e){let[t,a]=(0,s.useState)(!1),n=(0,s.useRef)(e);return n.current=e,(0,s.useEffect)(()=>{let e=null,t=null,s=0,r=!1;return!function l(){if(r)return;let o="https:"===window.location.protocol?"wss:":"ws:";(e=new WebSocket("".concat(o,"//").concat(window.location.host,"/api/events"))).onopen=()=>{a(!0),s=0},e.onmessage=e=>{try{let t=JSON.parse(e.data);n.current(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},e.onclose=()=>{if(a(!1),!r){let e=Math.min(1e3*Math.pow(2,s),1e4);s++,t=setTimeout(l,e)}},e.onerror=()=>{null==e||e.close()}}(),()=>{r=!0,t&&clearTimeout(t),null==e||e.close()}},[]),{connected:t}}((0,s.useCallback)(e=>{l(t=>[e,...t].slice(0,100))},[]));return(0,n.jsx)(r.Provider,{value:{connected:o,events:a},children:t})}}},e=>{e.O(0,[580,814,743,358],()=>e(e.s=3957)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[131],{593:(e,t,s)=>{"use strict";async function n(e,t){let s=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!s.ok)throw Error((await s.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return s.json()}async function a(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function c(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function r(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function o(){return{getHealth:()=>n("/health"),getSignals:()=>n("/signals"),getScheduledSignals:()=>n("/signals/scheduled"),getSignal:e=>n("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>n("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>n("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let s=t.toString();return n("/runs".concat(s?"?".concat(s):""))},getRunStats:()=>n("/runs/stats"),getRun:e=>n("/runs/".concat(e)),getRunSteps:e=>n("/runs/".concat(e,"/steps")),getRunLogs:e=>n("/runs/".concat(e,"/logs")),cancelRun:e=>n("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>n("/broadcasts"),getBroadcast:e=>n("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>n("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>n("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>n("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>n("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>n("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>n("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>n("/v1/keys"),createApiKey:(e,t)=>n("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>n("/v1/keys/".concat(e),{method:"DELETE"})}}s.d(t,{T5:()=>a,gf:()=>o,iD:()=>c,ri:()=>r})},2679:(e,t,s)=>{Promise.resolve().then(s.bind(s,9976))},3055:(e,t,s)=>{"use strict";s.d(t,{q:()=>r});var n=s(8111),a=s(5271);function c(e){let{schema:t}=e;if("object"!==t.type||!t.properties)return null;let s=Object.entries(t.properties);return 0===s.length?null:(0,n.jsxs)("div",{className:"schema-ref",children:[(0,n.jsx)("div",{className:"schema-ref-title",children:"Expected Input"}),s.map(e=>{let[t,s]=e;return(0,n.jsxs)("div",{className:"schema-field",children:[(0,n.jsx)("span",{className:"schema-field-name",children:t}),(0,n.jsx)("span",{className:"schema-field-type".concat(s.required?"":" schema-field-type--optional"),children:s.type})]},t)})]})}function r(e){let{schema:t,value:s,onChange:r}=e,[o,i]=(0,a.useState)(null),[l,d]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{if(!l){if(t&&"{}"===s){let e=JSON.stringify(function e(t){switch(t.type){case"string":return"";case"number":case"integer":return 0;case"boolean":return!1;case"array":return[];case"enum":if(t.values&&t.values.length>0)return t.values[0];return"";case"object":{if(!t.properties)return{};let s={};for(let[n,a]of Object.entries(t.properties))s[n]=e(a);return s}default:return null}}(t),null,2);"{}"!==e&&r(e)}d(!0)}},[t,s,r,l]),(0,n.jsxs)("div",{children:[t&&"object"===t.type&&t.properties&&(0,n.jsx)(c,{schema:t}),(0,n.jsx)("textarea",{className:"input-textarea",value:s,onChange:e=>(function(e){if(r(e),""===e.trim())return void i(null);try{JSON.parse(e),i(null)}catch(e){e instanceof SyntaxError?i(e.message):i("Invalid JSON")}})(e.target.value),rows:6,spellCheck:!1,placeholder:"{}"}),o&&(0,n.jsx)("div",{className:"json-parse-error",children:o})]})}},4736:(e,t,s)=>{"use strict";var n=s(1504);s.o(n,"useParams")&&s.d(t,{useParams:function(){return n.useParams}}),s.o(n,"usePathname")&&s.d(t,{usePathname:function(){return n.usePathname}}),s.o(n,"useRouter")&&s.d(t,{useRouter:function(){return n.useRouter}})},7646:(e,t,s)=>{"use strict";s.d(t,{Hc:()=>a,iQ:()=>r,rT:()=>c});var n=s(5271);let a=(0,n.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function c(e,t){let s=(0,n.useContext)(a);(0,n.useEffect)(()=>{s.setSegments(e),s.setActiveSection(t)},[JSON.stringify(e),t])}function r(){return(0,n.useContext)(a)}},9976:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>d});var n=s(8111),a=s(5271),c=s(4736),r=s(593),o=s(7646),i=s(3055);function l(e){return e<1e3?"".concat(e,"ms"):e<6e4?"".concat((e/1e3).toFixed(0),"s"):e<36e5?"".concat((e/6e4).toFixed(0),"m"):"".concat((e/36e5).toFixed(0),"h")}function d(){let e=(0,r.gf)(),t=(0,c.useRouter)(),[s,d]=(0,a.useState)([]),[u,m]=(0,a.useState)(!0),[h,g]=(0,a.useState)(null),[p,f]=(0,a.useState)("{}"),[x,j]=(0,a.useState)(!1);async function y(t){j(!0);try{let s=JSON.parse(p);await e.triggerBroadcast(t,s),g(null),f("{}")}catch(e){e instanceof Error&&console.error("Trigger failed:",e.message)}j(!1)}function b(e){h===e?g(null):g(e),f("{}")}return((0,o.rT)([{label:"Broadcasts"}],"broadcasts"),(0,a.useEffect)(()=>{e.getBroadcasts().then(e=>d(e.data)).catch(e=>{e instanceof Error&&console.error("Failed to load broadcasts:",e.message)}).finally(()=>m(!1))},[]),u)?(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Broadcasts"}),(0,n.jsx)("div",{className:"loading-bar",children:(0,n.jsx)("div",{className:"loading-bar-fill"})})]}):0===s.length?(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Broadcasts"}),(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"No broadcasts discovered."})})]}):(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Broadcasts"}),(0,n.jsxs)("table",{className:"station-table",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:"Name"}),(0,n.jsx)("th",{children:"Nodes"}),(0,n.jsx)("th",{children:"Failure Policy"}),(0,n.jsx)("th",{children:"Timeout"}),(0,n.jsx)("th",{})]})}),(0,n.jsx)("tbody",{children:s.map((e,s)=>h===e.name?(0,n.jsx)("tr",{className:"reveal-item",style:{animationDelay:"".concat(40*s,"ms")},children:(0,n.jsx)("td",{colSpan:5,style:{padding:0},children:(0,n.jsxs)("div",{style:{padding:"0.75rem"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"},children:[(0,n.jsx)("span",{className:"mono",style:{fontWeight:600},children:e.name}),(0,n.jsxs)("span",{style:{color:"var(--muted)",fontSize:"0.8125rem"},children:[e.nodes.length," nodes / ",e.failurePolicy," / ",null!==e.timeout?l(e.timeout):"—"]})]}),(0,n.jsx)(i.q,{schema:null,value:p,onChange:f}),(0,n.jsxs)("div",{style:{marginTop:"0.5rem",display:"flex",gap:"0.5rem"},children:[(0,n.jsx)("button",{className:"btn btn--primary",onClick:()=>y(e.name),disabled:x,children:x?"Dispatching...":"Dispatch"}),(0,n.jsx)("button",{className:"btn",onClick:()=>b(e.name),children:"Cancel"})]})]})})},e.name):(0,n.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*s,"ms")},onClick:()=>t.push("/broadcasts/".concat(encodeURIComponent(e.name))),children:[(0,n.jsx)("td",{className:"mono",children:e.name}),(0,n.jsx)("td",{className:"mono",children:e.nodes.length}),(0,n.jsx)("td",{className:"mono",style:{color:"var(--muted)"},children:e.failurePolicy}),(0,n.jsx)("td",{className:"mono",style:{fontSize:"0.8125rem"},children:null!==e.timeout?l(e.timeout):"—"}),(0,n.jsx)("td",{children:(0,n.jsx)("button",{className:"btn btn--sm btn--primary",onClick:t=>{t.stopPropagation(),b(e.name)},children:"Trigger"})})]},e.name))})]})]})}}},e=>{e.O(0,[814,743,358],()=>e(e.s=2679)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{593:(e,t,n)=>{"use strict";async function s(e,t){let n=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!n.ok)throw Error((await n.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return n.json()}async function r(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function a(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function i(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function o(){return{getHealth:()=>s("/health"),getSignals:()=>s("/signals"),getScheduledSignals:()=>s("/signals/scheduled"),getSignal:e=>s("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>s("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>s("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let n=t.toString();return s("/runs".concat(n?"?".concat(n):""))},getRunStats:()=>s("/runs/stats"),getRun:e=>s("/runs/".concat(e)),getRunSteps:e=>s("/runs/".concat(e,"/steps")),getRunLogs:e=>s("/runs/".concat(e,"/logs")),cancelRun:e=>s("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>s("/broadcasts"),getBroadcast:e=>s("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>s("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>s("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>s("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>s("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>s("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>s("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>s("/v1/keys"),createApiKey:(e,t)=>s("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>s("/v1/keys/".concat(e),{method:"DELETE"})}}n.d(t,{T5:()=>r,gf:()=>o,iD:()=>a,ri:()=>i})},783:(e,t,n)=>{"use strict";n.d(t,{A:()=>o,AuthProvider:()=>c,S:()=>d});var s=n(8111),r=n(5271),a=n(593);let i=(0,r.createContext)({authenticated:!0,logout:async()=>{}});function o(){return(0,r.useContext)(i)}function c(e){let{children:t,loginPage:n}=e,[o,c]=(0,r.useState)("loading");(0,r.useEffect)(()=>{(0,a.T5)().then(e=>{let{authenticated:t,authRequired:n}=e;!n||t?c("authenticated"):c("unauthenticated")}).catch(()=>{c("authenticated")})},[]);let l=(0,r.useCallback)(async()=>{await (0,a.ri)(),c("unauthenticated")},[]),d=(0,r.useCallback)(()=>{c("authenticated")},[]);return"loading"===o?null:"unauthenticated"===o?(0,s.jsx)(u,{onSuccess:d,children:n}):(0,s.jsx)(i.Provider,{value:{authenticated:!0,logout:l},children:t})}let l=(0,r.createContext)(()=>{});function d(){return(0,r.useContext)(l)}function u(e){let{children:t,onSuccess:n}=e;return(0,s.jsx)(l.Provider,{value:n,children:t})}},1308:(e,t,n)=>{"use strict";n.d(t,{LoginPage:()=>o});var s=n(8111),r=n(5271),a=n(593),i=n(783);function o(){let e=(0,i.S)(),[t,n]=(0,r.useState)(""),[o,c]=(0,r.useState)(""),[l,d]=(0,r.useState)(""),[u,h]=(0,r.useState)(!1);async function x(n){n.preventDefault(),d(""),h(!0);try{await (0,a.iD)(t,o)?e():d("Invalid credentials.")}catch(e){d("Connection failed.")}h(!1)}return(0,s.jsx)("div",{className:"login-page",children:(0,s.jsxs)("div",{className:"login-card",children:[(0,s.jsxs)("div",{className:"login-header",children:[(0,s.jsxs)("svg",{width:"28",height:"28",viewBox:"0 0 100 100",fill:"none","aria-hidden":"true",children:[(0,s.jsx)("path",{d:"M50 2 L39 25 L27 50 L18 70 L10 88 L90 88 L82 70 L73 50 L61 25 Z",stroke:"currentColor",strokeWidth:"1.5"}),(0,s.jsx)("line",{x1:"50",y1:"2",x2:"50",y2:"88",stroke:"currentColor",strokeWidth:"1"}),(0,s.jsx)("line",{x1:"16",y1:"70",x2:"84",y2:"70",stroke:"currentColor",strokeWidth:"1.2"}),(0,s.jsx)("line",{x1:"39",y1:"25",x2:"61",y2:"25",stroke:"currentColor",strokeWidth:"0.8"}),(0,s.jsx)("line",{x1:"27",y1:"50",x2:"73",y2:"50",stroke:"currentColor",strokeWidth:"0.8"}),(0,s.jsx)("rect",{x:"43",y:"88",width:"14",height:"5",fill:"currentColor",opacity:"0.5"}),(0,s.jsx)("circle",{cx:"50",cy:"2",r:"1.5",fill:"currentColor"})]}),(0,s.jsx)("h1",{children:"Station"})]}),(0,s.jsxs)("form",{onSubmit:x,children:[(0,s.jsxs)("div",{className:"login-field",children:[(0,s.jsx)("label",{htmlFor:"username",children:"Username"}),(0,s.jsx)("input",{id:"username",type:"text",value:t,onChange:e=>n(e.target.value),autoComplete:"username",autoFocus:!0,required:!0})]}),(0,s.jsxs)("div",{className:"login-field",children:[(0,s.jsx)("label",{htmlFor:"password",children:"Password"}),(0,s.jsx)("input",{id:"password",type:"password",value:o,onChange:e=>c(e.target.value),autoComplete:"current-password",required:!0})]}),l&&(0,s.jsx)("div",{className:"login-error",children:l}),(0,s.jsx)("button",{type:"submit",className:"btn btn--primary login-btn",disabled:u,children:u?"Signing in...":"Sign in"})]})]})})}},1786:(e,t,n)=>{Promise.resolve().then(n.bind(n,783)),Promise.resolve().then(n.bind(n,5152)),Promise.resolve().then(n.bind(n,1308)),Promise.resolve().then(n.bind(n,1961)),Promise.resolve().then(n.bind(n,9129)),Promise.resolve().then(n.t.bind(n,9469,23)),Promise.resolve().then(n.bind(n,9275))},1961:(e,t,n)=>{"use strict";n.d(t,{Shell:()=>b});var s=n(8111),r=n(5271),a=n(5935),i=n.n(a),o=n(4736),c=n(9275),l=n(7646),d=n(9129),u=n(783);function h(){return"collapsed"===localStorage.getItem("station-sidebar")}function x(e){let{size:t=20}=e;return(0,s.jsxs)("svg",{width:t,height:t,viewBox:"0 0 100 100",fill:"none","aria-hidden":"true",children:[(0,s.jsx)("path",{d:"M50 2 L39 25 L27 50 L18 70 L10 88 L90 88 L82 70 L73 50 L61 25 Z",stroke:"currentColor",strokeWidth:"1.5"}),(0,s.jsx)("line",{x1:"50",y1:"2",x2:"50",y2:"88",stroke:"currentColor",strokeWidth:"1"}),(0,s.jsx)("line",{x1:"16",y1:"70",x2:"84",y2:"70",stroke:"currentColor",strokeWidth:"1.2"}),(0,s.jsx)("line",{x1:"39",y1:"25",x2:"61",y2:"25",stroke:"currentColor",strokeWidth:"0.8"}),(0,s.jsx)("line",{x1:"27",y1:"50",x2:"73",y2:"50",stroke:"currentColor",strokeWidth:"0.8"}),(0,s.jsx)("rect",{x:"43",y:"88",width:"14",height:"5",fill:"currentColor",opacity:"0.5"}),(0,s.jsx)("circle",{cx:"50",cy:"2",r:"1.5",fill:"currentColor"})]})}function g(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.2","aria-hidden":"true",children:[(0,s.jsx)("rect",{x:"1",y:"1",width:"5",height:"5",rx:"1"}),(0,s.jsx)("rect",{x:"8",y:"1",width:"5",height:"5",rx:"1"}),(0,s.jsx)("rect",{x:"1",y:"8",width:"5",height:"5",rx:"1"}),(0,s.jsx)("rect",{x:"8",y:"8",width:"5",height:"5",rx:"1"})]})}function m(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"7",cy:"12",r:"1",fill:"currentColor",stroke:"none"}),(0,s.jsx)("path",{d:"M4.5 10a3.5 3.5 0 0 1 5 0"}),(0,s.jsx)("path",{d:"M2.5 8a6 6 0 0 1 9 0"}),(0,s.jsx)("path",{d:"M0.5 6a8.5 8.5 0 0 1 13 0"})]})}function j(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.2","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"7",cy:"2.5",r:"1.5"}),(0,s.jsx)("circle",{cx:"3",cy:"11.5",r:"1.5"}),(0,s.jsx)("circle",{cx:"11",cy:"11.5",r:"1.5"}),(0,s.jsx)("line",{x1:"6.2",y1:"3.8",x2:"3.8",y2:"10"}),(0,s.jsx)("line",{x1:"7.8",y1:"3.8",x2:"10.2",y2:"10"})]})}function v(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round","aria-hidden":"true",children:[(0,s.jsx)("circle",{cx:"7",cy:"7",r:"2"}),(0,s.jsx)("path",{d:"M7 1v1.5M7 11.5V13M1 7h1.5M11.5 7H13M2.76 2.76l1.06 1.06M10.18 10.18l1.06 1.06M2.76 11.24l1.06-1.06M10.18 3.82l1.06-1.06"})]})}function p(e){let{href:t,label:n,section:r,icon:a}=e,c=(0,o.usePathname)(),{activeSection:d}=(0,l.iQ)(),u=d?d===r:"/"===t?"/"===c:c.startsWith(t);return(0,s.jsxs)(i(),{href:t,className:u?"active":"",children:[a,(0,s.jsx)("span",{className:"nav-label",children:n})]})}function b(e){let{children:t}=e,{connected:n}=(0,c.q)(),{segments:a}=(0,l.iQ)(),{theme:o,toggle:b}=(0,d.D)(),{logout:f}=(0,u.A)(),[y,k]=(0,r.useState)(h),S=(0,r.useCallback)(()=>{k(e=>{let t=!e;return localStorage.setItem("station-sidebar",t?"collapsed":"expanded"),t})},[]);return(0,s.jsxs)("div",{className:"station-layout","data-collapsed":y,children:[(0,s.jsxs)("aside",{className:"station-sidebar",children:[(0,s.jsxs)("div",{className:"station-sidebar-logo",children:[(0,s.jsxs)("div",{className:"station-sidebar-mark",children:[(0,s.jsx)(x,{size:20}),(0,s.jsx)("h1",{children:"Station"})]}),(0,s.jsx)("span",{children:"station-signal"})]}),(0,s.jsxs)("nav",{className:"station-sidebar-nav",children:[(0,s.jsx)("div",{className:"station-sidebar-nav-label",children:"Nav"}),(0,s.jsx)(p,{href:"/",label:"Overview",section:"overview",icon:(0,s.jsx)(g,{})}),(0,s.jsx)(p,{href:"/signals",label:"Signals",section:"signals",icon:(0,s.jsx)(m,{})}),(0,s.jsx)(p,{href:"/broadcasts",label:"Broadcasts",section:"broadcasts",icon:(0,s.jsx)(j,{})}),(0,s.jsx)("div",{className:"station-sidebar-nav-label",style:{marginTop:"1rem"},children:"Admin"}),(0,s.jsx)(p,{href:"/settings",label:"Settings",section:"settings",icon:(0,s.jsx)(v,{})})]}),(0,s.jsx)("button",{className:"sidebar-collapse-btn",onClick:S,title:y?"Expand sidebar":"Collapse sidebar","aria-label":y?"Expand sidebar":"Collapse sidebar",children:(0,s.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round","aria-hidden":"true",children:y?(0,s.jsx)("polyline",{points:"5 3 9 7 5 11"}):(0,s.jsx)("polyline",{points:"9 3 5 7 9 11"})})})]}),(0,s.jsxs)("div",{className:"station-main",children:[(0,s.jsxs)("header",{className:"station-header",children:[(0,s.jsx)("nav",{className:"breadcrumb","aria-label":"Breadcrumb",children:0===a.length?(0,s.jsx)("span",{className:"breadcrumb-segment",children:"overview"}):a.map((e,t)=>(0,s.jsxs)("span",{className:"breadcrumb-item",children:[t>0&&(0,s.jsx)("span",{className:"breadcrumb-sep","aria-hidden":"true",children:"/"}),e.href?(0,s.jsx)(i(),{href:e.href,className:"breadcrumb-link",children:e.label}):(0,s.jsx)("span",{className:"breadcrumb-segment breadcrumb-segment--current","aria-current":"page",children:e.label})]},t))}),(0,s.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,s.jsx)("button",{onClick:b,className:"theme-toggle",title:"light"===o?"Switch to dark mode":"Switch to light mode","aria-label":"light"===o?"Switch to dark mode":"Switch to light mode",children:"light"===o?(0,s.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:(0,s.jsx)("path",{d:"M13.5 8.5a5.5 5.5 0 0 1-7-7A5.5 5.5 0 1 0 13.5 8.5Z"})}):(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,s.jsx)("circle",{cx:"8",cy:"8",r:"3"}),(0,s.jsx)("path",{d:"M8 1v2M8 13v2M1 8h2M13 8h2M3.05 3.05l1.41 1.41M11.54 11.54l1.41 1.41M3.05 12.95l1.41-1.41M11.54 4.46l1.41-1.41"})]})}),(0,s.jsx)("button",{onClick:f,className:"logout-btn",title:"Sign out","aria-label":"Sign out",children:(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:[(0,s.jsx)("path",{d:"M6 2H3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h3"}),(0,s.jsx)("path",{d:"M10 12l4-4-4-4"}),(0,s.jsx)("line",{x1:"14",y1:"8",x2:"6",y2:"8"})]})}),(0,s.jsx)("div",{className:"pulse-dot ".concat(n?"":"pulse-dot--disconnected"),title:n?"Connected":"Disconnected"})]})]}),(0,s.jsx)("main",{className:"station-content",children:t})]})]})}},5152:(e,t,n)=>{"use strict";n.d(t,{BreadcrumbProvider:()=>i});var s=n(8111),r=n(5271),a=n(7646);function i(e){let{children:t}=e,[n,i]=(0,r.useState)([]),[o,c]=(0,r.useState)(null),l=(0,r.useCallback)(e=>i(e),[]),d=(0,r.useCallback)(e=>c(e),[]);return(0,s.jsx)(a.Hc.Provider,{value:{segments:n,activeSection:o,setSegments:l,setActiveSection:d},children:t})}},7646:(e,t,n)=>{"use strict";n.d(t,{Hc:()=>r,iQ:()=>i,rT:()=>a});var s=n(5271);let r=(0,s.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function a(e,t){let n=(0,s.useContext)(r);(0,s.useEffect)(()=>{n.setSegments(e),n.setActiveSection(t)},[JSON.stringify(e),t])}function i(){return(0,s.useContext)(r)}},9129:(e,t,n)=>{"use strict";n.d(t,{D:()=>i,ThemeProvider:()=>c});var s=n(8111),r=n(5271);let a=(0,r.createContext)({theme:"light",toggle:()=>{}});function i(){return(0,r.useContext)(a)}function o(){let e=localStorage.getItem("station-theme");return"light"===e||"dark"===e?e:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function c(e){let{children:t}=e,[n,i]=(0,r.useState)(o);(0,r.useEffect)(()=>{document.documentElement.setAttribute("data-theme",n),localStorage.setItem("station-theme",n)},[n]);let c=(0,r.useCallback)(()=>{i(e=>"light"===e?"dark":"light")},[]);return(0,s.jsx)(a.Provider,{value:{theme:n,toggle:c},children:t})}},9275:(e,t,n)=>{"use strict";n.d(t,{StationProvider:()=>o,q:()=>i});var s=n(8111),r=n(5271);let a=(0,r.createContext)({connected:!1,events:[]});function i(){return(0,r.useContext)(a)}function o(e){let{children:t}=e,[n,i]=(0,r.useState)([]),{connected:o}=function(e){let[t,n]=(0,r.useState)(!1),s=(0,r.useRef)(e);return s.current=e,(0,r.useEffect)(()=>{let e=null,t=null,r=0,a=!1;return!function i(){if(a)return;let o="https:"===window.location.protocol?"wss:":"ws:";(e=new WebSocket("".concat(o,"//").concat(window.location.host,"/api/events"))).onopen=()=>{n(!0),r=0},e.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},e.onclose=()=>{if(n(!1),!a){let e=Math.min(1e3*Math.pow(2,r),1e4);r++,t=setTimeout(i,e)}},e.onerror=()=>{null==e||e.close()}}(),()=>{a=!0,t&&clearTimeout(t),null==e||e.close()}},[]),{connected:t}}((0,r.useCallback)(e=>{i(t=>[e,...t].slice(0,100))},[]));return(0,s.jsx)(a.Provider,{value:{connected:o,events:n},children:t})}},9469:()=>{}},e=>{e.O(0,[506,580,814,743,358],()=>e(e.s=1786)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{414:(e,t,a)=>{Promise.resolve().then(a.bind(a,8419))},593:(e,t,a)=>{"use strict";async function s(e,t){let a=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!a.ok)throw Error((await a.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return a.json()}async function n(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function l(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function c(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function r(){return{getHealth:()=>s("/health"),getSignals:()=>s("/signals"),getScheduledSignals:()=>s("/signals/scheduled"),getSignal:e=>s("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>s("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>s("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let a=t.toString();return s("/runs".concat(a?"?".concat(a):""))},getRunStats:()=>s("/runs/stats"),getRun:e=>s("/runs/".concat(e)),getRunSteps:e=>s("/runs/".concat(e,"/steps")),getRunLogs:e=>s("/runs/".concat(e,"/logs")),cancelRun:e=>s("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>s("/broadcasts"),getBroadcast:e=>s("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>s("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>s("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>s("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>s("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>s("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>s("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>s("/v1/keys"),createApiKey:(e,t)=>s("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>s("/v1/keys/".concat(e),{method:"DELETE"})}}a.d(t,{T5:()=>n,gf:()=>r,iD:()=>l,ri:()=>c})},1253:(e,t,a)=>{"use strict";a.d(t,{W:()=>n});var s=a(8111);function n(e){let{status:t}=e;return(0,s.jsxs)("span",{className:"status-badge status-badge--".concat(t),children:[(0,s.jsx)("span",{className:"status-badge-dot"}),t]})}},1489:(e,t,a)=>{"use strict";a.d(t,{s:()=>c});var s=a(8111),n=a(5271);function l(e){let t=Date.now()-new Date(e).getTime();if(t<0)return"just now";let a=Math.floor(t/1e3);if(a<5)return"just now";if(a<60)return"".concat(a,"s ago");let s=Math.floor(a/60);if(s<60)return"".concat(s,"m ago");let n=Math.floor(s/60);if(n<24)return"".concat(n,"h ago");let l=Math.floor(n/24);return"".concat(l,"d ago")}function c(e){let{date:t}=e,[a,c]=(0,n.useState)(()=>l(t));return(0,n.useEffect)(()=>{let e=setInterval(()=>{c(l(t))},5e3);return()=>clearInterval(e)},[t]),(0,s.jsx)("span",{className:"mono",title:new Date(t).toLocaleString(),style:{fontSize:"0.8125rem",color:"var(--muted)"},children:a})}},7646:(e,t,a)=>{"use strict";a.d(t,{Hc:()=>n,iQ:()=>c,rT:()=>l});var s=a(5271);let n=(0,s.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function l(e,t){let a=(0,s.useContext)(n);(0,s.useEffect)(()=>{a.setSegments(e),a.setActiveSection(t)},[JSON.stringify(e),t])}function c(){return(0,s.useContext)(n)}},8419:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>m});var s=a(8111),n=a(5271),l=a(4736),c=a(5935),r=a.n(c),i=a(593),o=a(9275),d=a(7646),u=a(1253),h=a(1489);function m(){let e=(0,i.gf)(),t=(0,l.useRouter)(),{events:a}=(0,o.q)(),[c,m]=(0,n.useState)(null),[g,v]=(0,n.useState)([]),[f,x]=(0,n.useState)([]),[j,p]=(0,n.useState)(!0);return((0,d.rT)([{label:"Overview"}],"overview"),(0,n.useEffect)(()=>{!async function(){try{let[t,a,s]=await Promise.all([e.getRunStats(),e.getRuns({status:"failed"}),e.getScheduledSignals()]);m(t.data),v(a.data.slice(0,10)),x(s.data)}catch(e){e instanceof Error&&console.error("Failed to load overview data:",e.message)}p(!1)}()},[]),(0,n.useEffect)(()=>{0!==a.length&&a[0].type.startsWith("run:")&&(e.getRunStats().then(e=>m(e.data)).catch(e=>console.error("Failed to refresh stats:",e)),e.getRuns({status:"failed"}).then(e=>v(e.data.slice(0,10))).catch(e=>console.error("Failed to refresh failed runs:",e)),e.getScheduledSignals().then(e=>x(e.data)).catch(e=>console.error("Failed to refresh scheduled:",e)))},[a.length]),j)?(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"page-title",children:"Overview"}),(0,s.jsx)("div",{className:"loading-bar",children:(0,s.jsx)("div",{className:"loading-bar-fill"})})]}):(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"page-title",children:"Overview"}),c&&(0,s.jsxs)("div",{className:"stat-grid",children:[(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-card-label",children:"Pending"}),(0,s.jsx)("div",{className:"stat-card-value",children:c.pending})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-card-label",children:"Running"}),(0,s.jsx)("div",{className:"stat-card-value",style:{color:"var(--patina)"},children:c.running})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-card-label",children:"Completed"}),(0,s.jsx)("div",{className:"stat-card-value",style:{color:"var(--patina)"},children:c.completed})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-card-label",children:"Failed"}),(0,s.jsx)("div",{className:"stat-card-value",style:{color:"var(--rust)"},children:c.failed})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-card-label",children:"Cancelled"}),(0,s.jsx)("div",{className:"stat-card-value",children:c.cancelled})]})]}),f.length>0&&(0,s.jsxs)("div",{className:"detail-section",children:[(0,s.jsx)("div",{className:"detail-section-label",children:"Scheduled"}),(0,s.jsxs)("table",{className:"station-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Signal"}),(0,s.jsx)("th",{children:"Interval"}),(0,s.jsx)("th",{children:"Next Run"}),(0,s.jsx)("th",{children:"Last Run"}),(0,s.jsx)("th",{children:"Last Status"})]})}),(0,s.jsx)("tbody",{children:f.map((e,a)=>(0,s.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*a,"ms")},onClick:()=>t.push("/signals/".concat(encodeURIComponent(e.name))),children:[(0,s.jsx)("td",{className:"mono",children:e.name}),(0,s.jsx)("td",{className:"mono",style:{color:"var(--muted)",fontSize:"0.8125rem"},children:e.interval}),(0,s.jsx)("td",{className:"mono",style:{fontSize:"0.8125rem",color:e.nextRunAt?"var(--patina)":"var(--muted)"},children:e.nextRunAt?function(e){let t=new Date(e).getTime()-Date.now();if(t<=0)return"due now";let a=Math.floor(t/1e3);if(a<60)return"in ".concat(a,"s");let s=Math.floor(a/60);if(s<60)return"in ".concat(s,"m");let n=Math.floor(s/60);return n<24?"in ".concat(n,"h"):"in ".concat(Math.floor(n/24),"d")}(e.nextRunAt):"—"}),(0,s.jsx)("td",{children:e.lastRunAt?(0,s.jsx)(h.s,{date:e.lastRunAt}):(0,s.jsx)("span",{className:"mono",style:{fontSize:"0.8125rem",color:"var(--muted)"},children:"—"})}),(0,s.jsx)("td",{children:e.lastStatus?(0,s.jsx)(u.W,{status:e.lastStatus}):(0,s.jsx)("span",{className:"mono",style:{fontSize:"0.8125rem",color:"var(--muted)"},children:"—"})})]},e.name))})]})]}),g.length>0&&(0,s.jsxs)("div",{className:"detail-section",children:[(0,s.jsx)("div",{className:"detail-section-label",children:"Recent Failures"}),(0,s.jsxs)("table",{className:"station-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Status"}),(0,s.jsx)("th",{children:"Signal"}),(0,s.jsx)("th",{children:"Error"}),(0,s.jsx)("th",{children:"Time"})]})}),(0,s.jsx)("tbody",{children:g.map((e,a)=>{var n;return(0,s.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*a,"ms")},onClick:()=>t.push("/runs/".concat(e.id)),children:[(0,s.jsx)("td",{children:(0,s.jsx)(u.W,{status:e.status})}),(0,s.jsx)("td",{children:(0,s.jsx)(r(),{href:"/signals/".concat(e.signalName),className:"mono",onClick:e=>e.stopPropagation(),children:e.signalName})}),(0,s.jsx)("td",{style:{color:"var(--rust)",fontSize:"0.8125rem",fontFamily:"var(--font-mono)",maxWidth:"300px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:null!=(n=e.error)?n:"",children:e.error?e.error.length>60?e.error.slice(0,60)+"...":e.error:"-"}),(0,s.jsx)("td",{children:(0,s.jsx)(h.s,{date:e.createdAt})})]},e.id)})})]})]}),a.length>0&&(0,s.jsxs)("div",{className:"detail-section",children:[(0,s.jsx)("div",{className:"detail-section-label",children:"Live Activity"}),(0,s.jsx)("div",{style:{marginTop:"0.75rem"},children:a.slice(0,20).map((e,a)=>{var n,l,c,r,i,o,d;let u=null!=(r=null!=(c=null==(n=e.data.run)?void 0:n.signalName)?c:e.data.signalName)?r:null,h=null!=(o=null!=(i=null==(l=e.data.run)?void 0:l.id)?i:e.data.runId)?o:null,m=null!=(d=e.data.broadcastRunId)?d:null,g=m?"/broadcasts/".concat(m):h?"/runs/".concat(h):null;return(0,s.jsxs)("div",{className:"reveal-item".concat(g?" activity-row":""),style:{animationDelay:"".concat(40*a,"ms"),fontFamily:"var(--font-mono)",fontSize:"0.75rem",color:"var(--muted)",padding:"0.375rem 0.5rem",borderBottom:"1px solid var(--concrete-dark)",display:"flex",gap:"0.75rem",alignItems:"baseline"},onClick:g?()=>t.push(g):void 0,children:[(0,s.jsx)("span",{style:{color:"var(--rust)",minWidth:"120px"},children:e.type}),u&&(0,s.jsx)("span",{style:{color:"var(--charcoal)"},children:String(u)}),(0,s.jsx)("span",{style:{marginLeft:"auto"},children:new Date(e.timestamp).toLocaleTimeString()})]},"".concat(e.timestamp,"-").concat(a))})})]})]})}},9275:(e,t,a)=>{"use strict";a.d(t,{StationProvider:()=>r,q:()=>c});var s=a(8111),n=a(5271);let l=(0,n.createContext)({connected:!1,events:[]});function c(){return(0,n.useContext)(l)}function r(e){let{children:t}=e,[a,c]=(0,n.useState)([]),{connected:r}=function(e){let[t,a]=(0,n.useState)(!1),s=(0,n.useRef)(e);return s.current=e,(0,n.useEffect)(()=>{let e=null,t=null,n=0,l=!1;return!function c(){if(l)return;let r="https:"===window.location.protocol?"wss:":"ws:";(e=new WebSocket("".concat(r,"//").concat(window.location.host,"/api/events"))).onopen=()=>{a(!0),n=0},e.onmessage=e=>{try{let t=JSON.parse(e.data);s.current(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},e.onclose=()=>{if(a(!1),!l){let e=Math.min(1e3*Math.pow(2,n),1e4);n++,t=setTimeout(c,e)}},e.onerror=()=>{null==e||e.close()}}(),()=>{l=!0,t&&clearTimeout(t),null==e||e.close()}},[]),{connected:t}}((0,n.useCallback)(e=>{c(t=>[e,...t].slice(0,100))},[]));return(0,s.jsx)(l.Provider,{value:{connected:r,events:a},children:t})}}},e=>{e.O(0,[580,814,743,358],()=>e(e.s=414)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[293],{593:(e,t,a)=>{"use strict";async function n(e,t){let a=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!a.ok)throw Error((await a.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return a.json()}async function s(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function l(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function r(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function i(){return{getHealth:()=>n("/health"),getSignals:()=>n("/signals"),getScheduledSignals:()=>n("/signals/scheduled"),getSignal:e=>n("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>n("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>n("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let a=t.toString();return n("/runs".concat(a?"?".concat(a):""))},getRunStats:()=>n("/runs/stats"),getRun:e=>n("/runs/".concat(e)),getRunSteps:e=>n("/runs/".concat(e,"/steps")),getRunLogs:e=>n("/runs/".concat(e,"/logs")),cancelRun:e=>n("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>n("/broadcasts"),getBroadcast:e=>n("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>n("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>n("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>n("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>n("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>n("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>n("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>n("/v1/keys"),createApiKey:(e,t)=>n("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>n("/v1/keys/".concat(e),{method:"DELETE"})}}a.d(t,{T5:()=>s,gf:()=>i,iD:()=>l,ri:()=>r})},1253:(e,t,a)=>{"use strict";a.d(t,{W:()=>s});var n=a(8111);function s(e){let{status:t}=e;return(0,n.jsxs)("span",{className:"status-badge status-badge--".concat(t),children:[(0,n.jsx)("span",{className:"status-badge-dot"}),t]})}},1794:(e,t,a)=>{"use strict";a.d(t,{p:()=>l});var n=a(8111),s=a(5271);function l(e){let t,{data:a,label:l}=e,[r,i]=(0,s.useState)(!0),[c,o]=(0,s.useState)(!0),[d,u]=(0,s.useState)("copy"),m=(0,s.useCallback)(()=>{if(!a)return;let e=function(e){try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch(t){return e}}(a);navigator.clipboard.writeText(e).then(()=>{u("copied"),setTimeout(()=>u("copy"),1500)}).catch(()=>{u("failed"),setTimeout(()=>u("copy"),1500)})},[a]);if(!a)return null;try{t=JSON.parse(a)}catch(e){t=a}let p="object"==typeof t&&null!==t&&JSON.stringify(t).length>200;return(0,n.jsxs)("div",{children:[l&&(0,n.jsxs)("button",{onClick:()=>i(!r),style:{background:"none",border:"none",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:"0.75rem",color:"var(--muted)",padding:"0.25rem 0",textTransform:"uppercase",letterSpacing:"0.1em"},children:[r?"- ":"+ ",l]}),r&&(0,n.jsxs)("pre",{className:"json-viewer",style:{position:"relative"},children:[(0,n.jsx)("button",{className:"copy-btn",onClick:m,type:"button",children:d}),p&&(0,n.jsx)("button",{onClick:()=>o(!c),style:{position:"absolute",top:"0.5rem",right:"4rem",background:"var(--wire)",border:"none",borderRadius:"3px",padding:"0.25rem 0.5rem",fontFamily:"var(--font-mono)",fontSize:"0.625rem",color:"var(--muted-light)",cursor:"pointer",textTransform:"uppercase",letterSpacing:"0.1em"},type:"button",children:c?"collapse":"expand"}),function e(t,a,s){if(null===t)return(0,n.jsx)("span",{className:"json-null",children:"null"});if("boolean"==typeof t)return(0,n.jsx)("span",{className:"json-boolean",children:String(t)});if("number"==typeof t)return(0,n.jsx)("span",{className:"json-number",children:t});if("string"==typeof t)return(0,n.jsxs)("span",{className:"json-string",children:['"',t,'"']});if(Array.isArray(t))return 0===t.length?(0,n.jsx)("span",{children:"[]"}):!s&&a>3?(0,n.jsxs)("span",{children:["[",t.length," items]"]}):(0,n.jsxs)("span",{children:["[\n",t.map((l,r)=>(0,n.jsxs)("span",{children:[" ".repeat(a+1),e(l,a+1,s),r<t.length-1?",":"","\n"]},r))," ".repeat(a),"]"]});if("object"==typeof t){let l=Object.entries(t);return 0===l.length?(0,n.jsx)("span",{children:"{}"}):!s&&a>3?(0,n.jsx)("span",{children:"{".concat(l.length," keys}")}):(0,n.jsxs)("span",{children:["{\n",l.map((t,r)=>{let[i,c]=t;return(0,n.jsxs)("span",{children:[" ".repeat(a+1),(0,n.jsxs)("span",{className:"json-key",children:['"',i,'"']}),": ",e(c,a+1,s),r<l.length-1?",":"","\n"]},i)})," ".repeat(a),"}"]})}return(0,n.jsx)("span",{children:String(t)})}(t,0,c)]})]})}},3611:(e,t,a)=>{Promise.resolve().then(a.bind(a,9103))},7646:(e,t,a)=>{"use strict";a.d(t,{Hc:()=>s,iQ:()=>r,rT:()=>l});var n=a(5271);let s=(0,n.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function l(e,t){let a=(0,n.useContext)(s);(0,n.useEffect)(()=>{a.setSegments(e),a.setActiveSection(t)},[JSON.stringify(e),t])}function r(){return(0,n.useContext)(s)}},9103:(e,t,a)=>{"use strict";a.d(t,{RunDetail:()=>x});var n=a(8111),s=a(5271),l=a(4736),r=a(5935),i=a.n(r),c=a(593),o=a(9275),d=a(7646),u=a(1253),m=a(1794);function p(e){let{step:t}=e,[a,l]=(0,s.useState)(!1),[r,i]=(0,s.useState)(!1),c=!!t.input,o=!!t.output,d=!!t.error;return c||o||d?(0,n.jsxs)("div",{style:{marginTop:"0.5rem"},children:[d&&(0,n.jsx)("div",{className:"error-block",style:{marginBottom:c||o?"0.5rem":0},children:t.error}),c&&(0,n.jsxs)("div",{style:{marginBottom:o?"0.375rem":0},children:[(0,n.jsxs)("button",{onClick:()=>l(!a),style:{background:"none",border:"none",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:"0.6875rem",color:"var(--muted)",padding:"0.125rem 0",textTransform:"uppercase",letterSpacing:"0.1em"},children:[a?"- ":"+ ","input"]}),a&&(0,n.jsx)(m.p,{data:t.input})]}),o&&(0,n.jsxs)("div",{children:[(0,n.jsxs)("button",{onClick:()=>i(!r),style:{background:"none",border:"none",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:"0.6875rem",color:"var(--muted)",padding:"0.125rem 0",textTransform:"uppercase",letterSpacing:"0.1em"},children:[r?"- ":"+ ","output"]}),r&&(0,n.jsx)(m.p,{data:t.output})]})]}):null}function g(e){let{steps:t}=e;return 0===t.length?null:(0,n.jsx)("div",{className:"step-timeline",children:t.map((e,t)=>{let a=function(e,t){if(!e)return"";let a=new Date(e).getTime(),n=(t?new Date(t).getTime():Date.now())-a;return n<1e3?"".concat(n,"ms"):n<6e4?"".concat((n/1e3).toFixed(1),"s"):"".concat((n/6e4).toFixed(1),"m")}(e.startedAt,e.completedAt);return(0,n.jsxs)("div",{className:"step-timeline-item reveal-item",style:{animationDelay:"".concat(80*t,"ms")},children:[(0,n.jsx)("div",{className:"step-timeline-dot step-timeline-dot--".concat(e.status)}),(0,n.jsxs)("div",{className:"step-timeline-name",children:[e.name,a&&(0,n.jsx)("span",{style:{marginLeft:"0.5rem",fontFamily:"var(--font-mono)",fontSize:"0.6875rem",color:"var(--muted)"},children:a})]}),(0,n.jsxs)("div",{className:"step-timeline-meta",children:[e.status,e.startedAt&&(0,n.jsx)("span",{style:{marginLeft:"0.375rem",color:"var(--muted-light)"},children:new Date(e.startedAt).toLocaleTimeString()})]}),(0,n.jsx)(p,{step:e})]},e.id)})})}function h(e){return e<1e3?"".concat(e,"ms"):e<6e4?"".concat((e/1e3).toFixed(1),"s"):e<36e5?"".concat((e/6e4).toFixed(1),"m"):"".concat((e/36e5).toFixed(1),"h")}function x(){var e,t;let a=(0,l.useParams)().id,r=(0,c.gf)(),{events:p}=(0,o.q)(),[x,f]=(0,s.useState)(null),[j,v]=(0,s.useState)([]),[N,b]=(0,s.useState)([]),[y,S]=(0,s.useState)(!0),[R,w]=(0,s.useState)(!1),[k,T]=(0,s.useState)(!1),C=(0,s.useRef)(null);async function O(){w(!0);try{await r.cancelRun(a);let e=await r.getRun(a);f(e.data)}catch(e){e instanceof Error&&console.error("Cancel failed:",e.message)}w(!1)}if((0,d.rT)(x?[{label:"Signals",href:"/signals"},{label:x.signalName,href:"/signals/".concat(encodeURIComponent(x.signalName))},{label:"Run ".concat(a.slice(0,8))}]:[{label:"Signals",href:"/signals"},{label:"Run ".concat(a.slice(0,8))}],"signals"),(0,s.useEffect)(()=>{!async function(){try{let[e,t,n]=await Promise.all([r.getRun(a),r.getRunSteps(a),r.getRunLogs(a)]);f(e.data),v(t.data),b(n.data)}catch(e){e instanceof Error&&console.error("Failed to load run:",e.message)}S(!1)}()},[a]),(0,s.useEffect)(()=>{var e,t,n;if(0===p.length)return;let s=p[0];(null!=(n=null==(e=s.data.run)?void 0:e.id)?n:null==(t=s.data)?void 0:t.runId)===a&&("log:output"===s.type?b(e=>{var t;return[...e,{runId:s.data.runId,signalName:s.data.signalName,level:s.data.level,message:s.data.message,timestamp:null!=(t=s.data.timestamp)?t:s.timestamp}]}):(r.getRun(a).then(e=>f(e.data)).catch(e=>console.error("Failed to refresh run:",e)),r.getRunSteps(a).then(e=>v(e.data)).catch(e=>console.error("Failed to refresh steps:",e))))},[p.length,a]),(0,s.useEffect)(()=>{var e;null==(e=C.current)||e.scrollIntoView({behavior:"smooth"})},[N.length]),y)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Run"}),(0,n.jsx)("div",{className:"loading-bar",children:(0,n.jsx)("div",{className:"loading-bar-fill"})})]});if(!x)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:"Run"}),(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"Run not found."})})]});let A="pending"===x.status||"running"===x.status;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"page-header",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,n.jsx)(u.W,{status:x.status}),(0,n.jsx)(i(),{href:"/signals/".concat(x.signalName),className:"page-title",style:{marginBottom:0,textDecoration:"none"},children:x.signalName})]}),(0,n.jsx)("div",{className:"page-header-actions",children:A&&(0,n.jsx)("button",{className:"btn btn--danger",onClick:O,disabled:R,children:R?"Cancelling...":"Cancel"})})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Metadata"}),(0,n.jsxs)("div",{className:"detail-grid",children:[(0,n.jsx)("span",{className:"detail-label",children:"ID"}),(0,n.jsxs)("span",{className:"detail-value mono",style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[x.id,(0,n.jsx)("button",{onClick:function(){navigator.clipboard.writeText(x.id).then(()=>{T(!0),setTimeout(()=>T(!1),1500)}).catch(()=>{})},className:"btn btn--sm",style:{fontSize:"0.625rem",padding:"0.125rem 0.375rem",lineHeight:1.2},children:k?"copied":"copy"})]}),(0,n.jsx)("span",{className:"detail-label",children:"Signal"}),(0,n.jsx)("span",{className:"detail-value",children:(0,n.jsx)(i(),{href:"/signals/".concat(x.signalName),className:"mono meta-value--link",children:x.signalName})}),(0,n.jsx)("span",{className:"detail-label",children:"Kind"}),(0,n.jsx)("span",{className:"detail-value",children:x.kind}),(0,n.jsx)("span",{className:"detail-label",children:"Attempts"}),(0,n.jsxs)("span",{className:"detail-value",children:[x.attempts," of ",x.maxAttempts]}),(0,n.jsx)("span",{className:"detail-label",children:"Timeout"}),(0,n.jsx)("span",{className:"detail-value mono",children:x.timeout?h(x.timeout):"—"}),(0,n.jsx)("span",{className:"detail-label",children:"Duration"}),(0,n.jsx)("span",{className:"detail-value mono",children:function(e,t){if(!e)return"—";let a=new Date(e).getTime();return h((t?new Date(t).getTime():Date.now())-a)}(x.startedAt,x.completedAt)}),(0,n.jsx)("span",{className:"detail-label",children:"Created"}),(0,n.jsx)("span",{className:"detail-value mono",children:x.createdAt}),(0,n.jsx)("span",{className:"detail-label",children:"Started"}),(0,n.jsx)("span",{className:"detail-value mono",children:null!=(e=x.startedAt)?e:"—"}),(0,n.jsx)("span",{className:"detail-label",children:"Completed"}),(0,n.jsx)("span",{className:"detail-value mono",children:null!=(t=x.completedAt)?t:"—"})]})]}),x.error&&(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Error"}),(0,n.jsx)("div",{className:"error-block",children:x.error})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Input"}),(0,n.jsx)(m.p,{data:x.input})]}),x.output&&(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Output"}),(0,n.jsx)(m.p,{data:x.output})]}),j.length>0&&(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Steps"}),(0,n.jsx)(g,{steps:j})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Logs"}),(0,n.jsxs)("div",{className:"log-container",children:[0===N.length?(0,n.jsx)("div",{style:{padding:"1rem",color:"var(--muted)",fontFamily:"var(--font-mono)",fontSize:"0.75rem"},children:"pending"===x.status?"Waiting for execution...":"No log output captured."}):N.map((e,t)=>(0,n.jsxs)("div",{className:"log-line",style:{color:"stderr"===e.level?"var(--rust)":"var(--charcoal)"},children:[(0,n.jsx)("span",{className:"log-timestamp",children:new Date(e.timestamp).toLocaleTimeString()}),(0,n.jsx)("span",{className:"log-level","data-level":e.level,children:"stderr"===e.level?"ERR":"OUT"}),(0,n.jsx)("span",{className:"log-message",children:e.message})]},t)),(0,n.jsx)("div",{ref:C})]})]})]})}},9275:(e,t,a)=>{"use strict";a.d(t,{StationProvider:()=>i,q:()=>r});var n=a(8111),s=a(5271);let l=(0,s.createContext)({connected:!1,events:[]});function r(){return(0,s.useContext)(l)}function i(e){let{children:t}=e,[a,r]=(0,s.useState)([]),{connected:i}=function(e){let[t,a]=(0,s.useState)(!1),n=(0,s.useRef)(e);return n.current=e,(0,s.useEffect)(()=>{let e=null,t=null,s=0,l=!1;return!function r(){if(l)return;let i="https:"===window.location.protocol?"wss:":"ws:";(e=new WebSocket("".concat(i,"//").concat(window.location.host,"/api/events"))).onopen=()=>{a(!0),s=0},e.onmessage=e=>{try{let t=JSON.parse(e.data);n.current(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},e.onclose=()=>{if(a(!1),!l){let e=Math.min(1e3*Math.pow(2,s),1e4);s++,t=setTimeout(r,e)}},e.onerror=()=>{null==e||e.close()}}(),()=>{l=!0,t&&clearTimeout(t),null==e||e.close()}},[]),{connected:t}}((0,s.useCallback)(e=>{r(t=>[e,...t].slice(0,100))},[]));return(0,n.jsx)(l.Provider,{value:{connected:i,events:a},children:t})}}},e=>{e.O(0,[580,814,743,358],()=>e(e.s=3611)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[662],{593:(e,t,n)=>{"use strict";async function a(e,t){let n=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!n.ok)throw Error((await n.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return n.json()}async function s(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function r(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function i(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function o(){return{getHealth:()=>a("/health"),getSignals:()=>a("/signals"),getScheduledSignals:()=>a("/signals/scheduled"),getSignal:e=>a("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>a("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>a("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let n=t.toString();return a("/runs".concat(n?"?".concat(n):""))},getRunStats:()=>a("/runs/stats"),getRun:e=>a("/runs/".concat(e)),getRunSteps:e=>a("/runs/".concat(e,"/steps")),getRunLogs:e=>a("/runs/".concat(e,"/logs")),cancelRun:e=>a("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>a("/broadcasts"),getBroadcast:e=>a("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>a("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>a("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>a("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>a("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>a("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>a("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>a("/v1/keys"),createApiKey:(e,t)=>a("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>a("/v1/keys/".concat(e),{method:"DELETE"})}}n.d(t,{T5:()=>s,gf:()=>o,iD:()=>r,ri:()=>i})},4521:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var a=n(8111),s=n(5271),r=n(593),i=n(7646);let o=["trigger","read","cancel","admin"];function l(e){return new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function c(){let e=(0,r.gf)(),[t,n]=(0,s.useState)([]),[c,d]=(0,s.useState)(!0),[m,u]=(0,s.useState)(null),[g,h]=(0,s.useState)(!1),[f,y]=(0,s.useState)(""),[p,x]=(0,s.useState)(["trigger","read"]),[b,v]=(0,s.useState)(!1),[j,S]=(0,s.useState)(null),[k,N]=(0,s.useState)(!1),[C,w]=(0,s.useState)(null);(0,i.rT)([{label:"Settings"}],"settings");let R=(0,s.useCallback)(()=>{e.getApiKeys().then(e=>{n(e.data),u(null)}).catch(e=>{e instanceof Error&&u(e.message)}).finally(()=>d(!1))},[]);async function T(){if(f.trim()){v(!0);try{let t=await e.createApiKey(f.trim(),p);S(t.data.key),y(""),x(["trigger","read"]),h(!1),N(!1),R()}catch(e){e instanceof Error&&u(e.message)}v(!1)}}async function B(t){try{await e.revokeApiKey(t),w(null),R()}catch(e){e instanceof Error&&u(e.message)}}async function z(){j&&(await navigator.clipboard.writeText(j),N(!0),setTimeout(()=>N(!1),2e3))}if((0,s.useEffect)(()=>{R()},[R]),c)return(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"page-title",children:"Settings"}),(0,a.jsx)("div",{className:"loading-bar",children:(0,a.jsx)("div",{className:"loading-bar-fill"})})]});let O=t.filter(e=>!e.revoked),P=t.filter(e=>e.revoked);return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"page-header",children:(0,a.jsx)("h1",{className:"page-title",style:{marginBottom:0},children:"Settings"})}),m&&(0,a.jsx)("div",{className:"detail-section",style:{color:"var(--rust)",fontSize:"0.8125rem"},children:m}),j&&(0,a.jsxs)("div",{className:"detail-section",style:{background:"var(--patina)",color:"#fff",borderRadius:"6px",padding:"1rem 1.25rem",marginBottom:"1.5rem"},children:[(0,a.jsx)("div",{style:{fontSize:"0.8125rem",fontWeight:500,marginBottom:"0.5rem"},children:"Key created. Copy it now — it won't be shown again."}),(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[(0,a.jsx)("code",{style:{fontFamily:"var(--font-mono)",fontSize:"0.8125rem",background:"rgba(0,0,0,0.2)",padding:"0.375rem 0.625rem",borderRadius:"4px",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j}),(0,a.jsx)("button",{className:"btn btn--primary",onClick:z,style:{flexShrink:0,minWidth:"5rem"},children:k?"Copied":"Copy"}),(0,a.jsx)("button",{className:"btn",onClick:()=>S(null),style:{flexShrink:0,color:"#fff",borderColor:"rgba(255,255,255,0.4)"},children:"Dismiss"})]})]}),(0,a.jsxs)("div",{className:"detail-section",children:[(0,a.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1rem"},children:[(0,a.jsx)("div",{className:"detail-section-label",style:{marginBottom:0},children:"API Keys"}),(0,a.jsx)("button",{className:"btn btn--primary",onClick:()=>h(!g),children:g?"Cancel":"Create key"})]}),g&&(0,a.jsxs)("div",{style:{border:"1px solid var(--concrete-dark)",borderRadius:"6px",padding:"1rem",marginBottom:"1rem"},children:[(0,a.jsxs)("div",{style:{marginBottom:"0.75rem"},children:[(0,a.jsx)("label",{style:{display:"block",fontSize:"0.75rem",color:"var(--muted)",marginBottom:"0.25rem",fontFamily:"var(--font-mono)",textTransform:"uppercase",letterSpacing:"0.08em"},children:"Name"}),(0,a.jsx)("input",{type:"text",value:f,onChange:e=>y(e.target.value),placeholder:"e.g. Production App",style:{width:"100%",padding:"0.5rem 0.625rem",fontFamily:"var(--font-body)",fontSize:"0.875rem",border:"1px solid var(--concrete-dark)",borderRadius:"4px",background:"var(--surface)",color:"var(--charcoal)"}})]}),(0,a.jsxs)("div",{style:{marginBottom:"0.75rem"},children:[(0,a.jsx)("label",{style:{display:"block",fontSize:"0.75rem",color:"var(--muted)",marginBottom:"0.5rem",fontFamily:"var(--font-mono)",textTransform:"uppercase",letterSpacing:"0.08em"},children:"Scopes"}),(0,a.jsx)("div",{style:{display:"flex",gap:"0.5rem",flexWrap:"wrap"},children:o.map(e=>(0,a.jsx)("button",{onClick:()=>{x(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},className:"filter-btn".concat(p.includes(e)?" filter-btn--active":""),children:e},e))})]}),(0,a.jsx)("button",{className:"btn btn--primary",onClick:T,disabled:b||!f.trim()||0===p.length,children:b?"Creating...":"Create"})]}),0!==O.length||g?O.length>0?(0,a.jsxs)("table",{className:"station-table",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{children:"Name"}),(0,a.jsx)("th",{children:"Key"}),(0,a.jsx)("th",{children:"Scopes"}),(0,a.jsx)("th",{children:"Created"}),(0,a.jsx)("th",{children:"Last used"}),(0,a.jsx)("th",{})]})}),(0,a.jsx)("tbody",{children:O.map((e,t)=>(0,a.jsxs)("tr",{className:"reveal-item",style:{animationDelay:"".concat(40*t,"ms")},children:[(0,a.jsx)("td",{style:{fontWeight:500},children:e.name}),(0,a.jsxs)("td",{className:"mono",style:{color:"var(--muted)",fontSize:"0.8125rem"},children:[e.keyPrefix,"..."]}),(0,a.jsx)("td",{children:(0,a.jsx)("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"},children:e.scopes.map(e=>(0,a.jsx)("span",{style:{fontSize:"0.6875rem",fontFamily:"var(--font-mono)",padding:"0.125rem 0.375rem",borderRadius:"3px",background:"var(--concrete-dark)",color:"var(--muted)"},children:e},e))})}),(0,a.jsx)("td",{style:{fontSize:"0.8125rem",color:"var(--muted)"},children:l(e.createdAt)}),(0,a.jsx)("td",{style:{fontSize:"0.8125rem",color:"var(--muted)"},children:e.lastUsed?function(e){let t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?"".concat(Math.floor(t/6e4),"m ago"):t<864e5?"".concat(Math.floor(t/36e5),"h ago"):"".concat(Math.floor(t/864e5),"d ago")}(e.lastUsed):"Never"}),(0,a.jsx)("td",{children:C===e.id?(0,a.jsxs)("div",{style:{display:"flex",gap:"0.5rem",alignItems:"center"},children:[(0,a.jsx)("button",{className:"btn",onClick:()=>B(e.id),style:{color:"var(--rust)",borderColor:"var(--rust)",fontSize:"0.75rem"},children:"Confirm"}),(0,a.jsx)("button",{className:"btn",onClick:()=>w(null),style:{fontSize:"0.75rem"},children:"Cancel"})]}):(0,a.jsx)("button",{className:"btn",onClick:()=>w(e.id),style:{fontSize:"0.75rem",color:"var(--muted)"},children:"Revoke"})})]},e.id))})]}):null:(0,a.jsx)("div",{className:"empty-state",children:(0,a.jsx)("p",{className:"empty-state-text",children:"No API keys. Create one to enable remote triggers."})}),P.length>0&&(0,a.jsxs)("div",{style:{marginTop:"1.5rem"},children:[(0,a.jsx)("div",{className:"detail-section-label",style:{color:"var(--muted)",fontSize:"0.6875rem"},children:"Revoked"}),(0,a.jsx)("table",{className:"station-table",style:{opacity:.5},children:(0,a.jsx)("tbody",{children:P.map(e=>(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{style:{textDecoration:"line-through"},children:e.name}),(0,a.jsxs)("td",{className:"mono",style:{color:"var(--muted)",fontSize:"0.8125rem"},children:[e.keyPrefix,"..."]}),(0,a.jsx)("td",{style:{fontSize:"0.8125rem",color:"var(--muted)"},children:l(e.createdAt)})]},e.id))})})]})]})]})}},7646:(e,t,n)=>{"use strict";n.d(t,{Hc:()=>s,iQ:()=>i,rT:()=>r});var a=n(5271);let s=(0,a.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function r(e,t){let n=(0,a.useContext)(s);(0,a.useEffect)(()=>{n.setSegments(e),n.setActiveSection(t)},[JSON.stringify(e),t])}function i(){return(0,a.useContext)(s)}},9612:(e,t,n)=>{Promise.resolve().then(n.bind(n,4521))}},e=>{e.O(0,[814,743,358],()=>e(e.s=9612)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[80],{593:(e,t,a)=>{"use strict";async function n(e,t){let a=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!a.ok)throw Error((await a.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return a.json()}async function s(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function r(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function c(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function i(){return{getHealth:()=>n("/health"),getSignals:()=>n("/signals"),getScheduledSignals:()=>n("/signals/scheduled"),getSignal:e=>n("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>n("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>n("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let a=t.toString();return n("/runs".concat(a?"?".concat(a):""))},getRunStats:()=>n("/runs/stats"),getRun:e=>n("/runs/".concat(e)),getRunSteps:e=>n("/runs/".concat(e,"/steps")),getRunLogs:e=>n("/runs/".concat(e,"/logs")),cancelRun:e=>n("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>n("/broadcasts"),getBroadcast:e=>n("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>n("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>n("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>n("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>n("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>n("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>n("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>n("/v1/keys"),createApiKey:(e,t)=>n("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>n("/v1/keys/".concat(e),{method:"DELETE"})}}a.d(t,{T5:()=>s,gf:()=>i,iD:()=>r,ri:()=>c})},1253:(e,t,a)=>{"use strict";a.d(t,{W:()=>s});var n=a(8111);function s(e){let{status:t}=e;return(0,n.jsxs)("span",{className:"status-badge status-badge--".concat(t),children:[(0,n.jsx)("span",{className:"status-badge-dot"}),t]})}},1489:(e,t,a)=>{"use strict";a.d(t,{s:()=>c});var n=a(8111),s=a(5271);function r(e){let t=Date.now()-new Date(e).getTime();if(t<0)return"just now";let a=Math.floor(t/1e3);if(a<5)return"just now";if(a<60)return"".concat(a,"s ago");let n=Math.floor(a/60);if(n<60)return"".concat(n,"m ago");let s=Math.floor(n/60);if(s<24)return"".concat(s,"h ago");let r=Math.floor(s/24);return"".concat(r,"d ago")}function c(e){let{date:t}=e,[a,c]=(0,s.useState)(()=>r(t));return(0,s.useEffect)(()=>{let e=setInterval(()=>{c(r(t))},5e3);return()=>clearInterval(e)},[t]),(0,n.jsx)("span",{className:"mono",title:new Date(t).toLocaleString(),style:{fontSize:"0.8125rem",color:"var(--muted)"},children:a})}},2638:(e,t,a)=>{"use strict";a.d(t,{SignalDetail:()=>p});var n=a(8111),s=a(5271),r=a(4736),c=a(593),i=a(9275),l=a(7646),o=a(1253),u=a(1489);function d(e){let{runs:t}=e,a=(0,r.useRouter)();return 0===t.length?(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"No runs recorded."})}):(0,n.jsxs)("table",{className:"station-table",children:[(0,n.jsx)("thead",{children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{children:"Status"}),(0,n.jsx)("th",{children:"Signal"}),(0,n.jsx)("th",{children:"Run ID"}),(0,n.jsx)("th",{children:"Duration"}),(0,n.jsx)("th",{children:"Created"}),(0,n.jsx)("th",{children:"Error"})]})}),(0,n.jsx)("tbody",{children:t.map((e,t)=>{var s,r;return(0,n.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*t,"ms")},onClick:()=>a.push("/runs/".concat(e.id)),children:[(0,n.jsx)("td",{children:(0,n.jsx)(o.W,{status:e.status})}),(0,n.jsx)("td",{className:"mono",children:e.signalName}),(0,n.jsx)("td",{className:"mono truncate",title:e.id,children:e.id.slice(0,8)}),(0,n.jsx)("td",{className:"mono",children:function(e,t){if(!e)return"-";let a=new Date(e).getTime(),n=(t?new Date(t).getTime():Date.now())-a;return n<1e3?"".concat(n,"ms"):n<6e4?"".concat((n/1e3).toFixed(1),"s"):"".concat((n/6e4).toFixed(1),"m")}(e.startedAt,e.completedAt)}),(0,n.jsx)("td",{children:(0,n.jsx)(u.s,{date:e.createdAt})}),(0,n.jsx)("td",{style:{color:e.error?"var(--rust)":"var(--muted)",fontFamily:"var(--font-mono)",fontSize:"0.75rem",maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:null!=(s=e.error)?s:void 0,children:(r=e.error,r?r.length<=60?r:r.slice(0,60)+"…":"-")})]},e.id)})})]})}var m=a(3055);function h(e){if("object"===e.type&&e.properties){let t=Object.entries(e.properties).map(e=>{let[t,a]=e;return"".concat(t,": ").concat(a.type).concat(a.required?"":"?")}).join(", ");return"{ ".concat(t," }")}return"array"===e.type&&e.items?"".concat(h(e.items),"[]"):"enum"===e.type&&e.values?e.values.map(e=>'"'.concat(e,'"')).join(" | "):e.type}let g=["all","completed","failed","running","pending"];function p(){var e,t,a;let o=(0,r.useParams)().name,u=decodeURIComponent(o),p=(0,c.gf)(),{events:f}=(0,i.q)(),[x,j]=(0,s.useState)(null),[v,N]=(0,s.useState)([]),[S,y]=(0,s.useState)(!0),[b,w]=(0,s.useState)(!1),[C,R]=(0,s.useState)("{}"),[T,O]=(0,s.useState)("all");(0,l.rT)([{label:"Signals",href:"/signals"},{label:u}],"signals");let k=(0,s.useCallback)(()=>{p.getSignalRuns(o).then(e=>N(e.data)).catch(e=>console.error("Failed to refresh runs:",e))},[o]);async function P(){w(!0);try{let e=JSON.parse(C);await p.triggerSignal(o,e),R("{}"),setTimeout(k,300)}catch(e){e instanceof Error&&console.error("Trigger failed:",e.message)}w(!1)}if((0,s.useEffect)(()=>{!async function(){try{let[e,t]=await Promise.all([p.getSignal(o),p.getSignalRuns(o)]);j(e.data),N(t.data)}catch(e){e instanceof Error&&console.error("Failed to load signal:",e.message)}y(!1)}()},[o]),(0,s.useEffect)(()=>{if(0===f.length)return;let e=f[0];if(e.type.startsWith("run:")){var t,a;(null!=(a=null==(t=e.data.run)?void 0:t.signalName)?a:e.data.signalName)===u&&k()}},[f.length,u,k]),S)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:u}),(0,n.jsx)("div",{className:"loading-bar",children:(0,n.jsx)("div",{className:"loading-bar-fill"})})]});if(!x)return(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"page-title",children:u}),(0,n.jsx)("div",{className:"empty-state",children:(0,n.jsx)("p",{className:"empty-state-text",children:"Signal not found."})})]});let E=null!==x.inputSchema||null!==x.outputSchema,D="all"===T?v:v.filter(e=>e.status===T);return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"page-header",children:[(0,n.jsx)("h1",{className:"page-title",style:{marginBottom:0},children:u}),(0,n.jsx)("div",{className:"page-header-actions",children:(0,n.jsx)("button",{className:"btn btn--primary",onClick:P,disabled:b,children:b?"Dispatching...":"Trigger"})})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Configuration"}),(0,n.jsxs)("div",{className:"config-grid",children:[(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Schedule"}),(0,n.jsx)("span",{className:"config-item-value",children:null!=(e=x.interval)?e:"Manual trigger"})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Timeout"}),(0,n.jsx)("span",{className:"config-item-value",children:(a=x.timeout)<1e3?"".concat(a,"ms"):a<6e4?"".concat((a/1e3).toFixed(0),"s"):a<36e5?"".concat((a/6e4).toFixed(0),"m"):"".concat((a/36e5).toFixed(0),"h")})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Max Attempts"}),(0,n.jsx)("span",{className:"config-item-value",children:x.maxAttempts})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Max Concurrency"}),(0,n.jsx)("span",{className:"config-item-value",children:null!=(t=x.maxConcurrency)?t:"—"})]}),(0,n.jsxs)("div",{className:"config-item",children:[(0,n.jsx)("span",{className:"config-item-label",children:"Steps"}),(0,n.jsx)("span",{className:"config-item-value",children:x.hasSteps?x.stepNames.join(", "):"Single handler"})]})]})]}),E&&(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Schema"}),(0,n.jsxs)("div",{className:"schema-pair",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontFamily:"var(--font-mono)",fontSize:"0.6875rem",textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--muted)",marginBottom:"0.5rem"},children:"Input"}),x.inputSchema?(0,n.jsx)("pre",{className:"json-viewer",style:{fontSize:"0.75rem"},children:h(x.inputSchema)}):(0,n.jsx)("span",{style:{color:"var(--muted)",fontSize:"0.8125rem"},children:"None"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontFamily:"var(--font-mono)",fontSize:"0.6875rem",textTransform:"uppercase",letterSpacing:"0.08em",color:"var(--muted)",marginBottom:"0.5rem"},children:"Output"}),x.outputSchema?(0,n.jsx)("pre",{className:"json-viewer",style:{fontSize:"0.75rem"},children:h(x.outputSchema)}):(0,n.jsx)("span",{style:{color:"var(--muted)",fontSize:"0.8125rem"},children:"None"})]})]})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Trigger"}),(0,n.jsx)(m.q,{schema:x.inputSchema,value:C,onChange:R}),(0,n.jsx)("div",{style:{marginTop:"0.5rem"},children:(0,n.jsx)("button",{className:"btn btn--primary",onClick:P,disabled:b,children:b?"Dispatching...":"Dispatch"})})]}),(0,n.jsxs)("div",{className:"detail-section",children:[(0,n.jsx)("div",{className:"detail-section-label",children:"Run History"}),(0,n.jsx)("div",{className:"filter-bar",children:g.map(e=>(0,n.jsx)("button",{className:"filter-btn".concat(T===e?" filter-btn--active":""),onClick:()=>O(e),children:e.charAt(0).toUpperCase()+e.slice(1)},e))}),(0,n.jsx)(d,{runs:D})]})]})}},3055:(e,t,a)=>{"use strict";a.d(t,{q:()=>c});var n=a(8111),s=a(5271);function r(e){let{schema:t}=e;if("object"!==t.type||!t.properties)return null;let a=Object.entries(t.properties);return 0===a.length?null:(0,n.jsxs)("div",{className:"schema-ref",children:[(0,n.jsx)("div",{className:"schema-ref-title",children:"Expected Input"}),a.map(e=>{let[t,a]=e;return(0,n.jsxs)("div",{className:"schema-field",children:[(0,n.jsx)("span",{className:"schema-field-name",children:t}),(0,n.jsx)("span",{className:"schema-field-type".concat(a.required?"":" schema-field-type--optional"),children:a.type})]},t)})]})}function c(e){let{schema:t,value:a,onChange:c}=e,[i,l]=(0,s.useState)(null),[o,u]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if(!o){if(t&&"{}"===a){let e=JSON.stringify(function e(t){switch(t.type){case"string":return"";case"number":case"integer":return 0;case"boolean":return!1;case"array":return[];case"enum":if(t.values&&t.values.length>0)return t.values[0];return"";case"object":{if(!t.properties)return{};let a={};for(let[n,s]of Object.entries(t.properties))a[n]=e(s);return a}default:return null}}(t),null,2);"{}"!==e&&c(e)}u(!0)}},[t,a,c,o]),(0,n.jsxs)("div",{children:[t&&"object"===t.type&&t.properties&&(0,n.jsx)(r,{schema:t}),(0,n.jsx)("textarea",{className:"input-textarea",value:a,onChange:e=>(function(e){if(c(e),""===e.trim())return void l(null);try{JSON.parse(e),l(null)}catch(e){e instanceof SyntaxError?l(e.message):l("Invalid JSON")}})(e.target.value),rows:6,spellCheck:!1,placeholder:"{}"}),i&&(0,n.jsx)("div",{className:"json-parse-error",children:i})]})}},4736:(e,t,a)=>{"use strict";var n=a(1504);a.o(n,"useParams")&&a.d(t,{useParams:function(){return n.useParams}}),a.o(n,"usePathname")&&a.d(t,{usePathname:function(){return n.usePathname}}),a.o(n,"useRouter")&&a.d(t,{useRouter:function(){return n.useRouter}})},7646:(e,t,a)=>{"use strict";a.d(t,{Hc:()=>s,iQ:()=>c,rT:()=>r});var n=a(5271);let s=(0,n.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function r(e,t){let a=(0,n.useContext)(s);(0,n.useEffect)(()=>{a.setSegments(e),a.setActiveSection(t)},[JSON.stringify(e),t])}function c(){return(0,n.useContext)(s)}},9275:(e,t,a)=>{"use strict";a.d(t,{StationProvider:()=>i,q:()=>c});var n=a(8111),s=a(5271);let r=(0,s.createContext)({connected:!1,events:[]});function c(){return(0,s.useContext)(r)}function i(e){let{children:t}=e,[a,c]=(0,s.useState)([]),{connected:i}=function(e){let[t,a]=(0,s.useState)(!1),n=(0,s.useRef)(e);return n.current=e,(0,s.useEffect)(()=>{let e=null,t=null,s=0,r=!1;return!function c(){if(r)return;let i="https:"===window.location.protocol?"wss:":"ws:";(e=new WebSocket("".concat(i,"//").concat(window.location.host,"/api/events"))).onopen=()=>{a(!0),s=0},e.onmessage=e=>{try{let t=JSON.parse(e.data);n.current(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},e.onclose=()=>{if(a(!1),!r){let e=Math.min(1e3*Math.pow(2,s),1e4);s++,t=setTimeout(c,e)}},e.onerror=()=>{null==e||e.close()}}(),()=>{r=!0,t&&clearTimeout(t),null==e||e.close()}},[]),{connected:t}}((0,s.useCallback)(e=>{c(t=>[e,...t].slice(0,100))},[]));return(0,n.jsx)(r.Provider,{value:{connected:i,events:a},children:t})}},9486:(e,t,a)=>{Promise.resolve().then(a.bind(a,2638))}},e=>{e.O(0,[814,743,358],()=>e(e.s=9486)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[764],{593:(e,t,n)=>{"use strict";async function s(e,t){let n=await fetch("".concat("","/api").concat(e),{...t,credentials:"include",headers:{"Content-Type":"application/json",...null==t?void 0:t.headers}});if(!n.ok)throw Error((await n.json().catch(()=>({error:"unknown",message:"Request failed."}))).message);return n.json()}async function a(){let e=await fetch("".concat("","/api/auth/check"),{credentials:"include"});return(await e.json()).data}async function c(e,t){return(await fetch("".concat("","/api/auth/login"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:e,password:t})})).ok}async function o(){await fetch("".concat("","/api/auth/logout"),{method:"POST",credentials:"include"})}function i(){return{getHealth:()=>s("/health"),getSignals:()=>s("/signals"),getScheduledSignals:()=>s("/signals/scheduled"),getSignal:e=>s("/signals/".concat(encodeURIComponent(e))),getSignalRuns:e=>s("/signals/".concat(encodeURIComponent(e),"/runs")),triggerSignal:(e,t)=>s("/signals/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getRuns:e=>{let t=new URLSearchParams;(null==e?void 0:e.status)&&t.set("status",e.status),(null==e?void 0:e.signalName)&&t.set("signalName",e.signalName);let n=t.toString();return s("/runs".concat(n?"?".concat(n):""))},getRunStats:()=>s("/runs/stats"),getRun:e=>s("/runs/".concat(e)),getRunSteps:e=>s("/runs/".concat(e,"/steps")),getRunLogs:e=>s("/runs/".concat(e,"/logs")),cancelRun:e=>s("/runs/".concat(e,"/cancel"),{method:"POST"}),getBroadcasts:()=>s("/broadcasts"),getBroadcast:e=>s("/broadcasts/".concat(encodeURIComponent(e))),triggerBroadcast:(e,t)=>s("/broadcasts/".concat(encodeURIComponent(e),"/trigger"),{method:"POST",body:JSON.stringify({input:null!=t?t:{}})}),getBroadcastRuns:e=>s("/broadcasts/".concat(encodeURIComponent(e),"/runs")),getBroadcastRun:e=>s("/broadcast-runs/".concat(e)),getBroadcastRunNodes:e=>s("/broadcast-runs/".concat(e,"/nodes")),getBroadcastRunLogs:e=>s("/broadcast-runs/".concat(e,"/logs")),cancelBroadcastRun:e=>s("/broadcast-runs/".concat(e,"/cancel"),{method:"POST"}),getApiKeys:()=>s("/v1/keys"),createApiKey:(e,t)=>s("/v1/keys",{method:"POST",body:JSON.stringify({name:e,scopes:t})}),revokeApiKey:e=>s("/v1/keys/".concat(e),{method:"DELETE"})}}n.d(t,{T5:()=>a,gf:()=>i,iD:()=>c,ri:()=>o})},1510:(e,t,n)=>{Promise.resolve().then(n.bind(n,4913))},4736:(e,t,n)=>{"use strict";var s=n(1504);n.o(s,"useParams")&&n.d(t,{useParams:function(){return s.useParams}}),n.o(s,"usePathname")&&n.d(t,{usePathname:function(){return s.usePathname}}),n.o(s,"useRouter")&&n.d(t,{useRouter:function(){return s.useRouter}})},4913:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var s=n(8111),a=n(5271),c=n(4736),o=n(593),i=n(7646);function r(){let e=(0,o.gf)(),t=(0,c.useRouter)(),[n,r]=(0,a.useState)([]),[l,d]=(0,a.useState)(!0);return((0,i.rT)([{label:"Signals"}],"signals"),(0,a.useEffect)(()=>{e.getSignals().then(e=>r(e.data)).catch(e=>{e instanceof Error&&console.error("Failed to load signals:",e.message)}).finally(()=>d(!1))},[]),l)?(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"page-title",children:"Signals"}),(0,s.jsx)("div",{className:"loading-bar",children:(0,s.jsx)("div",{className:"loading-bar-fill"})})]}):0===n.length?(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"page-title",children:"Signals"}),(0,s.jsx)("div",{className:"empty-state",children:(0,s.jsx)("p",{className:"empty-state-text",children:"No signals discovered."})})]}):(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"page-title",children:"Signals"}),(0,s.jsxs)("table",{className:"station-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Name"}),(0,s.jsx)("th",{children:"Kind"}),(0,s.jsx)("th",{children:"Schedule"}),(0,s.jsx)("th",{children:"Timeout"}),(0,s.jsx)("th",{children:"Retries"}),(0,s.jsx)("th",{children:"Steps"})]})}),(0,s.jsx)("tbody",{children:n.map((e,n)=>{var a,c;return(0,s.jsxs)("tr",{className:"reveal-item clickable-row",style:{animationDelay:"".concat(40*n,"ms")},onClick:()=>t.push("/signals/".concat(encodeURIComponent(e.name))),children:[(0,s.jsx)("td",{className:"mono",children:e.name}),(0,s.jsx)("td",{style:{color:"var(--muted)",fontSize:"0.8125rem"},children:e.interval?"recurring":"trigger"}),(0,s.jsx)("td",{className:"mono",style:{color:"var(--muted)",fontSize:"0.8125rem"},children:null!=(a=e.interval)?a:"—"}),(0,s.jsx)("td",{className:"mono",style:{fontSize:"0.8125rem"},children:(c=e.timeout)<1e3?"".concat(c,"ms"):c<6e4?"".concat((c/1e3).toFixed(0),"s"):c<36e5?"".concat((c/6e4).toFixed(0),"m"):"".concat((c/36e5).toFixed(0),"h")}),(0,s.jsx)("td",{className:"mono",style:{fontSize:"0.8125rem"},children:e.maxAttempts>1?e.maxAttempts-1:"0"}),(0,s.jsx)("td",{className:"mono",style:{fontSize:"0.8125rem"},children:e.hasSteps?e.stepNames.length:"—"})]},e.name)})})]})]})}},7646:(e,t,n)=>{"use strict";n.d(t,{Hc:()=>a,iQ:()=>o,rT:()=>c});var s=n(5271);let a=(0,s.createContext)({segments:[],activeSection:null,setSegments:()=>{},setActiveSection:()=>{}});function c(e,t){let n=(0,s.useContext)(a);(0,s.useEffect)(()=>{n.setSegments(e),n.setActiveSection(t)},[JSON.stringify(e),t])}function o(){return(0,s.useContext)(a)}}},e=>{e.O(0,[814,743,358],()=>e(e.s=1510)),_N_E=e.O()}]);