bunqueue-dashboard 1.0.4 → 1.1.0

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 (68) hide show
  1. package/README.md +173 -360
  2. package/agent/queue/validation.ts +6 -3
  3. package/dist/.vite/manifest.json +177 -82
  4. package/dist/assets/AddJob-jmrtBSrz.js +3 -0
  5. package/dist/assets/{Alerts-Lyzbq0qw.js → Alerts-DrwYvhbk.js} +1 -1
  6. package/dist/assets/{Benchmark-B4NfYkAi.js → Benchmark-7ULYlqmK.js} +1 -1
  7. package/dist/assets/{BulkAddJobs-BAN5wT8A.js → BulkAddJobs-C2sxF-St.js} +3 -3
  8. package/dist/assets/{Cron-Bz46oVXB.js → Cron-BY9EGj2n.js} +1 -1
  9. package/dist/assets/{CronManager-Cl5RW2cB.js → CronManager-CZvC_uox.js} +1 -1
  10. package/dist/assets/Database-B1Dx5OV2.js +3 -0
  11. package/dist/assets/{Diagnostics-DuzTPfyb.js → Diagnostics-D1LEl6O4.js} +1 -1
  12. package/dist/assets/{Dlq-D8s-NhV2.js → Dlq-CPxeigKg.js} +1 -1
  13. package/dist/assets/{DlqControl-DDxRMM8i.js → DlqControl-Dhcz7LY7.js} +1 -1
  14. package/dist/assets/DlqPro-CW80tQdN.js +1 -0
  15. package/dist/assets/FailureDiagnostics-DkLd6szC.js +1 -0
  16. package/dist/assets/{Fleet-BAziMWfo.js → Fleet-CsscadVQ.js} +1 -1
  17. package/dist/assets/Flows-Bzq3onQ3.js +2 -0
  18. package/dist/assets/GlobalSearch-CeCvA6Tm.js +1 -0
  19. package/dist/assets/{JobInspector-BXuXxDwR.js → JobInspector-nTUU1VOU.js} +2 -2
  20. package/dist/assets/{Jobs-pQBmffni.js → Jobs-OwKndzhg.js} +1 -1
  21. package/dist/assets/{JobsPro-k20Pas24.js → JobsPro-CSHP2AYC.js} +1 -1
  22. package/dist/assets/{Logs-DA4JFvpM.js → Logs-CiYuY8ix.js} +1 -1
  23. package/dist/assets/{LogsPro-hna5L6sP.js → LogsPro-BA-wZ8Dr.js} +1 -1
  24. package/dist/assets/{McpServer-Cqem-L3z.js → McpServer-BvOGxNnE.js} +1 -1
  25. package/dist/assets/MetricHistory-Dmu-XqaO.js +1 -0
  26. package/dist/assets/{Metrics-CJ9dW0me.js → Metrics-BF38GgYm.js} +1 -1
  27. package/dist/assets/{MetricsPro-BslYrx1A.js → MetricsPro-DHPmT4Md.js} +1 -1
  28. package/dist/assets/MonitoringSetup-60_ib3rf.js +3 -0
  29. package/dist/assets/{Overview-Cmg_2NAt.js → Overview-DBLxV_vL.js} +1 -1
  30. package/dist/assets/{Pagination-WVfHLHDS.js → Pagination-CmVnmrFt.js} +1 -1
  31. package/dist/assets/{QueueActions-BQf1-g5m.js → QueueActions-uNol2MD7.js} +1 -1
  32. package/dist/assets/QueueControl-DbQwvvtX.js +1 -0
  33. package/dist/assets/{QueueDetail-DfRY4jS4.js → QueueDetail-CA33Kebs.js} +1 -1
  34. package/dist/assets/{QueueDetailPro-CpSMSo8A.js → QueueDetailPro-AUf6FktH.js} +1 -1
  35. package/dist/assets/{Queues-C5lElTjp.js → Queues-C_KeSyQs.js} +1 -1
  36. package/dist/assets/{QueuesOverview-DRohFtuC.js → QueuesOverview-DQ6ta4wA.js} +1 -1
  37. package/dist/assets/{S3Backup-DUHmp2Xw.js → S3Backup-BgPBXJVZ.js} +1 -1
  38. package/dist/assets/{S3BackupPro-Cr2ZJZkw.js → S3BackupPro-BUzcmhnj.js} +3 -3
  39. package/dist/assets/{ServerControl-m58ooJT2.js → ServerControl-WUZjdjPX.js} +1 -1
  40. package/dist/assets/{Settings-DXsjoOqD.js → Settings-Dwh79r-B.js} +1 -1
  41. package/dist/assets/{Usage-CY2uEJEu.js → Usage-DeWofLpa.js} +1 -1
  42. package/dist/assets/{UsagePro-DtlB1dJc.js → UsagePro-BQJWWwW3.js} +1 -1
  43. package/dist/assets/{Webhooks-B_GwTCBW.js → Webhooks-DS3xmbEi.js} +1 -1
  44. package/dist/assets/{Workers-Bu8aJlZf.js → Workers-DyAVvmbR.js} +1 -1
  45. package/dist/assets/{WorkersPro-C6gNYGfo.js → WorkersPro-BJgab7of.js} +1 -1
  46. package/dist/assets/Workflows-BLXlNIxO.js +1 -0
  47. package/dist/assets/bqQueueOperationsRepository-BXoBdFQc.js +1 -0
  48. package/dist/assets/exportFile-B6puuPQx.js +2 -0
  49. package/dist/assets/index-D7iDxOBp.css +1 -0
  50. package/dist/assets/index-DwsYIYdu.js +8 -0
  51. package/dist/assets/{install-hFu5e6YM.js → install-DVeS3d31.js} +2 -2
  52. package/dist/assets/{package-Bb3FkjoS.js → package-D11d0FBn.js} +1 -1
  53. package/dist/assets/targetClient-DvzvwnGp.js +1 -0
  54. package/dist/assets/useDiscovery-BbWXsy6R.js +1 -0
  55. package/dist/assets/{useThroughputSeries-BN5QmKPt.js → useThroughputSeries-DQo7JaT-.js} +1 -1
  56. package/dist/favicon.svg +11 -22
  57. package/dist/index.html +3 -2
  58. package/package.json +1 -1
  59. package/scripts/embedded.gen.ts +146 -132
  60. package/dist/assets/AddJob-Dgjlhzn2.js +0 -3
  61. package/dist/assets/Database-CeUKS6Nf.js +0 -3
  62. package/dist/assets/DlqPro-xj-MM6u8.js +0 -1
  63. package/dist/assets/Flows-BFUMTSWv.js +0 -2
  64. package/dist/assets/QueueControl-BiMM0jLp.js +0 -1
  65. package/dist/assets/Workflows-ClF4YzhW.js +0 -1
  66. package/dist/assets/exportFile-C7xhE8Yh.js +0 -2
  67. package/dist/assets/index-DR8flo6r.css +0 -1
  68. package/dist/assets/index-X_fHGbXZ.js +0 -8
@@ -1,3 +1,3 @@
1
- import{t as e}from"./package-Bb3FkjoS.js";var t=e=>({ok:!0,result:e});function n(e,n){let r=e[1];return n===`GET`&&r===`status`?t({success:!0,message:`Backup configuration loaded`,data:{enabled:!0,bucket:`bunqueue-demo-backups`,endpoint:`https://s3.example.com`,interval:`6h`,retention:`30d`}}):n===`GET`&&r===`list`?t({success:!0,message:`Backups listed`,data:[{key:`backups/bunqueue-2026-08-04.db`,size:`2.6 MB`,date:`2026-08-04T10:00:00Z`},{key:`backups/bunqueue-2026-08-03.db`,size:`2.5 MB`,date:`2026-08-03T10:00:00Z`}]}):n===`POST`&&r===`configure`?t({configured:!0,enabled:!0}):n===`POST`&&r===`now`?t({success:!0,message:`Demo backup completed`,data:{key:`backups/bunqueue-demo-now.db`}}):n===`POST`&&r===`restore`?t({success:!0,message:`Demo backup restored`}):{ok:!1,error:`Demo backup route not found`}}var r={command:`bunx bunqueue@${e.dependencies.bunqueue} start`,httpPort:6790,tcpPort:6791,dataPath:`./data/bunqueue.db`,extraEnv:{LOG_LEVEL:`info`}},i=()=>({status:`running`,generation:1,configRevision:1,pid:42317,startedAt:Date.now()-36e5,exitCode:null,healthy:!0,version:e.dependencies.bunqueue,config:r,runningConfig:r,db:{path:r.dataPath,exists:!0,size:2621440,walSize:49152,shmSize:32768,totalSize:2703360,mtimeMs:Date.now()-12e3}}),a=()=>{let e=Date.now();return{ok:!0,data:{workers:[{id:`wrk-9f21c3d0`,name:`worker-emails-1`,queues:[`emails`,`notifications`],concurrency:10,hostname:`worker-01`,pid:3411,status:`active`,registeredAt:e-54e5,lastSeen:e-4e3,activeJobs:0,processedJobs:1284,failedJobs:6,currentJob:null,uptime:54e5},{id:`wrk-4b77aa19`,name:`worker-media-1`,queues:[`image-processing`],concurrency:4,hostname:`worker-02`,pid:3987,status:`active`,registeredAt:e-51e5,lastSeen:e-2e3,activeJobs:2,processedJobs:342,failedJobs:1,currentJob:`019f252b-8769-7000-bc44-cfc168232f53`,uptime:51e5},{id:`wrk-c05e881f`,name:`worker-batch-1`,queues:[`reports`],concurrency:2,hostname:`worker-02`,pid:4102,status:`stale`,registeredAt:e-9e6,lastSeen:e-12e5,activeJobs:0,processedJobs:57,failedJobs:0,currentJob:null,uptime:78e5}],stats:{total:3,active:2,totalProcessed:1683,totalFailed:7,activeJobs:2}}}},o=()=>{let t=Date.now(),n=(e,n,r,i)=>({seq:e,ts:t-n,stream:r,line:i});return{lines:[n(1,8e3,`sys`,`starting: ${r.command}`),n(2,7800,`stdout`,`bunqueue v${e.dependencies.bunqueue} — HTTP :6790, TCP :6791`),n(3,7600,`stdout`,`SQLite ready (WAL) at ./data/bunqueue.db`),n(4,5e3,`stdout`,`worker registered: image-processing`),n(5,1200,`stdout`,`health ok — 4 queues, 34 jobs`)]}},s={ok:!0,sqliteVersion:`3.45.1`,pageSize:4096,pageCount:640,journalMode:`wal`,freelistPages:8,tables:6,indexes:11,fileSize:2621440,walSize:49152},c={jobs:{columns:[`id`,`queue`,`state`,`priority`,`attempts`,`created_at`],types:{id:`TEXT`,queue:`TEXT`,state:`TEXT`,priority:`INTEGER`,attempts:`INTEGER`,created_at:`INTEGER`},rows:[[`019f252b-86c0-7000-a54e-3816c968ebf0`,`emails`,`prioritized`,1,0,1783035037376],[`019f252b-8769-7000-bc44-cfc168232f53`,`image-processing`,`active`,0,0,1783035037545],[`019f252b-86da-7000-a9e3-6b1b74944d70`,`emails`,`completed`,3,0,1783035037402],[`019f252b-8716-7000-bbec-d8c65e09f340`,`emails`,`failed`,3,0,1783035037462],[`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,`reports`,`delayed`,0,0,1783035037656]]},queues:{columns:[`name`,`paused`,`concurrency`,`rate_limit`],types:{name:`TEXT`,paused:`INTEGER`,concurrency:`INTEGER`,rate_limit:`INTEGER`},rows:[[`emails`,0,10,0],[`image-processing`,0,4,100],[`reports`,0,2,0],[`notifications`,0,8,0]]},dlq:{columns:[`id`,`queue`,`reason`,`attempts`,`entered_at`],types:{id:`TEXT`,queue:`TEXT`,reason:`TEXT`,attempts:`INTEGER`,entered_at:`INTEGER`},rows:[[`019f252b-8716-7000-bbec-d8c65e09f340`,`emails`,`max attempts reached`,3,1783035037462],[`019f252b-8a02-7000-9b21-4c1f0b7e2a55`,`reports`,`handler threw`,5,1783035039101]]},crons:{columns:[`name`,`queue`,`pattern`,`tz`,`next_run`],types:{name:`TEXT`,queue:`TEXT`,pattern:`TEXT`,tz:`TEXT`,next_run:`INTEGER`},rows:[[`nightly-report`,`reports`,`0 2 * * *`,`UTC`,17830944e5],[`digest-email`,`emails`,`*/15 * * * *`,`UTC`,17830359e5]]},webhooks:{columns:[`id`,`url`,`events`,`active`,`failures`,`created_at`],types:{id:`TEXT`,url:`TEXT`,events:`TEXT`,active:`INTEGER`,failures:`INTEGER`,created_at:`INTEGER`},rows:[[`wh_9c31`,`https://hooks.example.com/bunqueue`,`job:completed,job:failed`,1,0,1783034e6]]},job_results:{columns:[`job_id`,`result`,`stored_at`],types:{job_id:`TEXT`,result:`TEXT`,stored_at:`INTEGER`},rows:[[`019f252b-86da-7000-a9e3-6b1b74944d70`,`{"messageId":"smtp-7712"}`,1783035037999],[`019f252b-8769-7000-bc44-cfc168232f53`,`{"bytes":184320}`,1783035038220],[`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,`{"rows":128}`,1783035038511],[`019f252b-8a02-7000-9b21-4c1f0b7e2a55`,`{"error":"handler threw"}`,1783035039300],[`demo-csv-formula`,`=SUM(1,2)`,1783035039400]]}};function l(e){return Object.hasOwn(c,e)?c[e]:void 0}var u={ok:!0,tables:Object.entries(c).map(([e,t])=>({name:e,rows:t.rows.length,columns:t.columns.length}))};function d(e){let t=l(e),n=t?.columns??[`id`,`data`],r=t?.types??{};return{ok:!0,table:e,columns:n.map((e,t)=>({name:e,type:r[e]??`TEXT`,notNull:t===0,defaultValue:null,primaryKey:t===0})),indexes:[{name:`idx_${e}_${n[0]}`,unique:!0,columns:[n[0]]}],sql:`CREATE TABLE ${e} (${n.map(e=>`${e} ${r[e]??`TEXT`}`).join(`, `)})`,rowCount:t?.rows.length??0}}var f=e=>e.replace(/[A-Z]/g,e=>e.toLowerCase());function p(e,t,n=!1){let r=l(e);if(n&&!r)throw Error(`No such table: ${e}`);let i=r?.columns??[`id`,`data`],a=r?.rows??[],o=new URLSearchParams(t);if(n){let e=new Set([`orderBy`,`dir`,`fcol`,`fop`,`fval`]);for(let t of o.keys()){if(!e.has(t))throw Error(`Unknown database export option: ${t}`);if(o.getAll(t).length!==1)throw Error(`Duplicate database export option: ${t}`)}}let s=o.get(`orderBy`);if(n&&s===``)throw Error(`Database export orderBy must not be empty`);let c=s||null,u=o.get(`dir`);if(n&&u!==null&&u!==`asc`&&u!==`desc`)throw Error(`Database export dir must be "asc" or "desc"`);let d=u===`desc`?`desc`:`asc`,p=o.get(`fcol`),m=o.get(`fop`),h=o.get(`fval`);if(n&&(p!==null||m!==null||h!==null)&&(!p||!h||m!==`contains`&&m!==`eq`&&m!==`ne`))throw Error(`Database export filter requires valid fcol, fop and fval values`);let g=p&&h?{column:p,op:m===`eq`?`eq`:m===`ne`?`ne`:`contains`,value:h}:null,_=g?i.indexOf(g.column):-1;if(g&&_<0&&n)throw Error(`No such column: ${g.column}`);let v=g&&_>=0?a.filter(e=>{let t=e[_];if(t==null)return!1;let n=String(t);return g.op===`eq`?n===g.value:g.op===`ne`?n!==g.value:f(n).includes(f(g.value))}):a,y=c?i.indexOf(c):-1;if(c&&y<0&&n)throw Error(`No such column: ${c}`);return{table:e,columns:i,rows:y>=0?[...v].sort((e,t)=>{let n=e[y],r=t[y],i=n==null?r==null?0:-1:r==null?1:n<r?-1:+(n>r);return d===`desc`?-i:i}):v,orderBy:y>=0?c:null,dir:d,filter:_>=0?g:null}}function m(e,t){let n=p(e,t),r=new URLSearchParams(t),i=(e,t)=>{let n=Number(e);return e!==null&&Number.isFinite(n)&&n>=0?n:t},a=i(r.get(`limit`),50),o=i(r.get(`offset`),0),s=n.rows.slice(o,o+(a>0?a:n.rows.length));return{ok:!0,table:e,columns:n.columns,rows:s,rowids:s.map((e,t)=>o+t+1),truncatedCells:s.map(e=>e.map(()=>!1)),total:n.rows.length,limit:a,offset:o,orderBy:n.orderBy,dir:n.dir,filter:n.filter}}var h=2e5,g=16777216,_=2e3,v=2e3;function y(e){let t,n=!1;if(e==null)t=``;else if(typeof e==`string`)t=new TextEncoder().encode(e).byteLength>_?`${[...e].slice(0,v).join(``)}…`:e,n=!0;else if(typeof e==`number`||typeof e==`bigint`||typeof e==`boolean`)t=String(e);else if(e instanceof Uint8Array)t=`<blob ${e.byteLength} B>`,n=!0;else throw Error(`Database export produced an unsupported SQLite value`);let r=n&&/^[=+\-@\t\r]/.test(t)?`'${t}`:t;return/[",\r\n]/.test(r)?`"${r.replaceAll(`"`,`""`)}"`:r}function ee(e,t){try{let n=p(e,t,!0),r=new TextEncoder,i=[],a=0,o=0,s=null,c=e=>{let t=r.encode(e);return a+t.byteLength>g?!1:(i.push(t),a+=t.byteLength,!0)};if(!c(n.columns.map(y).join(`,`)))throw Error(`Database export header exceeds the ${g}-byte export limit`);for(let e of n.rows){if(o>=h){s=`rows`;break}if(!c(`\r\n${e.map(y).join(`,`)}`)){s=`bytes`;break}o++}let l=new Uint8Array(a),u=0;for(let e of i)l.set(e,u),u+=e.byteLength;return new Response(l,{status:200,headers:{"Content-Type":`text/csv; charset=utf-8`,"Content-Length":String(a),"Cache-Control":`no-store`,"X-Content-Type-Options":`nosniff`,"X-Bunqueue-Db-Export-Version":`1`,"X-Bunqueue-Db-Export-Table":encodeURIComponent(n.table),"X-Bunqueue-Db-Export-Rows":String(o),"X-Bunqueue-Db-Export-Bytes":String(a),"X-Bunqueue-Db-Export-Cap":s??`none`,"Access-Control-Expose-Headers":`Content-Length, X-Bunqueue-Db-Export-Version, X-Bunqueue-Db-Export-Table, X-Bunqueue-Db-Export-Rows, X-Bunqueue-Db-Export-Bytes, X-Bunqueue-Db-Export-Cap`}})}catch(e){return new Response(JSON.stringify({ok:!1,error:e instanceof Error?e.message:String(e)}),{status:400,headers:{"Content-Type":`application/json`}})}}var b={"flow-order-9a3f":{id:`flow-order-9a3f`,queue:`orders`,data:{name:`process-order`,orderId:`demo-9a3f`,__childrenIds:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`]},state:`waiting-children`,priority:1,parentId:null,childrenIds:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`],dependsOn:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`]},"flow-charge-1":{id:`flow-charge-1`,queue:`payments`,data:{name:`charge-payment`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`},state:`completed`,priority:2,parentId:`flow-order-9a3f`,childrenIds:[],dependsOn:[]},"flow-ship-2":{id:`flow-ship-2`,queue:`shipping`,data:{name:`ship-order`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`,__childrenIds:[`flow-label-4`]},state:`waiting-children`,priority:1,parentId:`flow-order-9a3f`,childrenIds:[`flow-label-4`],dependsOn:[`flow-label-4`]},"flow-label-4":{id:`flow-label-4`,queue:`shipping`,data:{name:`create-label`,__parentId:`flow-ship-2`,__parentQueue:`shipping`},state:`waiting`,priority:0,parentId:`flow-ship-2`,childrenIds:[],dependsOn:[]},"flow-notify-3":{id:`flow-notify-3`,queue:`emails`,data:{name:`notify-customer`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`},state:`delayed`,priority:0,parentId:`flow-order-9a3f`,childrenIds:[],dependsOn:[`flow-charge-1`]}},x={id:`flow-order-9a3f`,name:`process-order`,queueName:`orders`,state:`waiting-children`,children:[{id:`flow-charge-1`,name:`charge-payment`,queueName:`payments`,state:`completed`,children:[]},{id:`flow-ship-2`,name:`ship-order`,queueName:`shipping`,state:`waiting-children`,children:[{id:`flow-label-4`,name:`create-label`,queueName:`shipping`,state:`waiting`,children:[]}]},{id:`flow-notify-3`,name:`notify-customer`,queueName:`emails`,state:`delayed`,children:[]}]};function S(e,t,n=``){return e[1]===`results`?{ok:!0,result:{operation:`getParentResults`,entries:[[`flow-demo-child`,{rows:42}],[`flow-demo-zero`,0]]}}:e[1]===`tree`?{ok:!0,result:{flow:C(n)}}:e[1]===`create`?{ok:!0,result:{operation:`add`,root:{id:`flow-demo-created`,name:`aggregate`,queueName:`reports`,state:`waiting-children`,children:[]}}}:t===`GET`?{ok:!0,result:{values:{},dependencies:{processed:{},unprocessed:[`flow-demo-child`]},counts:{processed:0,unprocessed:1}}}:{ok:!0,result:{applied:!0,removed:!0}}}function C(e){let t=new URLSearchParams(e),n=w(t.get(`depth`),500),r=w(t.get(`maxChildren`),500),i=(e,t)=>({...e,children:t>=n?[]:e.children.slice(0,r).map(e=>i(e,t+1))});return i(x,0)}function w(e,t){return e===null||!/^\d+$/.test(e)?t:Math.min(Number(e),500)}var T={health:{ok:!0,status:`healthy`,uptime:133,version:`2.9.20`,queues:{waiting:13,active:2,delayed:6,completed:4,dlq:2},connections:{tcp:0,ws:0,sse:0},memory:{heapUsed:3,heapTotal:4,rss:68}},ping:{ok:!0,data:{pong:!0,time:1783035131368}},stats:{ok:!0,stats:{waiting:13,prioritized:7,delayed:6,active:2,dlq:2,completed:4,"waiting-children":0,totalPushed:34,totalPulled:8,totalCompleted:4,totalFailed:0,uptime:133882,cronJobs:2,cronPending:2,pushPerSec:.25,pullPerSec:.06,completePerSec:.03,failPerSec:0},memory:{heapUsed:3,heapTotal:4,rss:69,external:1,arrayBuffers:0},collections:{jobIndex:34,completedJobs:4,jobResults:0,jobLogs:0,customIdMap:0,jobLocks:0,clientJobs:0,clientJobsTotal:0,pendingDepChecks:0,stalledCandidates:0,processingTotal:2,queuedTotal:26,waitingDepsTotal:0,temporalIndexTotal:34,delayedHeapTotal:6}},storage:{ok:!0,data:{diskFull:!1,error:null,since:null}},dashboard:{ok:!0,stats:{waiting:13,active:2,delayed:6,completed:4,dlq:2,totalPushed:34,totalPulled:8,totalCompleted:4,totalFailed:0,uptime:133882},throughput:{pushPerSec:.25,pullPerSec:.06,completePerSec:.03,failPerSec:0},latency:{averages:{pushMs:.07645341176470588,pullMs:.3890205,ackMs:1.03645825},percentiles:{push:{p50:.1,p95:.5,p99:1},pull:{p50:.1,p95:1,p99:1},ack:{p50:2.5,p95:2.5,p99:2.5}}},memory:{heapUsed:3,heapTotal:4,rss:70},collections:{jobIndex:34,completedJobs:4,jobResults:0,jobLogs:0,customIdMap:0,jobLocks:0,clientJobs:0,clientJobsTotal:0,pendingDepChecks:0,stalledCandidates:0,processingTotal:2,queuedTotal:26,waitingDepsTotal:0,temporalIndexTotal:34,delayedHeapTotal:6},workers:{total:0,active:0,list:[],truncated:!1},crons:{total:2,list:[{name:`nightly-report`,jobName:`generate-report`,queue:`reports`,schedule:`0 2 * * *`,repeatEvery:null,nextRun:17830368e5,executions:0},{name:`heartbeat`,jobName:`send-heartbeat`,queue:`notifications`,schedule:null,repeatEvery:6e4,nextRun:1783035191362,executions:0}],truncated:!1},storage:{diskFull:!1,error:null,since:null},timestamp:1783035131369},dashboardQueues:{ok:!0,queues:[{name:`emails`,waiting:2,delayed:0,active:0,dlq:2,paused:!1},{name:`image-processing`,waiting:7,delayed:0,active:2,dlq:0,paused:!1},{name:`reports`,waiting:0,delayed:6,active:0,dlq:0,paused:!1},{name:`notifications`,waiting:4,delayed:0,active:0,dlq:0,paused:!1}],total:4,limit:100,offset:0,timestamp:1783035131370},queuesSummary:[{name:`emails`,paused:!1,counts:{waiting:2,prioritized:7,active:0,completed:4,failed:2,delayed:0}},{name:`image-processing`,paused:!1,counts:{waiting:7,prioritized:0,active:2,completed:0,failed:0,delayed:0}},{name:`reports`,paused:!1,counts:{waiting:0,prioritized:0,active:0,completed:0,failed:0,delayed:6}},{name:`notifications`,paused:!1,counts:{waiting:4,prioritized:0,active:0,completed:0,failed:0,delayed:0}}],crons:{ok:!0,crons:[{name:`nightly-report`,jobName:`generate-report`,queue:`reports`,schedule:`0 2 * * *`,repeatEvery:null,nextRun:17830368e5,executions:0,maxLimit:null,timezone:null},{name:`heartbeat`,jobName:`send-heartbeat`,queue:`notifications`,schedule:null,repeatEvery:6e4,nextRun:1783035191362,executions:0,maxLimit:null,timezone:null}]},webhooks:{ok:!0,data:{webhooks:[{id:`019f252c-f5e3-7000-883c-28cc5dc157a0`,url:`https://hooks.example.com/bunqueue`,events:[`job.completed`,`job.failed`],queue:null,createdAt:1783035131363,lastTriggered:178303512e4,successCount:42,failureCount:3,enabled:!0}],stats:{total:1,enabled:1}}},workers:{ok:!0,data:{workers:[],stats:{total:0,active:0,totalProcessed:0,totalFailed:0,activeJobs:0}}},dlqStats:{ok:!0,total:2,byQueue:{emails:2}},counts_emails:{ok:!0,counts:{waiting:2,prioritized:7,delayed:0,active:0,completed:4,failed:2,"waiting-children":0,paused:0}},dlq_emails:{ok:!0,entries:[{job:{id:`019f252b-8716-7000-bbec-d8c65e09f340`,queue:`emails`,data:{to:`user8@example.com`,subject:`Welcome 8`},createdAt:1783035037462,runAt:1783035037462,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037462},{state:`active`,timestamp:1783035131364}]},enteredAt:1783035131367,reason:`timeout`,error:`Job exceeded its 30000 ms timeout while connecting to smtp.example.com`,attempts:[{attempt:0,startedAt:1783035131364,failedAt:1783035131367,reason:`timeout`,error:`Job exceeded its 30000 ms timeout while connecting to smtp.example.com`,duration:3}],retryCount:0,lastRetryAt:null,nextRetryAt:null,expiresAt:1783639931367},{job:{id:`019f252b-8750-7000-afa1-767720d8f433`,queue:`emails`,data:{to:`user13@example.com`,subject:`Welcome 13`},createdAt:1783035037520,runAt:1783035037520,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037520},{state:`active`,timestamp:1783035131364}]},enteredAt:1783035131368,reason:`max_attempts`,error:`SMTP 550: mailbox unavailable (user13@example.com) — 3 of 3 attempts failed`,attempts:[{attempt:0,startedAt:1783035131364,failedAt:1783035131368,reason:`max_attempts`,error:`SMTP 550: mailbox unavailable (user13@example.com) — 3 of 3 attempts failed`,duration:4}],retryCount:0,lastRetryAt:null,nextRetryAt:null,expiresAt:1783639931368}],total:2},detail_emails:{ok:!0,name:`emails`,counts:{waiting:2,prioritized:7,delayed:0,active:0,completed:4,failed:2,"waiting-children":0,totalCompleted:4,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:2,1:3,2:4},dlqPreview:[{id:`019f252b-8716-7000-bbec-d8c65e09f340`,data:{to:`user8@example.com`,subject:`Welcome 8`},attempts:0,createdAt:1783035037462},{id:`019f252b-8750-7000-afa1-767720d8f433`,data:{to:`user13@example.com`,subject:`Welcome 13`},attempts:0,createdAt:1783035037520}],timestamp:1783035131373,jobs:{waiting:[{id:`019f252b-86f2-7000-a45d-6e5e3dd4abf0`,priority:0,createdAt:1783035037426,runAt:1783035037426,attempts:0,progress:0},{id:`019f252b-872e-7000-91af-f820da905a23`,priority:0,createdAt:1783035037486,runAt:1783035037486,attempts:0,progress:0}],active:[],delayed:[],paused:[]}},"counts_image-processing":{ok:!0,counts:{waiting:7,prioritized:0,delayed:0,active:2,completed:0,failed:0,"waiting-children":0,paused:0}},"dlq_image-processing":{ok:!0,entries:[],total:0},"detail_image-processing":{ok:!0,name:`image-processing`,counts:{waiting:7,prioritized:0,delayed:0,active:2,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:7},dlqPreview:[],timestamp:1783035131374,jobs:{waiting:[{id:`019f252b-8780-7000-9066-7f3a95bbb309`,priority:0,createdAt:1783035037568,runAt:1783035037568,attempts:0,progress:0},{id:`019f252b-878d-7000-9396-88a9de934b0c`,priority:0,createdAt:1783035037581,runAt:1783035037581,attempts:0,progress:0},{id:`019f252b-8799-7000-8433-2f4d874dfa3f`,priority:0,createdAt:1783035037593,runAt:1783035037593,attempts:0,progress:0},{id:`019f252b-87a5-7000-b3d2-48c6816be571`,priority:0,createdAt:1783035037605,runAt:1783035037605,attempts:0,progress:0}],active:[{id:`019f252b-8769-7000-bc44-cfc168232f53`,priority:0,createdAt:1783035037545,runAt:1783035037545,attempts:0,progress:0},{id:`019f252b-8775-7000-884a-63456175f48c`,priority:0,createdAt:1783035037557,runAt:1783035037557,attempts:0,progress:0}],delayed:[],paused:[]}},counts_reports:{ok:!0,counts:{waiting:0,prioritized:0,delayed:6,active:0,completed:0,failed:0,"waiting-children":0,paused:0}},dlq_reports:{ok:!0,entries:[],total:0},detail_reports:{ok:!0,name:`reports`,counts:{waiting:0,prioritized:0,delayed:6,active:0,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:6},dlqPreview:[],timestamp:1783035131374,jobs:{waiting:[],active:[],delayed:[{id:`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,priority:0,createdAt:1783035037656,runAt:1783035637656,attempts:0,progress:0},{id:`019f252b-87e3-7000-b0dc-18aac125e1ce`,priority:0,createdAt:1783035037667,runAt:1783035637667,attempts:0,progress:0},{id:`019f252b-87ee-7000-bb98-e9997d218441`,priority:0,createdAt:1783035037678,runAt:1783035637678,attempts:0,progress:0},{id:`019f252b-87fa-7000-9eb8-5b7a6d7aa7b4`,priority:0,createdAt:1783035037690,runAt:1783035637690,attempts:0,progress:0}],paused:[]}},counts_notifications:{ok:!0,counts:{waiting:4,prioritized:0,delayed:0,active:0,completed:0,failed:0,"waiting-children":0,paused:0}},dlq_notifications:{ok:!0,entries:[],total:0},detail_notifications:{ok:!0,name:`notifications`,counts:{waiting:4,prioritized:0,delayed:0,active:0,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:4},dlqPreview:[],timestamp:1783035131375,jobs:{waiting:[{id:`019f252b-8823-7000-9455-de9cff6a56e2`,priority:0,createdAt:1783035037731,runAt:1783035037731,attempts:0,progress:0},{id:`019f252b-882e-7000-ae38-9c7fe01639d5`,priority:0,createdAt:1783035037742,runAt:1783035037742,attempts:0,progress:0},{id:`019f252b-883b-7000-8789-839b741a1011`,priority:0,createdAt:1783035037755,runAt:1783035037755,attempts:0,progress:0},{id:`019f252b-884d-7000-b703-96a357151ef4`,priority:0,createdAt:1783035037773,runAt:1783035037773,attempts:0,progress:0}],active:[],delayed:[],paused:[]}},emailsWaiting:{ok:!0,jobs:[{id:`019f252b-86c0-7000-a54e-3816c968ebf0`,queue:`emails`,data:{to:`user1@example.com`,subject:`Welcome 1`},createdAt:1783035037376,runAt:1783035037376,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037376,stallCount:0,priority:1,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037376}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-86ce-7000-adfc-613a9495a6ef`,queue:`emails`,data:{to:`user2@example.com`,subject:`Welcome 2`},createdAt:1783035037390,runAt:1783035037390,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037390,stallCount:0,priority:2,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037390}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-86fe-7000-894d-fe3ad935cc36`,queue:`emails`,data:{to:`user6@example.com`,subject:`Welcome 6`},createdAt:1783035037438,runAt:1783035037438,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037438,stallCount:0,priority:1,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037438}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-870a-7000-91d2-ca4070505abe`,queue:`emails`,data:{to:`user7@example.com`,subject:`Welcome 7`},createdAt:1783035037450,runAt:1783035037450,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037450,stallCount:0,priority:2,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037450}],_state:`prioritized`,state:`prioritized`}]},emailsCompleted:{ok:!0,jobs:[{id:`019f252b-86da-7000-a9e3-6b1b74944d70`,queue:`emails`,data:{to:`user3@example.com`,subject:`Welcome 3`},createdAt:1783035037402,runAt:1783035037402,startedAt:1783035131364,completedAt:1783035131367,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037402},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131367}],_state:`completed`,state:`completed`},{id:`019f252b-86e6-7000-a51e-e65a7cd2ce85`,queue:`emails`,data:{to:`user4@example.com`,subject:`Welcome 4`},createdAt:1783035037414,runAt:1783035037414,startedAt:1783035131364,completedAt:1783035131366,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037414},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131366}],_state:`completed`,state:`completed`},{id:`019f252b-8722-7000-9270-14be63598def`,queue:`emails`,data:{to:`user9@example.com`,subject:`Welcome 9`},createdAt:1783035037474,runAt:1783035037474,startedAt:1783035131364,completedAt:1783035131366,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037474},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131366}],_state:`completed`,state:`completed`},{id:`019f252b-875b-7000-8f4b-3d571d84663d`,queue:`emails`,data:{to:`user14@example.com`,subject:`Welcome 14`},createdAt:1783035037531,runAt:1783035037531,startedAt:1783035131364,completedAt:1783035131367,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037531},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131367}],_state:`completed`,state:`completed`}]},oneJob:{ok:!0,job:{id:`019f252b-8716-7000-bbec-d8c65e09f340`,queue:`emails`,data:{to:`user8@example.com`,subject:`Welcome 8`},createdAt:1783035037462,runAt:1783035037462,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037462},{state:`active`,timestamp:1783035131364}],state:`failed`}}},E=e=>T[e]?.jobs??[],D=T.oneJob.job,O=[...E(`emailsWaiting`),...E(`emailsCompleted`),...D?[D]:[]],te=[`emails`,`image-processing`,`reports`,`notifications`];function k(e,t,n){let r={...e,name:typeof e.name==`string`?e.name:`${t}-job`,...e.state===`completed`&&!Object.hasOwn(e,`returnvalue`)?{returnvalue:{ok:!0}}:{},...e.state===`failed`&&!Object.hasOwn(e,`failedReason`)?{failedReason:`Demo job exhausted its retries`}:{}};return t===`emails`?r:{...r,id:`${t}-${String(e.id).slice(-12)}-${n}`,queue:t}}function A(e){if(b[e])return b[e];let t=O.find(t=>t.id===e);if(t)return k(t,`emails`,0);for(let t of te){let n=O.map((e,n)=>k(e,t,n)).find(t=>t.id===e);if(n)return n}return{...D??{queue:`emails`,state:`failed`},id:e,customId:e.startsWith(`demo-custom:`)?e.slice(12):null}}var j=[{id:`wf-order-2026-0804`,workflowName:`order-fulfillment`,state:`running`,currentNodeIndex:3,createdAt:178583892e4,updatedAt:178583904e4,definitionHash:`sha256:8a03c8e91db4d8f5`,input:{orderId:`ord_9a3f`,customerId:`cus_417`,total:129.9},steps:{validate:{status:`completed`,attempts:1,startedAt:1785838920100,completedAt:1785838920210,result:{valid:!0}},charge:{status:`completed`,attempts:1,startedAt:1785838920300,completedAt:1785838921120,compensatable:!0,idempotencyKey:`charge:ord_9a3f`,result:{paymentId:`pay_802`}},reserveInventory:{status:`completed`,attempts:2,startedAt:1785838921200,completedAt:1785838930600,compensatable:!0,result:{reservationId:`res_551`}},ship:{status:`running`,attempts:1,startedAt:178583904e4,childExecutionId:`wf-shipping-0804`}},resolvedSteps:[`validate`,`charge`,`reserveInventory`,`ship`],signals:{},decisions:{"branch:payment":`card`}},{id:`wf-refund-2026-0803`,workflowName:`refund-order`,state:`compensation-stuck`,currentNodeIndex:4,createdAt:17857512e5,updatedAt:178575132e4,rollbackStatus:`stuck`,failureReason:`Refund provider unavailable after 3 attempts`,definitionHash:`sha256:cc89ab41c1b2f011`,input:{orderId:`ord_772`,reason:`customer_request`},steps:{loadOrder:{status:`completed`,attempts:1,result:{paymentId:`pay_331`}},revokeShipment:{status:`completed`,attempts:1,compensatable:!0,compensation:{status:`compensated`,at:1785751300100}},refundPayment:{status:`failed`,attempts:3,compensatable:!0,error:`Provider timeout`,compensation:{status:`compensation-failed`,at:178575132e4,error:`Provider unavailable`}}},resolvedSteps:[`loadOrder`,`revokeShipment`,`refundPayment`],signals:{approved:{actor:`ops@example.com`}},decisions:{"branch:refund-method":`original-payment`}},{id:`wf-signup-2026-0802`,workflowName:`customer-onboarding`,state:`waiting`,currentNodeIndex:2,createdAt:17856648e5,updatedAt:178566492e4,input:{customerId:`cus_881`,plan:`pro`},steps:{createAccount:{status:`completed`,attempts:1,result:{accountId:`acc_881`}},sendVerification:{status:`completed`,attempts:1,result:{messageId:`msg_194`}}},resolvedSteps:[`createAccount`,`sendVerification`],signals:{}}],M=[{id:`wf-month-close-2026-07`,workflowName:`month-end-close`,state:`completed`,currentNodeIndex:4,createdAt:17855784e5,updatedAt:1785578465e3,archivedAt:17856648e5,rollbackStatus:`not-applicable`,definitionHash:`sha256:78b6fd851d8b32a1`,input:{period:`2026-07`},steps:{lockPeriod:{status:`completed`,attempts:1,result:{locked:!0}},aggregate:{status:`completed`,attempts:1,result:{entries:1842}},publish:{status:`completed`,attempts:1,result:{reportId:`rep_2026_07`}}},resolvedSteps:[`lockPeriod`,`aggregate`,`publish`],signals:{},decisions:{}},{id:`wf-import-legacy-441`,workflowName:`legacy-import`,state:`failed`,currentNodeIndex:1,createdAt:1785492e6,updatedAt:1785492009e3,archivedAt:17856648e5,rollbackStatus:`not-applicable`,failureReason:`Input schema rejected row 441`,input:{batch:`legacy-2026-07`},steps:{validate:{status:`failed`,attempts:1,error:`Invalid customer reference at row 441`}},resolvedSteps:[`validate`],signals:{},decisions:{}}],ne={configured:!0,ready:!0,moduleName:`demo-workflows`,workflowNames:[`customer-onboarding`,`order-fulfillment`,`refund-order`]},N=e=>({ok:!0,result:e});function re(e,t){return e[1]===`runtime`&&(e.length===2||e[2]===`reload`)?N(ne):t===`POST`?e[1]===`start`?N({run:{id:`wf-demo-started`,workflowName:`order-fulfillment`}}):e[1]===`recover`?N({recovered:{running:1,waiting:1,compensating:0,total:2}}):e[1]===`archive`||e[1]===`cleanup`?N({affected:1}):e[2]===`signal`||e[2]===`resume-compensation`||e[2]===`abandon-compensation`?N({applied:!0}):null:null}function ie(e,t,n){let r=re(e,n);if(r)return r;if(e[1]===`stats`){let e={running:0,waiting:0,completed:0,failed:0,compensating:0,"compensation-stuck":0};for(let t of j)e[t.state]++;return{ok:!0,available:!0,activeTotal:j.length,archiveTotal:M.length,states:e,workflowNames:[...new Set([...j,...M].map(e=>String(e.workflowName)))].sort()}}let i=new URLSearchParams(t),a=i.get(`kind`)===`archive`?M:j;if(e[1]){let t=a.find(t=>t.id===decodeURIComponent(e[1]));return t?{ok:!0,execution:t}:{ok:!1,error:`Workflow execution not found`}}let o=i.get(`workflowName`),s=i.get(`state`),c=Number(i.get(`offset`)??0),l=Number(i.get(`limit`)??50),u=a.filter(e=>(!o||e.workflowName===o)&&(!s||e.state===s||s===`compensation`&&(e.state===`compensating`||e.state===`compensation-stuck`)));return{ok:!0,available:!0,executions:u.slice(c,c+l).map(({input:e,steps:t,resolvedSteps:n,signals:r,decisions:i,...a})=>a),total:u.length,limit:l,offset:c}}var ae=new Set([`events`,`health`,`healthz`,`live`,`ready`,`ping`,`stats`,`metrics`,`storage`,`dashboard`,`queues`,`queue-operations`,`jobs`,`crons`,`webhooks`,`workers`,`dlq`,`control`,`db`,`workflows`,`flows`,`backup`,`gc`,`heapstats`]);function oe(e,t){if(e[0]!==`queues`||!e[1])return null;let n=decodeURIComponent(e[1]);if(e[2]===`counts`)return T[`counts_${n}`]??{ok:!0,counts:{}};if(e[2]===`dlq`&&e[3]===`stats`)return{ok:!0,stats:n===`emails`?{total:2,byReason:{timeout:1,max_attempts:1}}:{total:0,byReason:{}}};if(e[2]===`dlq`)return T[`dlq_${n}`]??{ok:!0,entries:[],total:0};if(e[2]===`stall-config`)return{ok:!0,config:{enabled:!0,stallInterval:3e4,maxStalls:3,gracePeriod:5e3}};if(e[2]===`dlq-config`)return{ok:!0,config:{autoRetry:!1,autoRetryInterval:6e4,maxAutoRetries:3,maxAge:null,maxEntries:1e3}};if(e[2]!==`jobs`||e[3]!==`list`)return null;let r=new URLSearchParams(t),i=(r.get(`states`)??r.get(`state`)??``).split(`,`).map(e=>e.trim()).filter(Boolean),a=e=>i.length===0||i.includes(String(e))||i.includes(`waiting`)&&e===`prioritized`;return{ok:!0,jobs:O.filter(e=>a(e.state)).map((e,t)=>k(e,n,t))}}function se(e){let t=T.dashboardQueues,n=Array.isArray(t.queues)?t.queues:[],r=new URLSearchParams(e),i=Number(r.get(`limit`)??t.limit),a=Number(r.get(`offset`)??t.offset),o=Number.isSafeInteger(i)&&i>=0?i:Number(t.limit),s=Number.isSafeInteger(a)&&a>=0?a:Number(t.offset);return{...t,queues:n.slice(s,s+o),total:n.length,limit:o,offset:s}}function ce(e){if(e[0]!==`jobs`||!e[1])return null;let t=decodeURIComponent(e[1]);if(e[1]===`custom`&&e[2])return{ok:!0,job:A(`demo-custom:${decodeURIComponent(e[2])}`)};if(e[2]===`result`)return{ok:!0,id:t,result:{sent:!0,provider:`demo`}};if(e[2]===`logs`){let e=[`[info] picked up by worker-emails-1`,`[info] connecting to smtp.example.com:587`,`[error] SMTP 550: mailbox unavailable — will retry with backoff`];return{ok:!0,data:{logs:e,count:e.length}}}return e[2]?null:{ok:!0,job:A(t)}}function P(e,t){if(e[0]!==`db`)return null;if(e[1]===`info`)return s;if(e[1]===`tables`&&!e[2])return u;if(e[1]!==`tables`||!e[2])return null;let n=decodeURIComponent(e[2]);return e[3]===`schema`?d(n):e[3]===`cell`?{ok:!0,value:`demo cell value`}:m(n,t)}function F(e,t){return e===`/gc`?{ok:!0,before:{heapUsed:118,heapTotal:176,rss:214},after:{heapUsed:94,heapTotal:150,rss:181}}:e.endsWith(`/db/query`)?{ok:!0,columns:[`note`],rows:[[`This is the demo. Queries run against a static in-memory sample.`]],rowCount:1,truncated:!1,ms:.4}:e.endsWith(`/jobs`)||e.endsWith(`/jobs/bulk`)?{ok:!0,id:`demo-${t.join(`-`)}`,ids:[`demo-1`]}:{ok:!0}}function I(e,t,s){let c=e.replace(/\/+$/,``)||`/`,l=c.split(`/`).filter(Boolean);if(l[0]===`control`)return l[1]===`logs`?o():l[1]===`config`?{...r,configRevision:1}:i();if(l[0]===`workflows`)return ie(l,s,t);if(l[0]===`backup`)return n(l,t);if(l[0]===`flows`)return S(l,t,s);if(t!==`GET`)return F(c,l);if(c===`/workers`)return a();if(c===`/ready`)return{ok:!0,ready:!0};if(c===`/metrics`){let e=T.stats.stats;return{ok:!0,metrics:{totalPushed:e.totalPushed,totalPulled:e.totalPulled,totalCompleted:e.totalCompleted,totalFailed:e.totalFailed}}}if(c===`/heapstats`)return{ok:!0,memory:{heapUsed:94,heapTotal:150,rss:181},heap:{objectCount:486204,protectedCount:1284,globalCount:312},collections:{},topObjectTypes:[{type:`Structure`,count:42118},{type:`Object`,count:31064},{type:`Function`,count:18902},{type:`string`,count:12447},{type:`Array`,count:8021}]};if(c===`/dashboard/queues`)return se(s);let u={"/health":`health`,"/ping":`ping`,"/stats":`stats`,"/storage":`storage`,"/dashboard":`dashboard`,"/queues/summary":`queuesSummary`,"/crons":`crons`,"/webhooks":`webhooks`,"/dlq/stats":`dlqStats`};return u[c]?T[u[c]]:l[0]===`dashboard`&&l[1]===`queues`&&l[2]?T[`detail_${l[2]}`]??T.detail_emails:oe(l,s)??ce(l)??P(l,s)??{ok:!0}}var L=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":`application/json`}});function R(e){let t=new TextEncoder,n=[`emails`,`image-processing`,`reports`,`notifications`],r=[`job:active`,`job:completed`,`job:completed`,`job:waiting`,`job:failed`,`job:active`],i=new ReadableStream({start(i){let a=0,o=!1,s,c=()=>{if(!o){o=!0,clearInterval(s);try{i.close()}catch{}}};i.enqueue(t.encode(`data: {"connected":true}
1
+ import{t as e}from"./package-D11d0FBn.js";var t=e=>({ok:!0,result:e});function n(e,n){let r=e[1];return n===`GET`&&r===`status`?t({success:!0,message:`Backup configuration loaded`,data:{enabled:!0,bucket:`bunqueue-demo-backups`,endpoint:`https://s3.example.com`,interval:`6h`,retention:`30d`}}):n===`GET`&&r===`list`?t({success:!0,message:`Backups listed`,data:[{key:`backups/bunqueue-2026-08-04.db`,size:`2.6 MB`,date:`2026-08-04T10:00:00Z`},{key:`backups/bunqueue-2026-08-03.db`,size:`2.5 MB`,date:`2026-08-03T10:00:00Z`}]}):n===`POST`&&r===`configure`?t({configured:!0,enabled:!0}):n===`POST`&&r===`now`?t({success:!0,message:`Demo backup completed`,data:{key:`backups/bunqueue-demo-now.db`}}):n===`POST`&&r===`restore`?t({success:!0,message:`Demo backup restored`}):{ok:!1,error:`Demo backup route not found`}}var r={command:`bunx bunqueue@${e.dependencies.bunqueue} start`,httpPort:6790,tcpPort:6791,dataPath:`./data/bunqueue.db`,extraEnv:{LOG_LEVEL:`info`}},i=()=>({status:`running`,generation:1,configRevision:1,pid:42317,startedAt:Date.now()-36e5,exitCode:null,healthy:!0,version:e.dependencies.bunqueue,config:r,runningConfig:r,db:{path:r.dataPath,exists:!0,size:2621440,walSize:49152,shmSize:32768,totalSize:2703360,mtimeMs:Date.now()-12e3}}),a=()=>{let e=Date.now();return{ok:!0,data:{workers:[{id:`wrk-9f21c3d0`,name:`worker-emails-1`,queues:[`emails`,`notifications`],concurrency:10,hostname:`worker-01`,pid:3411,status:`active`,registeredAt:e-54e5,lastSeen:e-4e3,activeJobs:0,processedJobs:1284,failedJobs:6,currentJob:null,uptime:54e5},{id:`wrk-4b77aa19`,name:`worker-media-1`,queues:[`image-processing`],concurrency:4,hostname:`worker-02`,pid:3987,status:`active`,registeredAt:e-51e5,lastSeen:e-2e3,activeJobs:2,processedJobs:342,failedJobs:1,currentJob:`019f252b-8769-7000-bc44-cfc168232f53`,uptime:51e5},{id:`wrk-c05e881f`,name:`worker-batch-1`,queues:[`reports`],concurrency:2,hostname:`worker-02`,pid:4102,status:`stale`,registeredAt:e-9e6,lastSeen:e-12e5,activeJobs:0,processedJobs:57,failedJobs:0,currentJob:null,uptime:78e5}],stats:{total:3,active:2,totalProcessed:1683,totalFailed:7,activeJobs:2}}}},o=()=>{let t=Date.now(),n=(e,n,r,i)=>({seq:e,ts:t-n,stream:r,line:i});return{lines:[n(1,8e3,`sys`,`starting: ${r.command}`),n(2,7800,`stdout`,`bunqueue v${e.dependencies.bunqueue} — HTTP :6790, TCP :6791`),n(3,7600,`stdout`,`SQLite ready (WAL) at ./data/bunqueue.db`),n(4,5e3,`stdout`,`worker registered: image-processing`),n(5,1200,`stdout`,`health ok — 4 queues, 34 jobs`)]}},s={ok:!0,sqliteVersion:`3.45.1`,pageSize:4096,pageCount:640,journalMode:`wal`,freelistPages:8,tables:6,indexes:11,fileSize:2621440,walSize:49152},c={jobs:{columns:[`id`,`queue`,`state`,`priority`,`attempts`,`created_at`],types:{id:`TEXT`,queue:`TEXT`,state:`TEXT`,priority:`INTEGER`,attempts:`INTEGER`,created_at:`INTEGER`},rows:[[`019f252b-86c0-7000-a54e-3816c968ebf0`,`emails`,`prioritized`,1,0,1783035037376],[`019f252b-8769-7000-bc44-cfc168232f53`,`image-processing`,`active`,0,0,1783035037545],[`019f252b-86da-7000-a9e3-6b1b74944d70`,`emails`,`completed`,3,0,1783035037402],[`019f252b-8716-7000-bbec-d8c65e09f340`,`emails`,`failed`,3,0,1783035037462],[`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,`reports`,`delayed`,0,0,1783035037656]]},queues:{columns:[`name`,`paused`,`concurrency`,`rate_limit`],types:{name:`TEXT`,paused:`INTEGER`,concurrency:`INTEGER`,rate_limit:`INTEGER`},rows:[[`emails`,0,10,0],[`image-processing`,0,4,100],[`reports`,0,2,0],[`notifications`,0,8,0]]},dlq:{columns:[`id`,`queue`,`reason`,`attempts`,`entered_at`],types:{id:`TEXT`,queue:`TEXT`,reason:`TEXT`,attempts:`INTEGER`,entered_at:`INTEGER`},rows:[[`019f252b-8716-7000-bbec-d8c65e09f340`,`emails`,`max attempts reached`,3,1783035037462],[`019f252b-8a02-7000-9b21-4c1f0b7e2a55`,`reports`,`handler threw`,5,1783035039101]]},crons:{columns:[`name`,`queue`,`pattern`,`tz`,`next_run`],types:{name:`TEXT`,queue:`TEXT`,pattern:`TEXT`,tz:`TEXT`,next_run:`INTEGER`},rows:[[`nightly-report`,`reports`,`0 2 * * *`,`UTC`,17830944e5],[`digest-email`,`emails`,`*/15 * * * *`,`UTC`,17830359e5]]},webhooks:{columns:[`id`,`url`,`events`,`active`,`failures`,`created_at`],types:{id:`TEXT`,url:`TEXT`,events:`TEXT`,active:`INTEGER`,failures:`INTEGER`,created_at:`INTEGER`},rows:[[`wh_9c31`,`https://hooks.example.com/bunqueue`,`job:completed,job:failed`,1,0,1783034e6]]},job_results:{columns:[`job_id`,`result`,`stored_at`],types:{job_id:`TEXT`,result:`TEXT`,stored_at:`INTEGER`},rows:[[`019f252b-86da-7000-a9e3-6b1b74944d70`,`{"messageId":"smtp-7712"}`,1783035037999],[`019f252b-8769-7000-bc44-cfc168232f53`,`{"bytes":184320}`,1783035038220],[`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,`{"rows":128}`,1783035038511],[`019f252b-8a02-7000-9b21-4c1f0b7e2a55`,`{"error":"handler threw"}`,1783035039300],[`demo-csv-formula`,`=SUM(1,2)`,1783035039400]]}};function l(e){return Object.hasOwn(c,e)?c[e]:void 0}var u={ok:!0,tables:Object.entries(c).map(([e,t])=>({name:e,rows:t.rows.length,columns:t.columns.length}))};function d(e){let t=l(e),n=t?.columns??[`id`,`data`],r=t?.types??{};return{ok:!0,table:e,columns:n.map((e,t)=>({name:e,type:r[e]??`TEXT`,notNull:t===0,defaultValue:null,primaryKey:t===0})),indexes:[{name:`idx_${e}_${n[0]}`,unique:!0,columns:[n[0]]}],sql:`CREATE TABLE ${e} (${n.map(e=>`${e} ${r[e]??`TEXT`}`).join(`, `)})`,rowCount:t?.rows.length??0}}var f=e=>e.replace(/[A-Z]/g,e=>e.toLowerCase());function p(e,t,n=!1){let r=l(e);if(n&&!r)throw Error(`No such table: ${e}`);let i=r?.columns??[`id`,`data`],a=r?.rows??[],o=new URLSearchParams(t);if(n){let e=new Set([`orderBy`,`dir`,`fcol`,`fop`,`fval`]);for(let t of o.keys()){if(!e.has(t))throw Error(`Unknown database export option: ${t}`);if(o.getAll(t).length!==1)throw Error(`Duplicate database export option: ${t}`)}}let s=o.get(`orderBy`);if(n&&s===``)throw Error(`Database export orderBy must not be empty`);let c=s||null,u=o.get(`dir`);if(n&&u!==null&&u!==`asc`&&u!==`desc`)throw Error(`Database export dir must be "asc" or "desc"`);let d=u===`desc`?`desc`:`asc`,p=o.get(`fcol`),m=o.get(`fop`),h=o.get(`fval`);if(n&&(p!==null||m!==null||h!==null)&&(!p||!h||m!==`contains`&&m!==`eq`&&m!==`ne`))throw Error(`Database export filter requires valid fcol, fop and fval values`);let g=p&&h?{column:p,op:m===`eq`?`eq`:m===`ne`?`ne`:`contains`,value:h}:null,_=g?i.indexOf(g.column):-1;if(g&&_<0&&n)throw Error(`No such column: ${g.column}`);let v=g&&_>=0?a.filter(e=>{let t=e[_];if(t==null)return!1;let n=String(t);return g.op===`eq`?n===g.value:g.op===`ne`?n!==g.value:f(n).includes(f(g.value))}):a,y=c?i.indexOf(c):-1;if(c&&y<0&&n)throw Error(`No such column: ${c}`);return{table:e,columns:i,rows:y>=0?[...v].sort((e,t)=>{let n=e[y],r=t[y],i=n==null?r==null?0:-1:r==null?1:n<r?-1:+(n>r);return d===`desc`?-i:i}):v,orderBy:y>=0?c:null,dir:d,filter:_>=0?g:null}}function m(e,t){let n=p(e,t),r=new URLSearchParams(t),i=(e,t)=>{let n=Number(e);return e!==null&&Number.isFinite(n)&&n>=0?n:t},a=i(r.get(`limit`),50),o=i(r.get(`offset`),0),s=n.rows.slice(o,o+(a>0?a:n.rows.length));return{ok:!0,table:e,columns:n.columns,rows:s,rowids:s.map((e,t)=>o+t+1),truncatedCells:s.map(e=>e.map(()=>!1)),total:n.rows.length,limit:a,offset:o,orderBy:n.orderBy,dir:n.dir,filter:n.filter}}var h=2e5,g=16777216,_=2e3,v=2e3;function y(e){let t,n=!1;if(e==null)t=``;else if(typeof e==`string`)t=new TextEncoder().encode(e).byteLength>_?`${[...e].slice(0,v).join(``)}…`:e,n=!0;else if(typeof e==`number`||typeof e==`bigint`||typeof e==`boolean`)t=String(e);else if(e instanceof Uint8Array)t=`<blob ${e.byteLength} B>`,n=!0;else throw Error(`Database export produced an unsupported SQLite value`);let r=n&&/^[=+\-@\t\r]/.test(t)?`'${t}`:t;return/[",\r\n]/.test(r)?`"${r.replaceAll(`"`,`""`)}"`:r}function ee(e,t){try{let n=p(e,t,!0),r=new TextEncoder,i=[],a=0,o=0,s=null,c=e=>{let t=r.encode(e);return a+t.byteLength>g?!1:(i.push(t),a+=t.byteLength,!0)};if(!c(n.columns.map(y).join(`,`)))throw Error(`Database export header exceeds the ${g}-byte export limit`);for(let e of n.rows){if(o>=h){s=`rows`;break}if(!c(`\r\n${e.map(y).join(`,`)}`)){s=`bytes`;break}o++}let l=new Uint8Array(a),u=0;for(let e of i)l.set(e,u),u+=e.byteLength;return new Response(l,{status:200,headers:{"Content-Type":`text/csv; charset=utf-8`,"Content-Length":String(a),"Cache-Control":`no-store`,"X-Content-Type-Options":`nosniff`,"X-Bunqueue-Db-Export-Version":`1`,"X-Bunqueue-Db-Export-Table":encodeURIComponent(n.table),"X-Bunqueue-Db-Export-Rows":String(o),"X-Bunqueue-Db-Export-Bytes":String(a),"X-Bunqueue-Db-Export-Cap":s??`none`,"Access-Control-Expose-Headers":`Content-Length, X-Bunqueue-Db-Export-Version, X-Bunqueue-Db-Export-Table, X-Bunqueue-Db-Export-Rows, X-Bunqueue-Db-Export-Bytes, X-Bunqueue-Db-Export-Cap`}})}catch(e){return new Response(JSON.stringify({ok:!1,error:e instanceof Error?e.message:String(e)}),{status:400,headers:{"Content-Type":`application/json`}})}}var b={"flow-order-9a3f":{id:`flow-order-9a3f`,queue:`orders`,data:{name:`process-order`,orderId:`demo-9a3f`,__childrenIds:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`]},state:`waiting-children`,priority:1,parentId:null,childrenIds:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`],dependsOn:[`flow-charge-1`,`flow-ship-2`,`flow-notify-3`]},"flow-charge-1":{id:`flow-charge-1`,queue:`payments`,data:{name:`charge-payment`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`},state:`completed`,priority:2,parentId:`flow-order-9a3f`,childrenIds:[],dependsOn:[]},"flow-ship-2":{id:`flow-ship-2`,queue:`shipping`,data:{name:`ship-order`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`,__childrenIds:[`flow-label-4`]},state:`waiting-children`,priority:1,parentId:`flow-order-9a3f`,childrenIds:[`flow-label-4`],dependsOn:[`flow-label-4`]},"flow-label-4":{id:`flow-label-4`,queue:`shipping`,data:{name:`create-label`,__parentId:`flow-ship-2`,__parentQueue:`shipping`},state:`waiting`,priority:0,parentId:`flow-ship-2`,childrenIds:[],dependsOn:[]},"flow-notify-3":{id:`flow-notify-3`,queue:`emails`,data:{name:`notify-customer`,__parentId:`flow-order-9a3f`,__parentQueue:`orders`},state:`delayed`,priority:0,parentId:`flow-order-9a3f`,childrenIds:[],dependsOn:[`flow-charge-1`]}},x={id:`flow-order-9a3f`,name:`process-order`,queueName:`orders`,state:`waiting-children`,children:[{id:`flow-charge-1`,name:`charge-payment`,queueName:`payments`,state:`completed`,children:[]},{id:`flow-ship-2`,name:`ship-order`,queueName:`shipping`,state:`waiting-children`,children:[{id:`flow-label-4`,name:`create-label`,queueName:`shipping`,state:`waiting`,children:[]}]},{id:`flow-notify-3`,name:`notify-customer`,queueName:`emails`,state:`delayed`,children:[]}]};function S(e,t,n=``){return e[1]===`results`?{ok:!0,result:{operation:`getParentResults`,entries:[[`flow-demo-child`,{rows:42}],[`flow-demo-zero`,0]]}}:e[1]===`tree`?{ok:!0,result:{flow:C(n)}}:e[1]===`create`?{ok:!0,result:{operation:`add`,root:{id:`flow-demo-created`,name:`aggregate`,queueName:`reports`,state:`waiting-children`,children:[]}}}:t===`GET`?{ok:!0,result:{values:{},dependencies:{processed:{},unprocessed:[`flow-demo-child`]},counts:{processed:0,unprocessed:1}}}:{ok:!0,result:{applied:!0,removed:!0}}}function C(e){let t=new URLSearchParams(e),n=w(t.get(`depth`),500),r=w(t.get(`maxChildren`),500),i=(e,t)=>({...e,children:t>=n?[]:e.children.slice(0,r).map(e=>i(e,t+1))});return i(x,0)}function w(e,t){return e===null||!/^\d+$/.test(e)?t:Math.min(Number(e),500)}var T={health:{ok:!0,status:`healthy`,uptime:133,version:`2.9.20`,queues:{waiting:13,active:2,delayed:6,completed:4,dlq:2},connections:{tcp:0,ws:0,sse:0},memory:{heapUsed:3,heapTotal:4,rss:68}},ping:{ok:!0,data:{pong:!0,time:1783035131368}},stats:{ok:!0,stats:{waiting:13,prioritized:7,delayed:6,active:2,dlq:2,completed:4,"waiting-children":0,totalPushed:34,totalPulled:8,totalCompleted:4,totalFailed:0,uptime:133882,cronJobs:2,cronPending:2,pushPerSec:.25,pullPerSec:.06,completePerSec:.03,failPerSec:0},memory:{heapUsed:3,heapTotal:4,rss:69,external:1,arrayBuffers:0},collections:{jobIndex:34,completedJobs:4,jobResults:0,jobLogs:0,customIdMap:0,jobLocks:0,clientJobs:0,clientJobsTotal:0,pendingDepChecks:0,stalledCandidates:0,processingTotal:2,queuedTotal:26,waitingDepsTotal:0,temporalIndexTotal:34,delayedHeapTotal:6}},storage:{ok:!0,data:{diskFull:!1,error:null,since:null}},dashboard:{ok:!0,stats:{waiting:13,active:2,delayed:6,completed:4,dlq:2,totalPushed:34,totalPulled:8,totalCompleted:4,totalFailed:0,uptime:133882},throughput:{pushPerSec:.25,pullPerSec:.06,completePerSec:.03,failPerSec:0},latency:{averages:{pushMs:.07645341176470588,pullMs:.3890205,ackMs:1.03645825},percentiles:{push:{p50:.1,p95:.5,p99:1},pull:{p50:.1,p95:1,p99:1},ack:{p50:2.5,p95:2.5,p99:2.5}}},memory:{heapUsed:3,heapTotal:4,rss:70},collections:{jobIndex:34,completedJobs:4,jobResults:0,jobLogs:0,customIdMap:0,jobLocks:0,clientJobs:0,clientJobsTotal:0,pendingDepChecks:0,stalledCandidates:0,processingTotal:2,queuedTotal:26,waitingDepsTotal:0,temporalIndexTotal:34,delayedHeapTotal:6},workers:{total:0,active:0,list:[],truncated:!1},crons:{total:2,list:[{name:`nightly-report`,jobName:`generate-report`,queue:`reports`,schedule:`0 2 * * *`,repeatEvery:null,nextRun:17830368e5,executions:0},{name:`heartbeat`,jobName:`send-heartbeat`,queue:`notifications`,schedule:null,repeatEvery:6e4,nextRun:1783035191362,executions:0}],truncated:!1},storage:{diskFull:!1,error:null,since:null},timestamp:1783035131369},dashboardQueues:{ok:!0,queues:[{name:`emails`,waiting:2,delayed:0,active:0,dlq:2,paused:!1},{name:`image-processing`,waiting:7,delayed:0,active:2,dlq:0,paused:!1},{name:`reports`,waiting:0,delayed:6,active:0,dlq:0,paused:!1},{name:`notifications`,waiting:4,delayed:0,active:0,dlq:0,paused:!1}],total:4,limit:100,offset:0,timestamp:1783035131370},queuesSummary:[{name:`emails`,paused:!1,counts:{waiting:2,prioritized:7,active:0,completed:4,failed:2,delayed:0}},{name:`image-processing`,paused:!1,counts:{waiting:7,prioritized:0,active:2,completed:0,failed:0,delayed:0}},{name:`reports`,paused:!1,counts:{waiting:0,prioritized:0,active:0,completed:0,failed:0,delayed:6}},{name:`notifications`,paused:!1,counts:{waiting:4,prioritized:0,active:0,completed:0,failed:0,delayed:0}}],crons:{ok:!0,crons:[{name:`nightly-report`,jobName:`generate-report`,queue:`reports`,schedule:`0 2 * * *`,repeatEvery:null,nextRun:17830368e5,executions:0,maxLimit:null,timezone:null},{name:`heartbeat`,jobName:`send-heartbeat`,queue:`notifications`,schedule:null,repeatEvery:6e4,nextRun:1783035191362,executions:0,maxLimit:null,timezone:null}]},webhooks:{ok:!0,data:{webhooks:[{id:`019f252c-f5e3-7000-883c-28cc5dc157a0`,url:`https://hooks.example.com/bunqueue`,events:[`job.completed`,`job.failed`],queue:null,createdAt:1783035131363,lastTriggered:178303512e4,successCount:42,failureCount:3,enabled:!0}],stats:{total:1,enabled:1}}},workers:{ok:!0,data:{workers:[],stats:{total:0,active:0,totalProcessed:0,totalFailed:0,activeJobs:0}}},dlqStats:{ok:!0,total:2,byQueue:{emails:2}},counts_emails:{ok:!0,counts:{waiting:2,prioritized:7,delayed:0,active:0,completed:4,failed:2,"waiting-children":0,paused:0}},dlq_emails:{ok:!0,entries:[{job:{id:`019f252b-8716-7000-bbec-d8c65e09f340`,queue:`emails`,data:{to:`user8@example.com`,subject:`Welcome 8`},createdAt:1783035037462,runAt:1783035037462,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037462},{state:`active`,timestamp:1783035131364}]},enteredAt:1783035131367,reason:`timeout`,error:`Job exceeded its 30000 ms timeout while connecting to smtp.example.com`,attempts:[{attempt:0,startedAt:1783035131364,failedAt:1783035131367,reason:`timeout`,error:`Job exceeded its 30000 ms timeout while connecting to smtp.example.com`,duration:3}],retryCount:0,lastRetryAt:null,nextRetryAt:null,expiresAt:1783639931367},{job:{id:`019f252b-8750-7000-afa1-767720d8f433`,queue:`emails`,data:{to:`user13@example.com`,subject:`Welcome 13`},createdAt:1783035037520,runAt:1783035037520,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037520},{state:`active`,timestamp:1783035131364}]},enteredAt:1783035131368,reason:`max_attempts`,error:`SMTP 550: mailbox unavailable (user13@example.com) — 3 of 3 attempts failed`,attempts:[{attempt:0,startedAt:1783035131364,failedAt:1783035131368,reason:`max_attempts`,error:`SMTP 550: mailbox unavailable (user13@example.com) — 3 of 3 attempts failed`,duration:4}],retryCount:0,lastRetryAt:null,nextRetryAt:null,expiresAt:1783639931368}],total:2},detail_emails:{ok:!0,name:`emails`,counts:{waiting:2,prioritized:7,delayed:0,active:0,completed:4,failed:2,"waiting-children":0,totalCompleted:4,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:2,1:3,2:4},dlqPreview:[{id:`019f252b-8716-7000-bbec-d8c65e09f340`,data:{to:`user8@example.com`,subject:`Welcome 8`},attempts:0,createdAt:1783035037462},{id:`019f252b-8750-7000-afa1-767720d8f433`,data:{to:`user13@example.com`,subject:`Welcome 13`},attempts:0,createdAt:1783035037520}],timestamp:1783035131373,jobs:{waiting:[{id:`019f252b-86f2-7000-a45d-6e5e3dd4abf0`,priority:0,createdAt:1783035037426,runAt:1783035037426,attempts:0,progress:0},{id:`019f252b-872e-7000-91af-f820da905a23`,priority:0,createdAt:1783035037486,runAt:1783035037486,attempts:0,progress:0}],active:[],delayed:[],paused:[]}},"counts_image-processing":{ok:!0,counts:{waiting:7,prioritized:0,delayed:0,active:2,completed:0,failed:0,"waiting-children":0,paused:0}},"dlq_image-processing":{ok:!0,entries:[],total:0},"detail_image-processing":{ok:!0,name:`image-processing`,counts:{waiting:7,prioritized:0,delayed:0,active:2,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:7},dlqPreview:[],timestamp:1783035131374,jobs:{waiting:[{id:`019f252b-8780-7000-9066-7f3a95bbb309`,priority:0,createdAt:1783035037568,runAt:1783035037568,attempts:0,progress:0},{id:`019f252b-878d-7000-9396-88a9de934b0c`,priority:0,createdAt:1783035037581,runAt:1783035037581,attempts:0,progress:0},{id:`019f252b-8799-7000-8433-2f4d874dfa3f`,priority:0,createdAt:1783035037593,runAt:1783035037593,attempts:0,progress:0},{id:`019f252b-87a5-7000-b3d2-48c6816be571`,priority:0,createdAt:1783035037605,runAt:1783035037605,attempts:0,progress:0}],active:[{id:`019f252b-8769-7000-bc44-cfc168232f53`,priority:0,createdAt:1783035037545,runAt:1783035037545,attempts:0,progress:0},{id:`019f252b-8775-7000-884a-63456175f48c`,priority:0,createdAt:1783035037557,runAt:1783035037557,attempts:0,progress:0}],delayed:[],paused:[]}},counts_reports:{ok:!0,counts:{waiting:0,prioritized:0,delayed:6,active:0,completed:0,failed:0,"waiting-children":0,paused:0}},dlq_reports:{ok:!0,entries:[],total:0},detail_reports:{ok:!0,name:`reports`,counts:{waiting:0,prioritized:0,delayed:6,active:0,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:6},dlqPreview:[],timestamp:1783035131374,jobs:{waiting:[],active:[],delayed:[{id:`019f252b-87d8-7000-8f0c-e8ca5fec7d18`,priority:0,createdAt:1783035037656,runAt:1783035637656,attempts:0,progress:0},{id:`019f252b-87e3-7000-b0dc-18aac125e1ce`,priority:0,createdAt:1783035037667,runAt:1783035637667,attempts:0,progress:0},{id:`019f252b-87ee-7000-bb98-e9997d218441`,priority:0,createdAt:1783035037678,runAt:1783035637678,attempts:0,progress:0},{id:`019f252b-87fa-7000-9eb8-5b7a6d7aa7b4`,priority:0,createdAt:1783035037690,runAt:1783035637690,attempts:0,progress:0}],paused:[]}},counts_notifications:{ok:!0,counts:{waiting:4,prioritized:0,delayed:0,active:0,completed:0,failed:0,"waiting-children":0,paused:0}},dlq_notifications:{ok:!0,entries:[],total:0},detail_notifications:{ok:!0,name:`notifications`,counts:{waiting:4,prioritized:0,delayed:0,active:0,completed:0,failed:0,"waiting-children":0,totalCompleted:0,totalFailed:0,paused:0},paused:!1,priorityCounts:{0:4},dlqPreview:[],timestamp:1783035131375,jobs:{waiting:[{id:`019f252b-8823-7000-9455-de9cff6a56e2`,priority:0,createdAt:1783035037731,runAt:1783035037731,attempts:0,progress:0},{id:`019f252b-882e-7000-ae38-9c7fe01639d5`,priority:0,createdAt:1783035037742,runAt:1783035037742,attempts:0,progress:0},{id:`019f252b-883b-7000-8789-839b741a1011`,priority:0,createdAt:1783035037755,runAt:1783035037755,attempts:0,progress:0},{id:`019f252b-884d-7000-b703-96a357151ef4`,priority:0,createdAt:1783035037773,runAt:1783035037773,attempts:0,progress:0}],active:[],delayed:[],paused:[]}},emailsWaiting:{ok:!0,jobs:[{id:`019f252b-86c0-7000-a54e-3816c968ebf0`,queue:`emails`,data:{to:`user1@example.com`,subject:`Welcome 1`},createdAt:1783035037376,runAt:1783035037376,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037376,stallCount:0,priority:1,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037376}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-86ce-7000-adfc-613a9495a6ef`,queue:`emails`,data:{to:`user2@example.com`,subject:`Welcome 2`},createdAt:1783035037390,runAt:1783035037390,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037390,stallCount:0,priority:2,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037390}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-86fe-7000-894d-fe3ad935cc36`,queue:`emails`,data:{to:`user6@example.com`,subject:`Welcome 6`},createdAt:1783035037438,runAt:1783035037438,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037438,stallCount:0,priority:1,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037438}],_state:`prioritized`,state:`prioritized`},{id:`019f252b-870a-7000-91d2-ca4070505abe`,queue:`emails`,data:{to:`user7@example.com`,subject:`Welcome 7`},createdAt:1783035037450,runAt:1783035037450,startedAt:null,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035037450,stallCount:0,priority:2,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037450}],_state:`prioritized`,state:`prioritized`}]},emailsCompleted:{ok:!0,jobs:[{id:`019f252b-86da-7000-a9e3-6b1b74944d70`,queue:`emails`,data:{to:`user3@example.com`,subject:`Welcome 3`},createdAt:1783035037402,runAt:1783035037402,startedAt:1783035131364,completedAt:1783035131367,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037402},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131367}],_state:`completed`,state:`completed`},{id:`019f252b-86e6-7000-a51e-e65a7cd2ce85`,queue:`emails`,data:{to:`user4@example.com`,subject:`Welcome 4`},createdAt:1783035037414,runAt:1783035037414,startedAt:1783035131364,completedAt:1783035131366,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037414},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131366}],_state:`completed`,state:`completed`},{id:`019f252b-8722-7000-9270-14be63598def`,queue:`emails`,data:{to:`user9@example.com`,subject:`Welcome 9`},createdAt:1783035037474,runAt:1783035037474,startedAt:1783035131364,completedAt:1783035131366,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037474},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131366}],_state:`completed`,state:`completed`},{id:`019f252b-875b-7000-8f4b-3d571d84663d`,queue:`emails`,data:{to:`user14@example.com`,subject:`Welcome 14`},createdAt:1783035037531,runAt:1783035037531,startedAt:1783035131364,completedAt:1783035131367,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:4,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037531},{state:`active`,timestamp:1783035131364},{state:`completed`,timestamp:1783035131367}],_state:`completed`,state:`completed`}]},oneJob:{ok:!0,job:{id:`019f252b-8716-7000-bbec-d8c65e09f340`,queue:`emails`,data:{to:`user8@example.com`,subject:`Welcome 8`},createdAt:1783035037462,runAt:1783035037462,startedAt:1783035131364,completedAt:null,attempts:0,backoff:1e3,backoffConfig:null,dependsOn:[],childrenIds:[],childrenCompleted:0,tags:[],progress:0,progressMessage:null,stacktrace:null,repeat:null,lastHeartbeat:1783035131364,stallCount:0,priority:3,lifo:!1,maxAttempts:3,removeOnComplete:!1,removeOnFail:!1,ttl:null,timeout:null,uniqueKey:null,customId:null,parentId:null,groupId:null,stallTimeout:null,stackTraceLimit:10,keepLogs:null,sizeLimit:null,failParentOnFailure:!1,removeDependencyOnFailure:!1,continueParentOnFailure:!1,ignoreDependencyOnFailure:!1,deduplicationTtl:null,deduplicationExtend:!1,deduplicationReplace:!1,debounceId:null,debounceTtl:null,timeline:[{state:`prioritized`,timestamp:1783035037462},{state:`active`,timestamp:1783035131364}],state:`failed`}}},E=e=>T[e]?.jobs??[],D=T.oneJob.job,O=[...E(`emailsWaiting`),...E(`emailsCompleted`),...D?[D]:[]],te=[`emails`,`image-processing`,`reports`,`notifications`];function k(e,t,n){let r={...e,name:typeof e.name==`string`?e.name:`${t}-job`,...e.state===`completed`&&!Object.hasOwn(e,`returnvalue`)?{returnvalue:{ok:!0}}:{},...e.state===`failed`&&!Object.hasOwn(e,`failedReason`)?{failedReason:`Demo job exhausted its retries`}:{}};return t===`emails`?r:{...r,id:`${t}-${String(e.id).slice(-12)}-${n}`,queue:t}}function A(e){if(b[e])return b[e];let t=O.find(t=>t.id===e);if(t)return k(t,`emails`,0);for(let t of te){let n=O.map((e,n)=>k(e,t,n)).find(t=>t.id===e);if(n)return n}return{...D??{queue:`emails`,state:`failed`},id:e,customId:e.startsWith(`demo-custom:`)?e.slice(12):null}}var j=[{id:`wf-order-2026-0804`,workflowName:`order-fulfillment`,state:`running`,currentNodeIndex:3,createdAt:178583892e4,updatedAt:178583904e4,definitionHash:`sha256:8a03c8e91db4d8f5`,input:{orderId:`ord_9a3f`,customerId:`cus_417`,total:129.9},steps:{validate:{status:`completed`,attempts:1,startedAt:1785838920100,completedAt:1785838920210,result:{valid:!0}},charge:{status:`completed`,attempts:1,startedAt:1785838920300,completedAt:1785838921120,compensatable:!0,idempotencyKey:`charge:ord_9a3f`,result:{paymentId:`pay_802`}},reserveInventory:{status:`completed`,attempts:2,startedAt:1785838921200,completedAt:1785838930600,compensatable:!0,result:{reservationId:`res_551`}},ship:{status:`running`,attempts:1,startedAt:178583904e4,childExecutionId:`wf-shipping-0804`}},resolvedSteps:[`validate`,`charge`,`reserveInventory`,`ship`],signals:{},decisions:{"branch:payment":`card`}},{id:`wf-refund-2026-0803`,workflowName:`refund-order`,state:`compensation-stuck`,currentNodeIndex:4,createdAt:17857512e5,updatedAt:178575132e4,rollbackStatus:`stuck`,failureReason:`Refund provider unavailable after 3 attempts`,definitionHash:`sha256:cc89ab41c1b2f011`,input:{orderId:`ord_772`,reason:`customer_request`},steps:{loadOrder:{status:`completed`,attempts:1,result:{paymentId:`pay_331`}},revokeShipment:{status:`completed`,attempts:1,compensatable:!0,compensation:{status:`compensated`,at:1785751300100}},refundPayment:{status:`failed`,attempts:3,compensatable:!0,error:`Provider timeout`,compensation:{status:`compensation-failed`,at:178575132e4,error:`Provider unavailable`}}},resolvedSteps:[`loadOrder`,`revokeShipment`,`refundPayment`],signals:{approved:{actor:`ops@example.com`}},decisions:{"branch:refund-method":`original-payment`}},{id:`wf-signup-2026-0802`,workflowName:`customer-onboarding`,state:`waiting`,currentNodeIndex:2,createdAt:17856648e5,updatedAt:178566492e4,input:{customerId:`cus_881`,plan:`pro`},steps:{createAccount:{status:`completed`,attempts:1,result:{accountId:`acc_881`}},sendVerification:{status:`completed`,attempts:1,result:{messageId:`msg_194`}}},resolvedSteps:[`createAccount`,`sendVerification`],signals:{}}],M=[{id:`wf-month-close-2026-07`,workflowName:`month-end-close`,state:`completed`,currentNodeIndex:4,createdAt:17855784e5,updatedAt:1785578465e3,archivedAt:17856648e5,rollbackStatus:`not-applicable`,definitionHash:`sha256:78b6fd851d8b32a1`,input:{period:`2026-07`},steps:{lockPeriod:{status:`completed`,attempts:1,result:{locked:!0}},aggregate:{status:`completed`,attempts:1,result:{entries:1842}},publish:{status:`completed`,attempts:1,result:{reportId:`rep_2026_07`}}},resolvedSteps:[`lockPeriod`,`aggregate`,`publish`],signals:{},decisions:{}},{id:`wf-import-legacy-441`,workflowName:`legacy-import`,state:`failed`,currentNodeIndex:1,createdAt:1785492e6,updatedAt:1785492009e3,archivedAt:17856648e5,rollbackStatus:`not-applicable`,failureReason:`Input schema rejected row 441`,input:{batch:`legacy-2026-07`},steps:{validate:{status:`failed`,attempts:1,error:`Invalid customer reference at row 441`}},resolvedSteps:[`validate`],signals:{},decisions:{}}],ne={configured:!0,ready:!0,moduleName:`demo-workflows`,workflowNames:[`customer-onboarding`,`order-fulfillment`,`refund-order`]},N=e=>({ok:!0,result:e});function re(e,t){return e[1]===`runtime`&&(e.length===2||e[2]===`reload`)?N(ne):t===`POST`?e[1]===`start`?N({run:{id:`wf-demo-started`,workflowName:`order-fulfillment`}}):e[1]===`recover`?N({recovered:{running:1,waiting:1,compensating:0,total:2}}):e[1]===`archive`||e[1]===`cleanup`?N({affected:1}):e[2]===`signal`||e[2]===`resume-compensation`||e[2]===`abandon-compensation`?N({applied:!0}):null:null}function ie(e,t,n){let r=re(e,n);if(r)return r;if(e[1]===`stats`){let e={running:0,waiting:0,completed:0,failed:0,compensating:0,"compensation-stuck":0};for(let t of j)e[t.state]++;return{ok:!0,available:!0,activeTotal:j.length,archiveTotal:M.length,states:e,workflowNames:[...new Set([...j,...M].map(e=>String(e.workflowName)))].sort()}}let i=new URLSearchParams(t),a=i.get(`kind`)===`archive`?M:j;if(e[1]){let t=a.find(t=>t.id===decodeURIComponent(e[1]));return t?{ok:!0,execution:t}:{ok:!1,error:`Workflow execution not found`}}let o=i.get(`workflowName`),s=i.get(`state`),c=Number(i.get(`offset`)??0),l=Number(i.get(`limit`)??50),u=a.filter(e=>(!o||e.workflowName===o)&&(!s||e.state===s||s===`compensation`&&(e.state===`compensating`||e.state===`compensation-stuck`)));return{ok:!0,available:!0,executions:u.slice(c,c+l).map(({input:e,steps:t,resolvedSteps:n,signals:r,decisions:i,...a})=>a),total:u.length,limit:l,offset:c}}var ae=new Set([`events`,`health`,`healthz`,`live`,`ready`,`ping`,`stats`,`metrics`,`storage`,`dashboard`,`queues`,`queue-operations`,`jobs`,`crons`,`webhooks`,`workers`,`dlq`,`control`,`db`,`workflows`,`flows`,`backup`,`gc`,`heapstats`]);function oe(e,t){if(e[0]!==`queues`||!e[1])return null;let n=decodeURIComponent(e[1]);if(e[2]===`counts`)return T[`counts_${n}`]??{ok:!0,counts:{}};if(e[2]===`dlq`&&e[3]===`stats`)return{ok:!0,stats:n===`emails`?{total:2,byReason:{timeout:1,max_attempts:1}}:{total:0,byReason:{}}};if(e[2]===`dlq`)return T[`dlq_${n}`]??{ok:!0,entries:[],total:0};if(e[2]===`stall-config`)return{ok:!0,config:{enabled:!0,stallInterval:3e4,maxStalls:3,gracePeriod:5e3}};if(e[2]===`dlq-config`)return{ok:!0,config:{autoRetry:!1,autoRetryInterval:6e4,maxAutoRetries:3,maxAge:null,maxEntries:1e3}};if(e[2]!==`jobs`||e[3]!==`list`)return null;let r=new URLSearchParams(t),i=(r.get(`states`)??r.get(`state`)??``).split(`,`).map(e=>e.trim()).filter(Boolean),a=e=>i.length===0||i.includes(String(e))||i.includes(`waiting`)&&e===`prioritized`;return{ok:!0,jobs:O.filter(e=>a(e.state)).map((e,t)=>k(e,n,t))}}function se(e){let t=T.dashboardQueues,n=Array.isArray(t.queues)?t.queues:[],r=new URLSearchParams(e),i=Number(r.get(`limit`)??t.limit),a=Number(r.get(`offset`)??t.offset),o=Number.isSafeInteger(i)&&i>=0?i:Number(t.limit),s=Number.isSafeInteger(a)&&a>=0?a:Number(t.offset);return{...t,queues:n.slice(s,s+o),total:n.length,limit:o,offset:s}}function ce(e){if(e[0]!==`jobs`||!e[1])return null;let t=decodeURIComponent(e[1]);if(e[1]===`custom`&&e[2])return{ok:!0,job:A(`demo-custom:${decodeURIComponent(e[2])}`)};if(e[2]===`result`)return{ok:!0,id:t,result:{sent:!0,provider:`demo`}};if(e[2]===`logs`){let e=[`[info] picked up by worker-emails-1`,`[info] connecting to smtp.example.com:587`,`[error] SMTP 550: mailbox unavailable — will retry with backoff`];return{ok:!0,data:{logs:e,count:e.length}}}return e[2]?null:{ok:!0,job:A(t)}}function P(e,t){if(e[0]!==`db`)return null;if(e[1]===`info`)return s;if(e[1]===`tables`&&!e[2])return u;if(e[1]!==`tables`||!e[2])return null;let n=decodeURIComponent(e[2]);return e[3]===`schema`?d(n):e[3]===`cell`?{ok:!0,value:`demo cell value`}:m(n,t)}function F(e,t){return e===`/gc`?{ok:!0,before:{heapUsed:118,heapTotal:176,rss:214},after:{heapUsed:94,heapTotal:150,rss:181}}:e.endsWith(`/db/query`)?{ok:!0,columns:[`note`],rows:[[`This is the demo. Queries run against a static in-memory sample.`]],rowCount:1,truncated:!1,ms:.4}:e.endsWith(`/jobs`)||e.endsWith(`/jobs/bulk`)?{ok:!0,id:`demo-${t.join(`-`)}`,ids:[`demo-1`]}:{ok:!0}}function I(e,t,s){let c=e.replace(/\/+$/,``)||`/`,l=c.split(`/`).filter(Boolean);if(l[0]===`control`)return l[1]===`logs`?o():l[1]===`config`?{...r,configRevision:1}:i();if(l[0]===`workflows`)return ie(l,s,t);if(l[0]===`backup`)return n(l,t);if(l[0]===`flows`)return S(l,t,s);if(t!==`GET`)return F(c,l);if(c===`/workers`)return a();if(c===`/ready`)return{ok:!0,ready:!0};if(c===`/metrics`){let e=T.stats.stats;return{ok:!0,metrics:{totalPushed:e.totalPushed,totalPulled:e.totalPulled,totalCompleted:e.totalCompleted,totalFailed:e.totalFailed}}}if(c===`/heapstats`)return{ok:!0,memory:{heapUsed:94,heapTotal:150,rss:181},heap:{objectCount:486204,protectedCount:1284,globalCount:312},collections:{},topObjectTypes:[{type:`Structure`,count:42118},{type:`Object`,count:31064},{type:`Function`,count:18902},{type:`string`,count:12447},{type:`Array`,count:8021}]};if(c===`/dashboard/queues`)return se(s);let u={"/health":`health`,"/ping":`ping`,"/stats":`stats`,"/storage":`storage`,"/dashboard":`dashboard`,"/queues/summary":`queuesSummary`,"/crons":`crons`,"/webhooks":`webhooks`,"/dlq/stats":`dlqStats`};return u[c]?T[u[c]]:l[0]===`dashboard`&&l[1]===`queues`&&l[2]?T[`detail_${l[2]}`]??T.detail_emails:oe(l,s)??ce(l)??P(l,s)??{ok:!0}}var L=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":`application/json`}});function R(e){let t=new TextEncoder,n=[`emails`,`image-processing`,`reports`,`notifications`],r=[`job:active`,`job:completed`,`job:completed`,`job:waiting`,`job:failed`,`job:active`],i=new ReadableStream({start(i){let a=0,o=!1,s,c=()=>{if(!o){o=!0,clearInterval(s);try{i.close()}catch{}}};i.enqueue(t.encode(`data: {"connected":true}
2
2
 
3
- `)),s=setInterval(()=>{if(o)return;let e=r[a%r.length],s=n[a%n.length],l=JSON.stringify({queue:s,jobId:`demo-${a}`,name:s,timestamp:Date.now()});try{i.enqueue(t.encode(`event: ${e}\ndata: ${l}\n\n`))}catch{c()}a+=1},1400),e?.aborted?c():e?.addEventListener(`abort`,c,{once:!0})}});return new Response(i,{status:200,headers:{"Content-Type":`text/event-stream`}})}var z=8192,B=1783035039e3;function V(e,t,n){let r=n===-1?e.length:Math.min(e.length,n+1);return{meta:{count:e.reduce((e,t)=>e+t,0),prevTS:e.length?B:0,prevCount:e[0]??0},data:t>=r?[]:e.slice(t,r),count:e.length}}function H(e,t){let n=new URL(e.url).searchParams;for(let e of n.keys()){if(!t.includes(e))throw Error(`Unknown Queue operation option: ${e}`);if(n.getAll(e).length!==1)throw Error(`Duplicate Queue operation option: ${e}`)}if(!n.get(`target`))throw Error(`Queue operation target is required`);return n}async function U(e,t){let n=await e.text();if(new TextEncoder().encode(n).byteLength>z)throw Error(`Queue operation request body exceeds 8 KiB`);let r;try{r=JSON.parse(n)}catch{throw Error(`Queue operation request must be valid JSON`)}if(!ue(r))throw Error(`Queue operation request must be an object`);let i=Object.keys(r).find(e=>!t.includes(e));if(i)throw Error(`Unknown Queue operation body field: ${i}`);return r}function W(e){if(!e||e.length>256||e===`.`||e===`..`||!/^[\w.:-]+$/.test(e))throw Error(`Queue name must contain 1-256 letters, numbers, underscores, dashes, dots or colons`);return e}function G(e){if(typeof e!=`string`||!e||e.length>1024)throw Error(`Deduplication ID must contain 1-1024 characters`);return e}function K(e){if(typeof e!=`string`||!e||e.length>256||e.includes(`\0`))throw Error(`groupId must be a non-empty string of at most 256 characters without NUL`);return e}function q(e,t){let n=e.groups.get(t);if(n)return n;let r={jobs:0,active:0,consumedJobs:0,cooldownMs:0,rateLimit:null,concurrency:null,paused:!1,entries:[]};return e.groups.set(t,r),r}function J(e,t){return X(e,t,1,2**53-1)}function le(e){if(e!==`completed`&&e!==`failed`)throw Error(`Metrics type must be completed or failed`);return e}function Y(e,t,n,r){if(e!==null){if(!/^-?\d+$/.test(e))throw Error(`${t} must be an integer`);return X(Number(e),t,n,r)}}function X(e,t,n,r){if(!Number.isSafeInteger(e)||e<n||e>r)throw Error(`${t} must be an integer from ${n} to ${r}`);return e}function ue(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function de(){return L({ok:!1,error:`Unknown Queue operation`},404)}var fe=e=>e instanceof Error?e.message:String(e),pe={emails:{rateLimit:null,concurrency:10,activeJobs:0,consumedJobs:0,cooldownMs:0,events:1284,completed:[2,1,0,1],failed:[1,0,1],deduplications:[[`welcome:user8@example.com`,`019f252b-86c0-7000-a54e-3816c968ebf0`]]},"image-processing":{rateLimit:{max:100,duration:6e4},concurrency:4,activeJobs:2,consumedJobs:100,cooldownMs:750,events:1428,completed:[7,9,4,6,3],failed:[0,1,0,0,1],deduplications:[[`asset:hero`,`019f252b-8769-7000-bc44-cfc168232f53`]]},reports:{rateLimit:null,concurrency:2,activeJobs:0,consumedJobs:0,cooldownMs:0,events:318,completed:[1,0,2],failed:[1],deduplications:[]},notifications:{rateLimit:null,concurrency:8,activeJobs:0,consumedJobs:0,cooldownMs:0,events:612,completed:[5,4,3],failed:[],deduplications:[]}},me={rateLimit:null,concurrency:null,activeJobs:0,consumedJobs:0,cooldownMs:0,events:0,completed:[],failed:[],deduplications:[]},Z=1e4,Q=1e6;function he(){let e=new Map,t=t=>{let n=e.get(t);if(n)return n;let r=pe[t]??me,i={...r,deduplications:new Map(r.deduplications),groups:new Map};return e.set(t,i),i};return async(e,n)=>{try{let r=await ge(e,n,t);return r?L(r):de()}catch(e){return L({ok:!1,error:fe(e)},400)}}}async function ge(e,t,n){let r=t.replace(/\/+$/,``).split(`/`).filter(Boolean);if(r[0]!==`queue-operations`||r.length<3)return null;let i=W(decodeURIComponent(r[1])),a=r.slice(2).join(`/`),o=n(i);if(e.method===`GET`&&a===`limits`){let t=Y(H(e,[`target`,`maxJobs`]).get(`maxJobs`),`maxJobs`,0,1e6),n=o.rateLimit===null?-2:t!==void 0&&o.consumedJobs<t?0:o.cooldownMs;return{ok:!0,limits:{rateLimit:o.rateLimit,concurrency:o.concurrency,rateLimitTtl:n,maxed:o.concurrency!==null&&o.activeJobs>=o.concurrency}}}if(e.method===`GET`&&a===`groups`){let t=H(e,[`target`,`groupId`,`maxJobs`,`maxCount`,`start`,`end`]),n=K(t.get(`groupId`)),r=Y(t.get(`maxJobs`),`maxJobs`,0,1e6);Y(t.get(`maxCount`),`maxCount`,1,1e6);let i=Y(t.get(`start`),`start`,0,1e6)??0,a=Y(t.get(`end`),`end`,0,1e6)??i+24;if(a<i||a-i>=100)throw Error(`Group jobs page must be an inclusive range of at most 100 jobs`);let s=q(o,n),c=s.rateLimit===null?-2:r!==void 0&&s.consumedJobs<r?0:s.cooldownMs,l={};for(let e of s.entries){let t=String(e.priority);l[t]=(l[t]??0)+1}return{ok:!0,group:{jobs:s.jobs,active:s.active,totalGrouped:[...o.groups.values()].reduce((e,t)=>e+t.jobs,0),paused:s.paused,entries:s.entries.slice(i,a+1),priorityCounts:l,rateLimit:s.rateLimit,rateLimitTtl:c,concurrency:s.concurrency}}}if(e.method===`GET`&&a===`deduplication`){let t=G(H(e,[`target`,`deduplicationId`]).get(`deduplicationId`));return{ok:!0,jobId:o.deduplications.get(t)??null}}if(e.method===`GET`&&a===`metrics`){let t=H(e,[`target`,`type`,`start`,`end`]),n=le(t.get(`type`)),r=Y(t.get(`start`),`start`,0,Z)??0,i=Y(t.get(`end`),`end`,-1,Z)??-1;if(i!==-1&&i<r)throw Error(`Metrics end must be -1 or at least start`);return{ok:!0,metrics:V(o[n],r,i)}}if(e.method===`POST`&&a===`deduplication/remove`){H(e,[`target`]);let t=G((await U(e,[`deduplicationId`])).deduplicationId);return{ok:!0,removed:+!!o.deduplications.delete(t)}}if(e.method===`POST`&&a.startsWith(`groups/`)){if(H(e,[`target`]),a===`groups/pause`||a===`groups/resume`){let t=q(o,K((await U(e,[`groupId`])).groupId)),n=a===`groups/pause`,r=t.paused!==n;return t.paused=n,{ok:!0,changed:r}}let t=a.endsWith(`/remove`),n=a.includes(`/rate-limit`),r=await U(e,t?[`groupId`]:n?[`groupId`,`max`,`duration`]:[`groupId`,`concurrency`]),i=q(o,K(r.groupId));if(t){let e=n?i.rateLimit!==null:i.concurrency!==null;return n?i.rateLimit=null:i.concurrency=null,{ok:!0,removed:+!!e}}return n?i.rateLimit={max:J(r.max,`max`),duration:J(r.duration,`duration`)}:i.concurrency=J(r.concurrency,`concurrency`),{ok:!0,applied:!0}}if(e.method===`POST`&&a===`events/trim`){H(e,[`target`]);let t=X((await U(e,[`maxLength`])).maxLength,`maxLength`,0,Q),n=Math.max(0,o.events-t);return o.events-=n,{ok:!0,removed:n}}return null}var $=!1;function _e(){if($||typeof window>`u`)return()=>void 0;$=!0;let e=window.fetch,t=e.bind(window),n=`./`.replace(/\/+$/,``),r=he(),i=async(e,i)=>{let a=e instanceof Request?e:null,o=typeof e==`string`?e:e instanceof URL?e.href:a?.url??``,s=(i?.method??a?.method??`GET`).toUpperCase(),c;try{c=new URL(o,window.location.origin)}catch{return t(e,i)}let l=c.pathname;n&&(l===n||l.startsWith(`${n}/`))&&(l=l.slice(n.length)||`/`),(l===`/api`||l.startsWith(`/api/`))&&(l=l.slice(4)||`/`);let u=l.split(`/`).filter(Boolean)[0];if(!u||!ae.has(u))return t(e,i);if(u===`queue-operations`)try{let t=e instanceof Request?new Request(e,i):new Request(c,i);return await r(t,l)}catch(e){return L({ok:!1,error:`Invalid Queue operation request: ${e instanceof Error?e.message:String(e)}`},400)}if(u===`events`)return R(i?.signal??a?.signal);if(u===`healthz`||u===`live`)return new Response(`OK`,{status:200});if(s===`GET`){let e=l.replace(/\/+$/,``).split(`/`).filter(Boolean);if(e.length===4&&e[0]===`db`&&e[1]===`tables`&&e[3]===`export`)return ee(decodeURIComponent(e[2]),c.search)}return L(I(l,s,c.search))};window.fetch=i;let a=!1;return()=>{a||(a=!0,window.fetch===i&&(window.fetch=e),$=!1)}}export{_e as installDemo};
3
+ `)),s=setInterval(()=>{if(o)return;let e=r[a%r.length],s=n[a%n.length],l=JSON.stringify({queue:s,jobId:`demo-${a}`,name:s,timestamp:Date.now()});try{i.enqueue(t.encode(`event: ${e}\ndata: ${l}\n\n`))}catch{c()}a+=1},1400),e?.aborted?c():e?.addEventListener(`abort`,c,{once:!0})}});return new Response(i,{status:200,headers:{"Content-Type":`text/event-stream`}})}var z=8192,B=1783035039e3;function V(e,t,n){let r=n===-1?e.length:Math.min(e.length,n+1);return{meta:{count:e.reduce((e,t)=>e+t,0),prevTS:e.length?B:0,prevCount:e[0]??0},data:t>=r?[]:e.slice(t,r),count:e.length}}function H(e,t){let n=new URL(e.url).searchParams;for(let e of n.keys()){if(!t.includes(e))throw Error(`Unknown Queue operation option: ${e}`);if(n.getAll(e).length!==1)throw Error(`Duplicate Queue operation option: ${e}`)}if(!n.get(`target`))throw Error(`Queue operation target is required`);return n}async function U(e,t){let n=await e.text();if(new TextEncoder().encode(n).byteLength>z)throw Error(`Queue operation request body exceeds 8 KiB`);let r;try{r=JSON.parse(n)}catch{throw Error(`Queue operation request must be valid JSON`)}if(!ue(r))throw Error(`Queue operation request must be an object`);let i=Object.keys(r).find(e=>!t.includes(e));if(i)throw Error(`Unknown Queue operation body field: ${i}`);return r}function W(e){if(!e||e.length>256||e===`.`||e===`..`||!/^[\w.:-]+$/.test(e))throw Error(`Queue name must contain 1-256 letters, numbers, underscores, dashes, dots or colons`);return e}function G(e){if(typeof e!=`string`||!e||e.length>1024)throw Error(`Deduplication ID must contain 1-1024 characters`);return e}function K(e){if(typeof e!=`string`||!e||e.length>256||e.includes(`\0`))throw Error(`groupId must be a non-empty string of at most 256 characters without NUL`);return e}function q(e,t){let n=e.groups.get(t);if(n)return n;let r={jobs:0,active:0,consumedJobs:0,cooldownMs:0,rateLimit:null,concurrency:null,paused:!1,entries:[]};return e.groups.set(t,r),r}function J(e,t){return X(e,t,1,2**53-1)}function le(e){if(e!==`completed`&&e!==`failed`)throw Error(`Metrics type must be completed or failed`);return e}function Y(e,t,n,r){if(e!==null){if(!/^-?\d+$/.test(e))throw Error(`${t} must be an integer`);return X(Number(e),t,n,r)}}function X(e,t,n,r){if(!Number.isSafeInteger(e)||e<n||e>r)throw Error(`${t} must be an integer from ${n} to ${r}`);return e}function ue(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function de(){return L({ok:!1,error:`Unknown Queue operation`},404)}var fe=e=>e instanceof Error?e.message:String(e),pe={emails:{rateLimit:null,concurrency:10,activeJobs:0,consumedJobs:0,cooldownMs:0,events:1284,completed:[2,1,0,1],failed:[1,0,1],deduplications:[[`welcome:user8@example.com`,`019f252b-86c0-7000-a54e-3816c968ebf0`]]},"image-processing":{rateLimit:{max:100,duration:6e4},concurrency:4,activeJobs:2,consumedJobs:100,cooldownMs:750,events:1428,completed:[7,9,4,6,3],failed:[0,1,0,0,1],deduplications:[[`asset:hero`,`019f252b-8769-7000-bc44-cfc168232f53`]]},reports:{rateLimit:null,concurrency:2,activeJobs:0,consumedJobs:0,cooldownMs:0,events:318,completed:[1,0,2],failed:[1],deduplications:[]},notifications:{rateLimit:null,concurrency:8,activeJobs:0,consumedJobs:0,cooldownMs:0,events:612,completed:[5,4,3],failed:[],deduplications:[]}},me={rateLimit:null,concurrency:null,activeJobs:0,consumedJobs:0,cooldownMs:0,events:0,completed:[],failed:[],deduplications:[]},Z=1e5,Q=1e6;function he(){let e=new Map,t=t=>{let n=e.get(t);if(n)return n;let r=pe[t]??me,i={...r,deduplications:new Map(r.deduplications),groups:new Map};return e.set(t,i),i};return async(e,n)=>{try{let r=await ge(e,n,t);return r?L(r):de()}catch(e){return L({ok:!1,error:fe(e)},400)}}}async function ge(e,t,n){let r=t.replace(/\/+$/,``).split(`/`).filter(Boolean);if(r[0]!==`queue-operations`||r.length<3)return null;let i=W(decodeURIComponent(r[1])),a=r.slice(2).join(`/`),o=n(i);if(e.method===`GET`&&a===`limits`){let t=Y(H(e,[`target`,`maxJobs`]).get(`maxJobs`),`maxJobs`,0,1e6),n=o.rateLimit===null?-2:t!==void 0&&o.consumedJobs<t?0:o.cooldownMs;return{ok:!0,limits:{rateLimit:o.rateLimit,concurrency:o.concurrency,rateLimitTtl:n,maxed:o.concurrency!==null&&o.activeJobs>=o.concurrency}}}if(e.method===`GET`&&a===`groups`){let t=H(e,[`target`,`groupId`,`maxJobs`,`maxCount`,`start`,`end`]),n=K(t.get(`groupId`)),r=Y(t.get(`maxJobs`),`maxJobs`,0,1e6);Y(t.get(`maxCount`),`maxCount`,1,1e6);let i=Y(t.get(`start`),`start`,0,1e6)??0,a=Y(t.get(`end`),`end`,0,1e6)??i+24;if(a<i||a-i>=100)throw Error(`Group jobs page must be an inclusive range of at most 100 jobs`);let s=q(o,n),c=s.rateLimit===null?-2:r!==void 0&&s.consumedJobs<r?0:s.cooldownMs,l={};for(let e of s.entries){let t=String(e.priority);l[t]=(l[t]??0)+1}return{ok:!0,group:{jobs:s.jobs,active:s.active,totalGrouped:[...o.groups.values()].reduce((e,t)=>e+t.jobs,0),paused:s.paused,entries:s.entries.slice(i,a+1),priorityCounts:l,rateLimit:s.rateLimit,rateLimitTtl:c,concurrency:s.concurrency}}}if(e.method===`GET`&&a===`deduplication`){let t=G(H(e,[`target`,`deduplicationId`]).get(`deduplicationId`));return{ok:!0,jobId:o.deduplications.get(t)??null}}if(e.method===`GET`&&a===`metrics`){let t=H(e,[`target`,`type`,`start`,`end`]),n=le(t.get(`type`)),r=Y(t.get(`start`),`start`,0,Z)??0,i=Y(t.get(`end`),`end`,-1,Z)??-1;if(i!==-1&&i<r)throw Error(`Metrics end must be -1 or at least start`);if(i!==-1&&i-r>=10080)throw Error(`Metrics page must contain at most 10080 buckets`);return{ok:!0,metrics:V(o[n],r,i)}}if(e.method===`POST`&&a===`deduplication/remove`){H(e,[`target`]);let t=G((await U(e,[`deduplicationId`])).deduplicationId);return{ok:!0,removed:+!!o.deduplications.delete(t)}}if(e.method===`POST`&&a.startsWith(`groups/`)){if(H(e,[`target`]),a===`groups/pause`||a===`groups/resume`){let t=q(o,K((await U(e,[`groupId`])).groupId)),n=a===`groups/pause`,r=t.paused!==n;return t.paused=n,{ok:!0,changed:r}}let t=a.endsWith(`/remove`),n=a.includes(`/rate-limit`),r=await U(e,t?[`groupId`]:n?[`groupId`,`max`,`duration`]:[`groupId`,`concurrency`]),i=q(o,K(r.groupId));if(t){let e=n?i.rateLimit!==null:i.concurrency!==null;return n?i.rateLimit=null:i.concurrency=null,{ok:!0,removed:+!!e}}return n?i.rateLimit={max:J(r.max,`max`),duration:J(r.duration,`duration`)}:i.concurrency=J(r.concurrency,`concurrency`),{ok:!0,applied:!0}}if(e.method===`POST`&&a===`events/trim`){H(e,[`target`]);let t=X((await U(e,[`maxLength`])).maxLength,`maxLength`,0,Q),n=Math.max(0,o.events-t);return o.events-=n,{ok:!0,removed:n}}return null}var $=!1;function _e(){if($||typeof window>`u`)return()=>void 0;$=!0;let e=window.fetch,t=e.bind(window),n=`./`.replace(/\/+$/,``),r=he(),i=async(e,i)=>{let a=e instanceof Request?e:null,o=typeof e==`string`?e:e instanceof URL?e.href:a?.url??``,s=(i?.method??a?.method??`GET`).toUpperCase(),c;try{c=new URL(o,window.location.origin)}catch{return t(e,i)}let l=c.pathname;n&&(l===n||l.startsWith(`${n}/`))&&(l=l.slice(n.length)||`/`),(l===`/api`||l.startsWith(`/api/`))&&(l=l.slice(4)||`/`);let u=l.split(`/`).filter(Boolean)[0];if(!u||!ae.has(u))return t(e,i);if(u===`queue-operations`)try{let t=e instanceof Request?new Request(e,i):new Request(c,i);return await r(t,l)}catch(e){return L({ok:!1,error:`Invalid Queue operation request: ${e instanceof Error?e.message:String(e)}`},400)}if(u===`events`)return R(i?.signal??a?.signal);if(u===`healthz`||u===`live`)return new Response(`OK`,{status:200});if(s===`GET`){let e=l.replace(/\/+$/,``).split(`/`).filter(Boolean);if(e.length===4&&e[0]===`db`&&e[1]===`tables`&&e[3]===`export`)return ee(decodeURIComponent(e[2]),c.search)}return L(I(l,s,c.search))};window.fetch=i;let a=!1;return()=>{a||(a=!0,window.fetch===i&&(window.fetch=e),$=!1)}}export{_e as installDemo};
@@ -1 +1 @@
1
- var e={name:`bunqueue-dashboard`,version:`1.0.4`,type:`module`,description:"Web dashboard for a bunqueue server (queues, jobs, DLQ, cron, metrics, workers, live activity). Run with `bunx bunqueue-dashboard` (requires Bun 1.4.4).",packageManager:`bun@1.4.4`,bin:{"bunqueue-dashboard":`scripts/serve.ts`},files:[`dist`,`scripts/serve.ts`,`scripts/serveHandler.ts`,`scripts/servePolicy.ts`,`scripts/bunVersion.ts`,`scripts/embedded.gen.ts`,`agent`,`shared`],publishConfig:{access:`public`},license:`MIT`,author:`Egeo Minotti`,homepage:`https://egeominotti.github.io/bunqueue-dashboard/`,repository:{type:`git`,url:`git+https://github.com/egeominotti/bunqueue-dashboard.git`},bugs:{url:`https://github.com/egeominotti/bunqueue-dashboard/issues`},keywords:[`bunqueue`,`dashboard`,`queue-dashboard`,`job-queue-ui`,`bullmq-alternative`,`bull-board-alternative`,`redis-queue-ui`,`task-queue`,`background-jobs`,`dead-letter-queue`,`dlq`,`cron`,`job-monitoring`,`bun`,`react`],engines:{bun:`1.4.4`},scripts:{prepack:`bun run version:check && bun run build && bun scripts/gen-embed.ts`,start:`bun run scripts/dev.ts`,dev:`vite`,agent:`bun run agent/index.ts`,build:`bun run typecheck && vite build`,typecheck:`bun check --no-script && bun run typecheck:agent && bun run typecheck:examples && bun run typecheck:e2e`,"typecheck:agent":`bun check --no-script -p tsconfig.agent.json`,"typecheck:examples":`bun check --no-script -p tsconfig.examples.json`,size:`bun run scripts/check-bundle.ts`,"version:check":`bun run scripts/check-bun-version.ts && bun run scripts/check-playwright-image.ts`,architecture:`bun run scripts/check-file-size.ts`,"docs:dev":`vitepress dev docs`,"docs:build":`bun run scripts/build-docs.ts`,"docs:preview":`vitepress preview docs`,"build:bin":`bun run build && bun run scripts/gen-embed.ts && bun build scripts/serve.ts agent/dbReadWorker.ts agent/backup/standaloneWorker.ts --compile --minify --outfile bunqueue-dashboard`,preview:`vite preview`,test:`bun test`,"test:e2e:flow":`bun run scripts/validate-flow-runtime.ts`,"test:e2e:queue-operations":`bun run scripts/validate-queue-operations.ts`,"test:e2e:upgrade":`bun run scripts/validate-sqlite-upgrade-runtime.ts`,"test:e2e:workflow":`bun run scripts/validate-workflow-runtime.ts`,"test:e2e:postgres-fleet":`bun run scripts/validate-postgres-fleet-runtime.ts`,"test:e2e:tls":`bun run scripts/validate-tls-runtime.ts`,"test:e2e":`bun run test:e2e:tls && bun run test:e2e:upgrade && bun run test:e2e:flow && bun run test:e2e:workflow && bun run test:e2e:queue-operations && bun run test:e2e:postgres-fleet`,"test:e2e:browser:install":`playwright install chromium firefox webkit`,"test:e2e:browser:serve":`bun e2e/runtime.ts`,"test:e2e:browser:postgres-fleet":`bun run scripts/validate-postgres-fleet-dashboard-runtime.ts`,"test:e2e:browser":`bun run build && bun scripts/gen-embed.ts && playwright test`,"test:binary":`bun scripts/validate-standalone-runtime.ts ./bunqueue-dashboard`,"test:runtime":`bun scripts/validate-standalone-runtime.ts --source`,"test:soak":`bun scripts/validate-resilience.ts`,"test:package":`bun run scripts/validate-package-runtime.ts`,"test:coverage":`bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage && bun scripts/check-coverage.ts && bun scripts/check-critical-coverage.ts && bun scripts/check-test-inventory.ts`,lint:`bunx --bun --no-install oxlint .`,"lint:fix":`bunx --bun --no-install oxlint --fix .`,format:`bun fmt`,"format:check":`bun fmt --check`,check:`bun run typecheck && bun run lint && bun run format:check`,"check:fix":`bun run lint:fix && bun run format`,"audit:high":`bun audit --audit-level=high`,quality:`bun run quality:static && bun run quality:unit && bun run quality:runtime-a && bun run quality:runtime-b && bun run quality:runtime-c && bun run quality:runtime-d`,"quality:static":`bun run version:check && bun run architecture && bun run check && bun run build && bun run size && bun run docs:build && bun run audit:high`,"quality:unit":`bun run test:coverage`,"quality:runtime-a":`bun run test:e2e:tls && bun run test:e2e:upgrade && bun run test:e2e:flow && bun run test:e2e:workflow`,"quality:runtime-b":`bun run test:e2e:queue-operations && bun run test:e2e:postgres-fleet`,"quality:runtime-c":`bun run test:package && bun run test:runtime`,"quality:runtime-d":`bun run test:soak`,"typecheck:e2e":`bun check --no-script -p tsconfig.e2e.json`,"test:e2e:browser:managed":`bun run build && bun scripts/gen-embed.ts && playwright test -c playwright.managed.config.ts`,"test:e2e:docs":`bun run docs:build && playwright test -c playwright.docs.config.ts`},devDependencies:{"@ai-sdk/anthropic":`^4.0.89`,"@ai-sdk/google":`^4.0.106`,"@ai-sdk/openai":`^4.0.103`,"@ai-sdk/openai-compatible":`^3.0.79`,"@axe-core/playwright":`4.14.0`,"@fontsource-variable/inter":`^5.3.0`,"@fontsource-variable/jetbrains-mono":`^5.3.0`,"@modelcontextprotocol/sdk":`1.32.2`,"@playwright/test":`1.64.1`,"@tailwindcss/vite":`^4.3.3`,"@types/node":`^26.6.5`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^6.1.2`,ai:`7.0.154`,"bun-types":`1.4.4`,"bunqueue-v2-9-2":`npm:bunqueue@2.9.2`,"happy-dom":`^21.0.4`,mermaid:`^12.2.0`,oxlint:`^1.89.0`,"oxlint-tsgolint":`^7.0.2005`,react:`^19.3.1`,"react-dom":`^19.3.1`,"react-router-dom":`^7.18.4`,tailwindcss:`^4.3.3`,vite:`^8.3.5`,vitepress:`2.0.0-alpha.21`,"vitepress-plugin-llms":`^1.14.0`,zod:`^4.6.7`,zustand:`^5.0.16`},overrides:{"brace-expansion":`^5.0.12`,dompurify:`^3.4.17`,"fast-uri":`^3.1.9`,"ip-address":`^10.7.5`,"markdown-it":`^14.3.3`,nanoid:`^3.3.20`,postcss:`^8.5.32`,"proxy-addr":`^2.0.8`,"source-map-js":`^1.2.2`,vue:`^3.5.44`},dependencies:{bunqueue:`2.9.20`,msgpackr:`^2.1.2`}};export{e as t};
1
+ var e={name:`bunqueue-dashboard`,version:`1.1.0`,type:`module`,description:"Web dashboard for a bunqueue server (queues, jobs, DLQ, cron, metrics, workers, live activity). Run with `bunx bunqueue-dashboard` (requires Bun 1.4.4).",packageManager:`bun@1.4.4`,bin:{"bunqueue-dashboard":`scripts/serve.ts`},files:[`dist`,`scripts/serve.ts`,`scripts/serveHandler.ts`,`scripts/servePolicy.ts`,`scripts/bunVersion.ts`,`scripts/embedded.gen.ts`,`agent`,`shared`],publishConfig:{access:`public`},license:`MIT`,author:`Egeo Minotti`,homepage:`https://egeominotti.github.io/bunqueue-dashboard/`,repository:{type:`git`,url:`git+https://github.com/egeominotti/bunqueue-dashboard.git`},bugs:{url:`https://github.com/egeominotti/bunqueue-dashboard/issues`},keywords:[`bunqueue`,`dashboard`,`queue-dashboard`,`job-queue-ui`,`bullmq-alternative`,`bull-board-alternative`,`redis-queue-ui`,`task-queue`,`background-jobs`,`dead-letter-queue`,`dlq`,`cron`,`job-monitoring`,`bun`,`react`],engines:{bun:`1.4.4`},scripts:{prepack:`bun run version:check && bun run build && bun scripts/gen-embed.ts`,start:`bun run scripts/dev.ts`,dev:`vite`,agent:`bun run agent/index.ts`,build:`bun run typecheck && vite build`,typecheck:`bun check --no-script && bun run typecheck:agent && bun run typecheck:examples && bun run typecheck:e2e`,"typecheck:agent":`bun check --no-script -p tsconfig.agent.json`,"typecheck:examples":`bun check --no-script -p tsconfig.examples.json`,size:`bun run scripts/check-bundle.ts`,"version:check":`bun run scripts/check-bun-version.ts && bun run scripts/check-playwright-image.ts`,architecture:`bun run scripts/check-file-size.ts`,"docs:dev":`vitepress dev docs`,"docs:build":`bun run scripts/build-docs.ts`,"docs:preview":`vitepress preview docs`,"build:bin":`bun run build && bun run scripts/gen-embed.ts && bun build scripts/serve.ts agent/dbReadWorker.ts agent/backup/standaloneWorker.ts --compile --minify --outfile bunqueue-dashboard`,preview:`vite preview`,test:`bun test`,"test:e2e:flow":`bun run scripts/validate-flow-runtime.ts`,"test:e2e:queue-operations":`bun run scripts/validate-queue-operations.ts`,"test:e2e:upgrade":`bun run scripts/validate-sqlite-upgrade-runtime.ts`,"test:e2e:workflow":`bun run scripts/validate-workflow-runtime.ts`,"test:e2e:postgres-fleet":`bun run scripts/validate-postgres-fleet-runtime.ts`,"test:e2e:tls":`bun run scripts/validate-tls-runtime.ts`,"test:e2e":`bun run test:e2e:tls && bun run test:e2e:upgrade && bun run test:e2e:flow && bun run test:e2e:workflow && bun run test:e2e:queue-operations && bun run test:e2e:postgres-fleet`,"test:e2e:browser:install":`playwright install chromium firefox webkit`,"test:e2e:browser:serve":`bun e2e/runtime.ts`,"test:e2e:browser:postgres-fleet":`bun run scripts/validate-postgres-fleet-dashboard-runtime.ts`,"test:e2e:browser":`bun run build && bun scripts/gen-embed.ts && playwright test`,"test:binary":`bun scripts/validate-standalone-runtime.ts ./bunqueue-dashboard`,"test:runtime":`bun scripts/validate-standalone-runtime.ts --source`,"test:soak":`bun scripts/validate-resilience.ts`,"test:package":`bun run scripts/validate-package-runtime.ts`,"test:coverage":`bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage && bun scripts/check-coverage.ts && bun scripts/check-critical-coverage.ts && bun scripts/check-test-inventory.ts`,lint:`bunx --bun --no-install oxlint .`,"lint:fix":`bunx --bun --no-install oxlint --fix .`,format:`bun fmt`,"format:check":`bun fmt --check`,check:`bun run typecheck && bun run lint && bun run format:check`,"check:fix":`bun run lint:fix && bun run format`,"audit:high":`bun audit --audit-level=high`,quality:`bun run quality:static && bun run quality:unit && bun run quality:runtime-a && bun run quality:runtime-b && bun run quality:runtime-c && bun run quality:runtime-d`,"quality:static":`bun run version:check && bun run architecture && bun run check && bun run build && bun run size && bun run docs:build && bun run audit:high`,"quality:unit":`bun run test:coverage`,"quality:runtime-a":`bun run test:e2e:tls && bun run test:e2e:upgrade && bun run test:e2e:flow && bun run test:e2e:workflow`,"quality:runtime-b":`bun run test:e2e:queue-operations && bun run test:e2e:postgres-fleet`,"quality:runtime-c":`bun run test:package && bun run test:runtime`,"quality:runtime-d":`bun run test:soak`,"typecheck:e2e":`bun check --no-script -p tsconfig.e2e.json`,"test:e2e:browser:managed":`bun run build && bun scripts/gen-embed.ts && playwright test -c playwright.managed.config.ts`,"test:e2e:docs":`bun run docs:build && playwright test -c playwright.docs.config.ts`},devDependencies:{"@ai-sdk/anthropic":`^4.0.89`,"@ai-sdk/google":`^4.0.106`,"@ai-sdk/openai":`^4.0.103`,"@ai-sdk/openai-compatible":`^3.0.79`,"@axe-core/playwright":`4.14.0`,"@fontsource-variable/inter":`^5.3.0`,"@fontsource-variable/jetbrains-mono":`^5.3.0`,"@modelcontextprotocol/sdk":`1.32.2`,"@playwright/test":`1.64.1`,"@tailwindcss/vite":`^4.3.3`,"@types/node":`^26.6.5`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^6.1.2`,ai:`7.0.154`,"bun-types":`1.4.4`,"bunqueue-v2-9-2":`npm:bunqueue@2.9.2`,"happy-dom":`^21.0.4`,mermaid:`^12.2.0`,oxlint:`^1.89.0`,"oxlint-tsgolint":`^7.0.2005`,react:`^19.3.1`,"react-dom":`^19.3.1`,"react-router-dom":`^7.18.4`,tailwindcss:`^4.3.3`,vite:`^8.3.5`,vitepress:`2.0.0-alpha.21`,"vitepress-plugin-llms":`^1.14.0`,zod:`^4.6.7`,zustand:`^5.0.16`},overrides:{"brace-expansion":`^5.0.12`,dompurify:`^3.4.17`,"fast-uri":`^3.1.9`,"ip-address":`^10.7.5`,"markdown-it":`^14.3.3`,nanoid:`^3.3.20`,postcss:`^8.5.32`,"proxy-addr":`^2.0.8`,"source-map-js":`^1.2.2`,vue:`^3.5.44`},dependencies:{bunqueue:`2.9.20`,msgpackr:`^2.1.2`}};export{e as t};
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n,r}from"./connectionStore-B946Fhuv.js";import{a as i,i as a,s as o}from"./upstreamPaths-DQeKSxGc.js";var s=class extends Error{status;constructor(e,t){super(e),this.status=t,this.name=`BqError`}},c=3e4,l=()=>c;async function u(e,t,n,r,i=!0,a=`server`,o=[],l=c){let u=AbortSignal.timeout(l),d=r?.signal?AbortSignal.any([r.signal,u]):u,f=new Headers(n);r?.headers&&new Headers(r.headers).forEach((e,t)=>{f.set(t,e)}),r?.body!=null&&!f.has(`Content-Type`)&&f.set(`Content-Type`,`application/json`);let p;try{p=await fetch(e+t,{...r,headers:f,signal:d})}catch(e){throw u.aborted&&!r?.signal?.aborted||e?.name===`TimeoutError`?new s(`Request timed out`,0):e}if(!p.ok&&!o.includes(p.status)){let t=`HTTP ${p.status}`;try{let e=await p.json();e?.error&&(t=e.error)}catch{}throw p.status===401&&typeof window<`u`&&window.dispatchEvent(new CustomEvent(`auth:required`,{detail:{scope:a,auth:f.get(`Authorization`)??void 0,target:e}})),new s(t,p.status)}if(p.status===204)return;let m;try{m=await p.text()}catch(e){throw u.aborted&&!r?.signal?.aborted?new s(`Request timed out`,0):e}if(!m)return;let h;try{h=JSON.parse(m)}catch{throw new s(`Invalid JSON response (HTTP ${p.status})`,p.status)}if(i&&h&&typeof h==`object`&&h.ok===!1)throw new s(h.error??`Operation failed`,p.status);return h}var d=(n,r,i=!0,a=[],o=c)=>u(e(),n,t(),r,i,`server`,a,o),f=()=>r(),p=(e,t,r=c)=>u(f(),e,n(),t,!0,`agent`,[],r),m=(e,t)=>({method:e,body:t===void 0?void 0:JSON.stringify(t)}),h=3e5,ee=(e,t)=>m(e,t),g=new WeakMap,_=new WeakMap;function te(n){let r=Object.freeze({baseUrl:n?.baseUrl??e()}),i=n?n.token?{Authorization:`Bearer ${n.token}`}:{}:t();return g.set(r,Object.freeze({...i})),r}function ne(){let e=Object.freeze({baseUrl:f()});return _.set(e,Object.freeze({...n()})),e}function v(e){let t=g.get(e);if(!t)throw TypeError(`Invalid server request target.`);return t}function re(e){let t=_.get(e);if(!t)throw TypeError(`Invalid agent request target.`);return t}async function ie(e,t,n){n?.throwIfAborted();let r=await u(e.baseUrl,`/jobs/${i(t)}`,{...v(e)},n?{signal:n}:void 0);return n?.throwIfAborted(),r}var y=1e4,b=1e3,x=864e13,ae=new Set([`job.pushed`,`job.started`,`job.completed`,`job.failed`,`job.progress`,`job.stalled`]);function S(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function C(e,t,n=!1){if(typeof e!=`string`||e.length>t||!n&&e.length===0)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<32||n===127)return!1}return!0}function w(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}function T(e){return typeof e==`number`&&Number.isFinite(e)}function E(e){return w(e)&&e<=x}function D(e,t){return e===null||C(e,t)}function O(e,t,n){if(!Array.isArray(e)||e.length>t)return!1;let r=new Set;for(let t of e){if(!C(t,n)||r.has(t))return!1;r.add(t)}return!0}function k(e,t){let n=S(e),r=n&&S(n.data);if(n?.ok!==!0||!r)throw Error(`Malformed ${t} response.`);return r}function A(e){if(!Array.isArray(e))throw Error(`Malformed queue summary response.`);let t=new Set,n=[];for(let r of e){let e=S(r),i=e&&S(e.counts);if(!e||!C(e.name,256)||t.has(e.name)||typeof e.paused!=`boolean`||!i||!w(i.waiting)||!w(i.prioritized)||!w(i.active)||!w(i.completed)||!w(i.failed)||!w(i.delayed))throw Error(`Malformed queue summary response.`);t.add(e.name),n.push(r)}return n}function j(e){let t=k(e,`workers`);if(!Array.isArray(t.workers)||t.workers.length>y)throw Error(`Malformed workers response.`);let n=new Set,r=[],i=[];for(let e=0;e<t.workers.length;e++){let a=t.workers[e],o=S(a),s=o&&typeof o.id==`string`?o.id:null,c=[];o?(C(o.id,1024)?n.has(o.id)&&c.push(`duplicate id`):c.push(`id`),C(o.name,512,!0)||c.push(`name`),O(o.queues,b,256)||c.push(`queues`),(!w(o.concurrency)||o.concurrency<1)&&c.push(`concurrency`),C(o.hostname,512,!0)||c.push(`hostname`),w(o.pid)||c.push(`pid`),o.status!==`active`&&o.status!==`stale`&&c.push(`status`),E(o.registeredAt)||c.push(`registeredAt`),E(o.lastSeen)||c.push(`lastSeen`),w(o.activeJobs)||c.push(`activeJobs`),w(o.processedJobs)||c.push(`processedJobs`),w(o.failedJobs)||c.push(`failedJobs`),D(o.currentJob,1024)||c.push(`currentJob`),T(o.uptime)||c.push(`uptime`)):c.push(`entry is not an object`),s&&n.add(s),c.length>0?i.push({index:e,id:s,reason:c.join(`, `)}):r.push(a)}return{ok:!0,data:{workers:r,quarantinedWorkers:i,...Object.hasOwn(t,`stats`)?{stats:t.stats}:{}}}}function M(e){if(!C(e,2048))return!1;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function N(e){let t=k(e,`webhooks`);if(!Array.isArray(t.webhooks)||t.webhooks.length>y)throw Error(`Malformed webhooks response.`);let n=new Set,r=[];for(let e of t.webhooks){let t=S(e);if(!t||!C(t.id,1024)||n.has(t.id)||!M(t.url)||!Array.isArray(t.events)||!t.events.every(e=>ae.has(e))||t.queue!==null&&typeof t.queue!=`string`||!E(t.createdAt)||!(t.lastTriggered===null||E(t.lastTriggered))||!w(t.successCount)||!w(t.failureCount)||typeof t.enabled!=`boolean`)throw Error(`Malformed webhooks response.`);n.add(t.id),r.push(e)}return{ok:!0,data:{webhooks:r,...Object.hasOwn(t,`stats`)?{stats:t.stats}:{}}}}var P=31536e6,F=2097151,I=67108864,L=1e4,oe=[`childrenIds`,`parentId`,`failParentOnFailure`,`removeDependencyOnFailure`,`continueParentOnFailure`,`ignoreDependencyOnFailure`,`keepLogs`,`sizeLimit`,`debounceId`,`debounceTtl`],R=[`__parentId`,`__parentQueue`,`__childrenIds`,`__flowParentId`,`__flowParentIds`];function z(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`Repeat must be an object with a positive "every" interval`);let t=Object.keys(e).filter(e=>e!==`every`&&e!==`limit`);if(t.length)throw TypeError(`Unsupported repeat option(s): ${t.join(`, `)}. bunqueue v2.9.3 pattern repeats are unsafe; use the Cron API instead.`);if(!Number.isSafeInteger(e.every)||e.every<1||e.every>P)throw TypeError(`Repeat "every" must be a whole number from 1 to ${P} ms`);if(e.limit!==void 0&&(!Number.isSafeInteger(e.limit)||e.limit<1))throw TypeError(`Repeat "limit" must be a whole number of at least 1`)}function B(e){if(e!==void 0&&(typeof e!=`string`||!e||e.length>256))throw TypeError(`Job name must be a non-empty string of at most 256 characters`)}function V(e){let t=e,n=oe.filter(e=>t[e]!==void 0);if(n.length)throw TypeError(`Unsupported Bunqueue v2.9.3 enqueue option(s): ${n.join(`, `)}. Flow topology must use the atomic flow API; inert compatibility fields are not sent.`)}function H(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=R.filter(t=>Object.hasOwn(e,t));if(t.length)throw TypeError(`Job data must not contain broker-owned flow metadata: ${t.join(`, `)}. A plain enqueue with these keys would be misread as a flow child; use the atomic flow API for topology.`)}function U(e){let t=e.groupId;if(t!==void 0&&(typeof t!=`string`||!t||t.length>256||t.includes(`\0`)))throw TypeError(`groupId must be a non-empty string of at most 256 characters without NUL`);if(e.groupMaxSize!==void 0){if(t===void 0)throw TypeError(`groupMaxSize requires groupId`);if(!Number.isSafeInteger(e.groupMaxSize)||e.groupMaxSize<1)throw TypeError(`groupMaxSize must be a positive safe integer`)}if(t!==void 0&&e.priority!==void 0&&(!Number.isSafeInteger(e.priority)||e.priority<0||e.priority>F))throw TypeError(`Grouped priority must be an integer from 0 to ${F}`)}function W(e,t){let n=a(t);if(n)throw TypeError(`${e}: ${n}. The job would not be manageable through v2.9.3 HTTP.`)}function G(e){if(B(e.name),z(e.repeat),V(e),H(e.data),U(e),e.groupMaxSize!==void 0)throw TypeError(`groupMaxSize is not forwarded by Bunqueue 2.9.3 single-job HTTP; use the bulk transport`);if(e.dependsOn!==void 0&&(!Array.isArray(e.dependsOn)||!e.dependsOn.every(e=>typeof e==`string`)))throw TypeError(`dependsOn must be an array of job ID strings`);e.jobId!==void 0&&W(`jobId`,e.jobId);for(let t of e.dependsOn??[])W(`dependsOn`,t)}function K(e){let t;try{t=JSON.stringify(e)}catch{throw TypeError(`Job payload must be JSON serializable`)}if(t===void 0)throw TypeError(`Job payload must be JSON serializable`);let n;try{n=JSON.parse(t)}catch{throw TypeError(`Job payload encoding failed`)}if(typeof n!=`object`||!n||Array.isArray(n))throw TypeError(`Job payload must serialize to a JSON object`);return G(n),t}function se({jobId:e,...t}){return e===void 0?t:{...t,customId:e}}function ce(e){let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`must serialize to a JSON object`);let n=t;if(n.jobId!==void 0)throw TypeError(`serialized jobId is invalid; the bulk transport requires customId`);if(B(n.name),z(n.repeat),V(n),H(n.data),U(n),n.customId!==void 0){if(typeof n.customId!=`string`)throw TypeError(`customId must be a string`);W(`customId`,n.customId)}if(n.dependsOn!==void 0){if(!Array.isArray(n.dependsOn)||!n.dependsOn.every(e=>typeof e==`string`))throw TypeError(`dependsOn must be an array of job ID strings`);for(let e of n.dependsOn)W(`dependsOn`,e)}}function le(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);if(i<=127?n+=1:i<=2047?n+=2:i>=55296&&i<=56319&&r+1<e.length&&e.charCodeAt(r+1)>=56320&&e.charCodeAt(r+1)<=57343?(n+=4,r+=1):n+=3,n>t)return n}return n}function q(e,t,n){if(!Array.isArray(e)||e.length>1e4)return{ok:!1,error:`Bulk request must contain at most ${L} jobs`};if(!Number.isSafeInteger(t)||t<0)return{ok:!1,error:`Bulk request payload limit is invalid`};let r=11,i=n?Array(e.length):null;for(let a=0;a<e.length;a++){if(a&&(r+=1),r>t)return{ok:!1,error:`Bulk request payload exceeds the 64 MiB UTF-8 safety limit`};let o;try{o=JSON.stringify(se(e[a]))}catch{return{ok:!1,error:`Bulk request payload must be JSON serializable`}}if(o===void 0)return{ok:!1,error:`Bulk request payload must be JSON serializable`};if(r+=le(o,t-r),r>t)return{ok:!1,error:`Bulk request payload exceeds the 64 MiB UTF-8 safety limit`};if(n)try{ce(o)}catch(e){return{ok:!1,error:`Bulk job ${a+1}: ${e instanceof Error?e.message:String(e)}`}}i&&(i[a]=o)}return{ok:!0,bytes:r,body:i?`{"jobs":[${i.join(`,`)}]}`:void 0}}function ue(e,t=I){let n=q(e,t,!1);return n.ok?null:n.error}function J(e){let t=q(e,I,!0);if(!t.ok)throw TypeError(t.error);if(t.body===void 0)throw TypeError(`Bulk request payload encoding failed`);return t.body}function Y(e){if(!Array.isArray(e)||e.length>1e4)throw TypeError(`Bulk request must contain at most ${L} jobs`)}function X(e,t){if(typeof e!=`object`||!e||Array.isArray(e))throw new s(`Malformed ${t} response.`,200);return e}function Z(e,t){let n=X(e,t);if(n.ok!==!0)throw new s(`Malformed ${t} response.`,200);return n}var Q=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0;function $(e,t){if(e!==void 0)return Z(e,t)}function de(e,t){let n={...v(e)},r=(r,i,a=l())=>{let o=t?{...i,signal:i?.signal?AbortSignal.any([i.signal,t]):t}:i;return u(e.baseUrl,r,n,o,!0,`server`,[],a)};return Object.freeze({queuesPage:async(e=100,t=0)=>{if(!Q(e)||e<1||e>500||!Q(t))throw TypeError(`Invalid queue pagination.`);let n=Z(await r(`/dashboard/queues?limit=${e}&offset=${t}`),`queue page`);if(!Q(n.total)||n.offset!==t||n.limit!==e||typeof n.timestamp!=`number`||!Number.isFinite(n.timestamp)||!Array.isArray(n.queues)||n.queues.length!==Math.min(e,Math.max(0,n.total-t))||!n.queues.every(e=>{let t=X(e,`queue page`);return typeof t.name==`string`&&!!t.name&&typeof t.paused==`boolean`&&[`waiting`,`delayed`,`active`,`dlq`].every(e=>Q(t[e]))})||new Set(n.queues.map(e=>e.name)).size!==n.queues.length)throw new s(`Malformed queue page response.`,200);return n},queuesSummary:async()=>A(await r(`/queues/summary`)),overview:()=>r(`/dashboard`),counts:async e=>{let t=X(Z(await r(`/queues/${o(e)}/counts`),`queue counts`).counts,`queue counts`);if(!Object.values(t).every(Q))throw new s(`Malformed queue counts response.`,200);return{ok:!0,counts:t}},jobsList:async(e,t,n=50,i=0)=>{let a=new URLSearchParams;t?.length&&a.set(`states`,t.join(`,`)),a.set(`limit`,String(n)),a.set(`offset`,String(i));let c=Z(await r(`/queues/${o(e)}/jobs/list?${a}`),`jobs list`);if(!Array.isArray(c.jobs)||!c.jobs.every(t=>{let n=t;return typeof n==`object`&&!!n&&!Array.isArray(n)&&typeof n.id==`string`&&n.id.length>0&&(n.queue===void 0||n.queue===e)}))throw new s(`Malformed jobs list response.`,200);return{ok:!0,jobs:c.jobs}},job:async e=>{let t=X(Z(await r(`/jobs/${i(e)}`),`job`).job,`job`);if(t.id!==e)throw new s(`Malformed job response.`,200);return{ok:!0,job:t}},dlqStats:async e=>{let t=X(Z(await r(`/queues/${o(e)}/dlq/stats`),`DLQ stats`).stats,`DLQ stats`);if(!Q(t.total))throw new s(`Malformed DLQ stats response.`,200);return{ok:!0,stats:t}},dlq:async(e,t=100,n=0)=>{let i=Z(await r(`/queues/${o(e)}/dlq?limit=${t}&offset=${n}`),`DLQ list`);if(!Array.isArray(i.entries)||!Q(i.total))throw new s(`Malformed DLQ list response.`,200);for(let e of i.entries){let t=X(X(e,`DLQ list`).job,`DLQ list`);if(typeof t.id!=`string`||!t.id)throw new s(`Malformed DLQ list response.`,200)}return{ok:!0,entries:i.entries,total:i.total}},health:async()=>X(await u(e.baseUrl,`/health`,n,t?{signal:t}:void 0,!1,`server`,[503]),`health`),stats:async()=>{let e=await r(`/stats`);return X(Z(e,`server stats`).stats,`server stats`),e},workers:async()=>j(await r(`/workers`)),crons:async()=>{let e=Z(await r(`/crons`),`crons`);if(!Array.isArray(e.crons)||!e.crons.every(e=>{let t=e;return typeof t==`object`&&!!t&&!Array.isArray(t)&&typeof t.name==`string`&&!!t.name&&typeof t.queue==`string`&&!!t.queue}))throw new s(`Malformed crons response.`,200);return{ok:!0,crons:e.crons}},addJobsBulk:async(e,t)=>(Y(t),r(`/queues/${o(e)}/jobs/bulk`,{method:`POST`,body:J(t)},h)),pullBatch:(e,t,n)=>r(`/queues/${o(e)}/jobs/pull-batch`,m(`POST`,{count:t,...n?{owner:n}:{}})),heartbeatBatch:(e,t)=>r(`/jobs/heartbeat-batch`,m(`POST`,{ids:e,...t?{tokens:t}:{}})),ackBatch:(e,t)=>r(`/jobs/ack-batch`,m(`POST`,{ids:e,...t?{tokens:t}:{}})),retryJob:(e,t)=>r(`/jobs/${i(e)}/move-to-wait`,m(`POST`,t?{token:t}:{})),promoteJob:async e=>$(await r(`/jobs/${i(e)}/promote`,m(`POST`)),`promote job`),pause:async e=>$(await r(`/queues/${o(e)}/pause`,m(`POST`)),`pause queue`),resume:async e=>$(await r(`/queues/${o(e)}/resume`,m(`POST`)),`resume queue`),clean:(e,t={})=>r(`/queues/${o(e)}/clean`,m(`POST`,t))})}export{ne as _,K as a,ie as b,N as c,s as d,re as f,u as g,ee as h,ue as i,j as l,m,R as n,J as o,p,Y as r,A as s,de as t,h as u,te as v,d as x,f as y};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{h as t,t as n,u as r}from"./react-vendor-08inPAVO.js";import{o as i,t as a}from"./connectionStore-B946Fhuv.js";import{t as o,v as s}from"./targetClient-DvzvwnGp.js";import{C as c,x as l}from"./index-DwsYIYdu.js";import{a as u,n as d,t as f}from"./form-DBkslwzu.js";var p=n(),m=[``,`waiting`,`active`,`delayed`,`prioritized`,`paused`,`waiting-children`,`completed`,`failed`,`dlq`];function h(e){return e===void 0?``:new Date(e).toISOString().slice(0,16)}function g({query:e,onChange:t,failures:n=!1}){let r=i(e=>e.profiles),a=n=>t({...e,...n});return(0,p.jsxs)(l,{children:[(0,p.jsxs)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:[(0,p.jsx)(f,{label:`Search jobs`,hint:`ID, custom ID, name, queue, tag or top-level correlation ID.`,children:(0,p.jsx)(d,{value:e.text??``,onChange:e=>a({text:e.target.value}),placeholder:`Find observed jobs…`})}),(0,p.jsx)(f,{label:`Queue`,children:(0,p.jsx)(d,{value:e.queue??``,onChange:e=>a({queue:e.target.value}),placeholder:`All queues`})}),!n&&(0,p.jsx)(f,{label:`State`,children:(0,p.jsx)(u,{value:e.state??``,onChange:e=>a({state:e.target.value}),children:m.map(e=>(0,p.jsx)(`option`,{value:e,children:e||`All job states`},e))})}),(0,p.jsx)(f,{label:`Minimum priority`,children:(0,p.jsx)(d,{type:`number`,value:e.minPriority??``,onChange:e=>a({minPriority:e.target.value===``?void 0:Number(e.target.value)})})}),(0,p.jsx)(f,{label:`Created from (UTC)`,children:(0,p.jsx)(d,{type:`datetime-local`,value:h(e.createdAfter),onChange:e=>a({createdAfter:e.target.value?Date.parse(`${e.target.value}Z`):void 0})})}),(0,p.jsx)(f,{label:`Created through (UTC)`,children:(0,p.jsx)(d,{type:`datetime-local`,value:h(e.createdBefore),onChange:e=>a({createdBefore:e.target.value?Date.parse(`${e.target.value}Z`):void 0})})})]}),(0,p.jsxs)(`fieldset`,{className:`mt-4 flex flex-wrap gap-4 text-sm`,children:[(0,p.jsx)(`legend`,{className:`mb-2 text-xs text-muted`,children:`Profiles (none selected scans all)`}),r.map(t=>(0,p.jsxs)(`label`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`input`,{type:`checkbox`,checked:e.profiles?.includes(t.id)??!1,onChange:n=>a({profiles:n.target.checked?[...e.profiles??[],t.id]:e.profiles?.filter(e=>e!==t.id)})}),t.name]},t.id))]})]})}var _=e(t(),1);function v(e){let t=a(e.id);if(!t||[`baseUrl`,`agentBaseUrl`,`token`,`agentToken`,`name`].some(n=>t[n]!==e[n]))throw Error(`Source profile changed after this scan. Run a new scan before inspecting.`);if(!i.getState().activateProfile(e.id))throw Error(`Source profile no longer exists.`)}function y({row:e}){let t=r(),[n,i]=(0,_.useState)(``);return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(c,{size:`sm`,variant:`ghost`,"aria-label":`Inspect job ${e.job.id}`,onClick:()=>{try{v(e.source),t(`/job?id=${encodeURIComponent(e.job.id)}`)}catch(e){i(e instanceof Error?e.message:`Source profile changed.`)}},children:e.job.id}),n&&(0,p.jsx)(`span`,{role:`alert`,className:`text-xs text-danger`,children:n})]})}function b({report:e}){return(0,p.jsxs)(l,{children:[(0,p.jsxs)(`div`,{role:`status`,className:`text-sm text-muted`,children:[e.partial?`Partial scan`:`Scan complete`,` · `,e.inspectedJobs,` jobs inspected · `,e.scannedQueues,` queues · `,e.requests,` requests · `,e.elapsedMs,` ms. These offset-based live reads can change during scanning. Showing `,e.rows.length,` of`,` `,e.matches,` observed matches (display cap: 500).`]}),e.limitsHit.length>0&&(0,p.jsxs)(`p`,{className:`mt-2 text-sm text-warning`,children:[`Limits reached: `,e.limitsHit.join(`, `),`.`]}),(0,p.jsx)(`ul`,{className:`mt-2 space-y-1 text-xs text-muted`,children:e.coverage.map(e=>(0,p.jsxs)(`li`,{children:[e.profileName,`: `,e.status,` · `,e.queues,e.discoveredQueues===void 0?``:` of ${e.discoveredQueues}`,` queues ·`,` `,e.inspectedJobs,` jobs. `,e.errors.join(` `)]},e.profileId))})]})}function x({report:e}){return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(b,{report:e}),(0,p.jsxs)(`div`,{className:`overflow-x-auto rounded-xl border border-line`,children:[(0,p.jsxs)(`table`,{className:`w-full text-left text-sm`,children:[(0,p.jsx)(`caption`,{className:`sr-only`,children:`Observed job matches`}),(0,p.jsx)(`thead`,{className:`bg-surface-2 text-muted`,children:(0,p.jsx)(`tr`,{children:[`Job ID`,`Profile`,`Queue`,`State`,`Name`,`Priority`,`Created`].map(e=>(0,p.jsx)(`th`,{scope:`col`,className:`p-3`,children:e},e))})}),(0,p.jsx)(`tbody`,{children:e.rows.map(e=>(0,p.jsxs)(`tr`,{className:`border-t border-line`,children:[(0,p.jsx)(`td`,{className:`p-3`,children:(0,p.jsx)(y,{row:e})}),(0,p.jsx)(`td`,{className:`p-3`,children:e.source.name}),(0,p.jsx)(`td`,{className:`p-3`,children:e.queue}),(0,p.jsx)(`td`,{className:`p-3`,children:e.state}),(0,p.jsx)(`td`,{className:`p-3`,children:e.job.name??`—`}),(0,p.jsx)(`td`,{className:`p-3`,children:e.job.priority??`—`}),(0,p.jsx)(`td`,{className:`p-3`,children:e.job.createdAt?new Date(e.job.createdAt).toLocaleString():`Unknown`})]},JSON.stringify([e.source.id,e.queue,e.job.id])))})]}),e.rows.length===0&&(0,p.jsx)(`p`,{className:`p-5 text-sm text-muted`,children:`No matches observed in scanned coverage.`})]})]})}var S=`bunqueue-discovery-views-v1`,C=32768;function w(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function T(e){let t=w(e),n={};for(let e of[`text`,`queue`,`state`])typeof t[e]==`string`&&t[e]&&(n[e]=t[e]);if(Array.isArray(t.profiles)){let e=[...new Set(t.profiles.filter(e=>typeof e==`string`&&/^[a-zA-Z0-9_-]{1,64}$/u.test(e)))].slice(0,32);e.length&&(n.profiles=e)}for(let e of[`minPriority`,`createdAfter`,`createdBefore`])typeof t[e]==`number`&&Number.isFinite(t[e])&&(e===`minPriority`||Math.abs(t[e])<=864e13)&&(n[e]=t[e]);return t.includeDlq===!0&&(n.includeDlq=!0),n}function E(){try{return window.localStorage}catch{return}}function D(e=E()){try{let t=e?.getItem(S);if(!t||new TextEncoder().encode(t).length>C)return[];let n=JSON.parse(t);return!Array.isArray(n)||n.length>32?[]:n.flatMap(e=>{let t=w(e);return typeof t.name==`string`&&t.name.trim()&&t.name.length<=64?[{name:t.name.trim(),query:T(t.query)}]:[]})}catch{return[]}}function O(e,t=E()){try{if(!t||e.length>32||e.some(e=>!e.name.trim()||e.name.length>64))return!1;let n=JSON.stringify(e.map(e=>({name:e.name.trim(),query:T(e.query)})));return new TextEncoder().encode(n).length>C?!1:(t.setItem(S,n),!0)}catch{return!1}}function k(e){let t=T(e),n=new URLSearchParams;for(let[e,r]of Object.entries(t))n.set(e,Array.isArray(r)?r.join(`,`):String(r));return n.toString()}function A(e){let t=new URLSearchParams(e),n={};for(let e of[`text`,`queue`,`state`])n[e]=t.get(e);t.has(`profiles`)&&(n.profiles=t.get(`profiles`).split(`,`));for(let e of[`createdAfter`,`createdBefore`,`minPriority`]){let r=t.get(e);r?.trim()&&(n[e]=Number(r))}return n.includeDlq=t.get(`includeDlq`)===`true`,T(n)}function j(e,t,n,r=e.state){if(n.queue&&t!==n.queue||n.state&&n.state!==r||n.minPriority!==void 0&&(!Number.isFinite(e.priority)||e.priority<n.minPriority)||n.createdAfter!==void 0&&(!Number.isFinite(e.createdAt)||e.createdAt<n.createdAfter)||n.createdBefore!==void 0&&(!Number.isFinite(e.createdAt)||e.createdAt>n.createdBefore))return!1;let i=n.text?.trim().toLowerCase();if(!i)return!0;let a=e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return[e.id,e.customId,e.name,t,...e.tags??[],a.correlationId].some(e=>(typeof e==`string`||typeof e==`number`)&&String(e).toLowerCase().includes(i))}var M=Object.freeze({queues:100,jobs:5e3,requests:100,milliseconds:2e4,results:500}),N=class extends Error{};async function P(e,t,n,r={}){let i={...M};for(let e of Object.keys(i)){let t=r[e];t!==void 0&&Number.isFinite(t)&&(i[e]=Math.max(1,Math.min(i[e],Math.floor(t))))}let a=performance.now(),c=AbortSignal.timeout(i.milliseconds),l=AbortSignal.any([n,c]),u=e.filter(e=>!t.profiles?.length||t.profiles.includes(e.id)),d={rows:[],coverage:u.map(e=>({profileId:e.id,profileName:e.name,status:`skipped`,queues:0,inspectedJobs:0,errors:[]})),inspectedJobs:0,scannedQueues:0,requests:0,matches:0,partial:!1,cancelled:!1,limitsHit:[],elapsedMs:0};for(let n of t.profiles??[])e.some(e=>e.id===n)||d.coverage.push({profileId:n,profileName:n,status:`skipped`,queues:0,inspectedJobs:0,errors:[`Profile is no longer configured.`]});let f=e=>{d.limitsHit.includes(e)||d.limitsHit.push(e)},p=()=>{if(n.aborted)throw d.cancelled=!0,new N;if(c.aborted||performance.now()-a>=i.milliseconds)throw f(`milliseconds`),new N},m=async e=>{if(p(),d.requests>=i.requests)throw f(`requests`),new N;d.requests++;let t=await e();return p(),t},h=new Map;for(let[e,r]of u.entries()){let a=d.coverage[e];try{if(p(),d.requests>=i.requests){f(`requests`);break}a.status=`partial`;let e=o(s(r),l),n=0,c,u=new Set;do{let o=await m(()=>e.queuesPage(100,n));if(c!==void 0&&c!==o.total)throw Error(`Queue total changed during pagination; coverage is partial.`);c=o.total,a.discoveredQueues=c;for(let n of o.queues){if(u.has(n.name))throw Error(`Overlapping queue pages; coverage is partial.`);if(u.add(n.name),t.queue&&n.name!==t.queue)continue;if(p(),d.scannedQueues>=i.queues)throw f(`queues`),new N;d.scannedQueues++,a.queues++;let o=(e,o)=>{if(p(),d.inspectedJobs>=i.jobs)throw f(`jobs`),new N;d.inspectedJobs++,a.inspectedJobs++;let s=JSON.stringify([r.id,n.name,e.id]),c=h.get(s);if(c){o&&(c.dlq=o);return}let l=o?`dlq`:e.state??`unknown`,u={source:r,queue:n.name,state:l,job:e,...o?{dlq:o}:{}};h.set(s,u);let m=o&&t.includeDlq&&t.state===`failed`?{...t,state:void 0}:t;j(e,n.name,m,l)&&(d.matches++,d.rows.length<i.results?d.rows.push(u):f(`results`))};if(t.state!==`dlq`){let r=0;for(;;){let i=(await m(()=>e.jobsList(n.name,t.state?[t.state]:void 0,100,r))).jobs;if(i.length>100)throw Error(`Oversized jobs page.`);for(let e of i)o(e);if(i.length<100)break;r+=100}}if(t.includeDlq||t.state===`dlq`){let t=0;for(;;){let r=await m(()=>e.dlq(n.name,100,t));if(r.entries.length>100||r.entries.length===0&&t<r.total)throw Error(`Incomplete DLQ page.`);for(let e of r.entries)o(e.job,e);if(t+=r.entries.length,t>=r.total)break}}}n+=o.queues.length}while(n<c);a.status=`complete`}catch(e){if(n.aborted&&(d.cancelled=!0),c.aborted&&f(`milliseconds`),e instanceof N||l.aborted)break;a.status=a.queues?`partial`:`error`,a.errors.push(e instanceof Error&&/queue|page|pagination/i.test(e.message)?`Invalid or changing paginated response.`:`Source request failed. Check connection and authentication.`)}}return d.partial=d.cancelled||d.coverage.some(e=>e.status!==`complete`)||d.limitsHit.some(e=>e!==`results`),d.elapsedMs=Math.round(performance.now()-a),d}function F(e){let t=i(),[n,r]=(0,_.useState)(null),[o,s]=(0,_.useReducer)(e=>e+1,0),c=k(e),{profiles:l,activeProfileId:u,baseUrl:d,token:f,agentBaseUrl:p,agentToken:m}=t,h=(0,_.useMemo)(()=>({key:c,profiles:l,activeProfileId:u,baseUrl:d,token:f,agentBaseUrl:p,agentToken:m,refresh:o}),[c,l,u,d,f,p,m,o]);(0,_.useEffect)(()=>{let e=new AbortController;return P(l.map(e=>a(e.id)).filter(e=>e!==null),A(c),e.signal).then(t=>{e.signal.aborted||r({owner:h,report:t})}),()=>e.abort()},[c,l,h]);let g=n?.owner===h?n.report:null;return{report:g,loading:g===null,reload:s}}export{O as a,b as c,k as i,g as l,D as n,x as o,A as r,y as s,F as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{h as t}from"./react-vendor-08inPAVO.js";import{o as n}from"./connectionStore-B946Fhuv.js";import{D as r,I as i}from"./index-X_fHGbXZ.js";var a=e(t(),1),o=1e3,s={push:[],complete:[],fail:[],depth:[]},c=()=>typeof performance<`u`?performance.now():Date.now(),l=(e,t)=>`${e}\u0000${t}`;function u(e=60){let t=l(n(e=>e.baseUrl),n(e=>e.token)),[u,d]=(0,a.useState)(s),[f,p]=(0,a.useState)(null),[m,h]=(0,a.useState)(null),g=(0,a.useRef)(0),_=(0,a.useRef)(0),v=(0,a.useRef)(t),y=v.current===t;return(0,a.useEffect)(()=>{let n=++g.current,a=new AbortController,l=!1;v.current!==t&&(v.current=t,d(s),p(null),h(null),_.current=0);let u=r(()=>globalThis.document?.hidden??!1),f=async()=>{if(l||!u())return;l=!0;let t=c();try{let[r,c]=await Promise.all([i.overview({signal:a.signal}),i.stats({signal:a.signal})]);if(a.signal.aborted||g.current!==n)return;let l=r?.stats,u=r?.throughput,f=c?.stats;if(!l||!u||!f)throw Error(`malformed telemetry body`);if(![l.waiting,l.active,l.delayed,l.completed,l.dlq,l.totalPushed,l.totalPulled,l.totalCompleted,l.totalFailed,l.uptime,u.pushPerSec,u.completePerSec,u.failPerSec,f.waiting,f.prioritized,f.active,f.delayed,f[`waiting-children`]].every(e=>typeof e==`number`&&Number.isFinite(e)))throw Error(`malformed telemetry numeric metrics`);let m=u.pushPerSec,v=u.completePerSec,y=u.failPerSec,b=f.waiting+f.prioritized+f.active+f.delayed+f[`waiting-children`],x=_.current>0&&t-_.current>4*o;_.current=t,p(r),h(null),d(t=>{let n=x?s:t;return{push:[...n.push,m].slice(-e),complete:[...n.complete,v].slice(-e),fail:[...n.fail,y].slice(-e),depth:[...n.depth,b].slice(-e)}})}catch(e){!a.signal.aborted&&g.current===n&&h(e)}finally{l=!1}};f();let m=setInterval(f,o);return()=>{clearInterval(m),a.abort(),g.current===n&&(g.current+=1)}},[e,t]),y?{...u,latest:f,error:m}:{...s,latest:null,error:null}}function d(e,t=o){if(e.length<2)return{slope:0,label:`steady`,draining:!1};let n=e.length,r=(n-1)/2,i=e.reduce((e,t)=>e+t,0)/n,a=0,s=0;for(let t=0;t<n;t++)a+=(t-r)*(e[t]-i),s+=(t-r)**2;let c=s===0?0:a/s,l=t>0?o/t*c:c,u=l<-.05;return{slope:l,label:u?`draining`:l>.05?`accumulating`:`steady`,draining:u}}export{u as n,d as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{h as t}from"./react-vendor-08inPAVO.js";import{o as n}from"./connectionStore-B946Fhuv.js";import{D as r,I as i}from"./index-DwsYIYdu.js";var a=e(t(),1),o=1e3,s={push:[],complete:[],fail:[],depth:[]},c=()=>typeof performance<`u`?performance.now():Date.now(),l=(e,t)=>`${e}\u0000${t}`;function u(e=60){let t=l(n(e=>e.baseUrl),n(e=>e.token)),[u,d]=(0,a.useState)(s),[f,p]=(0,a.useState)(null),[m,h]=(0,a.useState)(null),g=(0,a.useRef)(0),_=(0,a.useRef)(0),v=(0,a.useRef)(t),y=v.current===t;return(0,a.useEffect)(()=>{let n=++g.current,a=new AbortController,l=!1;v.current!==t&&(v.current=t,d(s),p(null),h(null),_.current=0);let u=r(()=>globalThis.document?.hidden??!1),f=async()=>{if(l||!u())return;l=!0;let t=c();try{let[r,c]=await Promise.all([i.overview({signal:a.signal}),i.stats({signal:a.signal})]);if(a.signal.aborted||g.current!==n)return;let l=r?.stats,u=r?.throughput,f=c?.stats;if(!l||!u||!f)throw Error(`malformed telemetry body`);if(![l.waiting,l.active,l.delayed,l.completed,l.dlq,l.totalPushed,l.totalPulled,l.totalCompleted,l.totalFailed,l.uptime,u.pushPerSec,u.completePerSec,u.failPerSec,f.waiting,f.prioritized,f.active,f.delayed,f[`waiting-children`]].every(e=>typeof e==`number`&&Number.isFinite(e)))throw Error(`malformed telemetry numeric metrics`);let m=u.pushPerSec,v=u.completePerSec,y=u.failPerSec,b=f.waiting+f.prioritized+f.active+f.delayed+f[`waiting-children`],x=_.current>0&&t-_.current>4*o;_.current=t,p(r),h(null),d(t=>{let n=x?s:t;return{push:[...n.push,m].slice(-e),complete:[...n.complete,v].slice(-e),fail:[...n.fail,y].slice(-e),depth:[...n.depth,b].slice(-e)}})}catch(e){!a.signal.aborted&&g.current===n&&h(e)}finally{l=!1}};f();let m=setInterval(f,o);return()=>{clearInterval(m),a.abort(),g.current===n&&(g.current+=1)}},[e,t]),y?{...u,latest:f,error:m}:{...s,latest:null,error:null}}function d(e,t=o){if(e.length<2)return{slope:0,label:`steady`,draining:!1};let n=e.length,r=(n-1)/2,i=e.reduce((e,t)=>e+t,0)/n,a=0,s=0;for(let t=0;t<n;t++)a+=(t-r)*(e[t]-i),s+=(t-r)**2;let c=s===0?0:a/s,l=t>0?o/t*c:c,u=l<-.05;return{slope:l,label:u?`draining`:l>.05?`accumulating`:`steady`,draining:u}}export{u as n,d as t};
package/dist/favicon.svg CHANGED
@@ -1,27 +1,16 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" fill="none">
2
- <title>bunqueue</title>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48" role="img" aria-label="bunqueue">
3
2
  <defs>
4
- <linearGradient id="box" x1="0" y1="0" x2="1" y2="1">
5
- <stop offset="0%" stop-color="#f9a8d4"/>
6
- <stop offset="100%" stop-color="#ec4899"/>
7
- </linearGradient>
8
- <linearGradient id="ear" x1="0" y1="0" x2="1" y2="1">
9
- <stop offset="0%" stop-color="#fce7f3"/>
10
- <stop offset="100%" stop-color="#fbcfe8"/>
3
+ <linearGradient id="bq" x1="0" y1="0" x2="1" y2="1">
4
+ <stop offset="0" stop-color="#ff4f9f"/>
5
+ <stop offset="1" stop-color="#d3156d"/>
11
6
  </linearGradient>
12
7
  </defs>
13
- <rect x="2" y="2" width="96" height="96" rx="24" fill="url(#box)"/>
14
- <g transform="translate(50,52) scale(0.86)">
15
- <ellipse cx="-16" cy="-32" rx="8" ry="20" fill="#ffffff" opacity="0.92"/>
16
- <ellipse cx="-16" cy="-32" rx="4" ry="14" fill="url(#ear)"/>
17
- <ellipse cx="16" cy="-32" rx="8" ry="20" fill="#ffffff" opacity="0.92"/>
18
- <ellipse cx="16" cy="-32" rx="4" ry="14" fill="url(#ear)"/>
19
- <circle cx="0" cy="0" r="28" fill="#ffffff" opacity="0.97"/>
20
- <ellipse cx="-10" cy="-4" rx="5" ry="6" fill="#18181b"/>
21
- <ellipse cx="10" cy="-4" rx="5" ry="6" fill="#18181b"/>
22
- <circle cx="-8" cy="-6" r="2" fill="#ffffff"/>
23
- <circle cx="12" cy="-6" r="2" fill="#ffffff"/>
24
- <ellipse cx="0" cy="8" rx="4" ry="3" fill="#be185d"/>
25
- <path d="M -6 14 Q 0 20 6 14" stroke="#be185d" stroke-width="2.5" fill="none" stroke-linecap="round"/>
8
+ <rect width="48" height="48" rx="11" fill="url(#bq)"/>
9
+ <g transform="translate(8,8) scale(0.6667)">
10
+ <g fill="none" stroke="#fff" stroke-width="4.7" stroke-linecap="round" stroke-linejoin="round">
11
+ <rect x="13" y="8" width="20" height="20" rx="6.6"/>
12
+ <path d="M31 26V39.5"/>
13
+ </g>
14
+ <circle cx="31" cy="40" r="4" fill="#fff"/>
26
15
  </g>
27
16
  </svg>
package/dist/index.html CHANGED
@@ -49,15 +49,16 @@
49
49
  content="Fully drive a bunqueue server from one UI: queues, jobs, DLQ, cron, webhooks, workers, and start/stop/restart. Live demo, no signup."
50
50
  />
51
51
  <meta name="twitter:image" content="https://egeominotti.github.io/bunqueue-dashboard/og.png" />
52
- <script type="module" crossorigin src="./assets/index-X_fHGbXZ.js"></script>
52
+ <script type="module" crossorigin src="./assets/index-DwsYIYdu.js"></script>
53
53
  <link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-XKyaHtl9.js">
54
54
  <link rel="modulepreload" crossorigin href="./assets/react-vendor-08inPAVO.js">
55
55
  <link rel="modulepreload" crossorigin href="./assets/connectionStore-B946Fhuv.js">
56
56
  <link rel="modulepreload" crossorigin href="./assets/upstreamPaths-DQeKSxGc.js">
57
+ <link rel="modulepreload" crossorigin href="./assets/targetClient-DvzvwnGp.js">
57
58
  <link rel="modulepreload" crossorigin href="./assets/icons-BIT5aq1c.js">
58
59
  <link rel="modulepreload" crossorigin href="./assets/StatusBadge-D-mexaga.js">
59
60
  <link rel="modulepreload" crossorigin href="./assets/api-CCgfskjt.js">
60
- <link rel="stylesheet" crossorigin href="./assets/index-DR8flo6r.css">
61
+ <link rel="stylesheet" crossorigin href="./assets/index-D7iDxOBp.css">
61
62
  </head>
62
63
  <body>
63
64
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue-dashboard",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "type": "module",
5
5
  "description": "Web dashboard for a bunqueue server (queues, jobs, DLQ, cron, metrics, workers, live activity). Run with `bunx bunqueue-dashboard` (requires Bun 1.4.4).",
6
6
  "packageManager": "bun@1.4.4",