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.
- package/README.md +173 -360
- package/agent/queue/validation.ts +6 -3
- package/dist/.vite/manifest.json +177 -82
- package/dist/assets/AddJob-jmrtBSrz.js +3 -0
- package/dist/assets/{Alerts-Lyzbq0qw.js → Alerts-DrwYvhbk.js} +1 -1
- package/dist/assets/{Benchmark-B4NfYkAi.js → Benchmark-7ULYlqmK.js} +1 -1
- package/dist/assets/{BulkAddJobs-BAN5wT8A.js → BulkAddJobs-C2sxF-St.js} +3 -3
- package/dist/assets/{Cron-Bz46oVXB.js → Cron-BY9EGj2n.js} +1 -1
- package/dist/assets/{CronManager-Cl5RW2cB.js → CronManager-CZvC_uox.js} +1 -1
- package/dist/assets/Database-B1Dx5OV2.js +3 -0
- package/dist/assets/{Diagnostics-DuzTPfyb.js → Diagnostics-D1LEl6O4.js} +1 -1
- package/dist/assets/{Dlq-D8s-NhV2.js → Dlq-CPxeigKg.js} +1 -1
- package/dist/assets/{DlqControl-DDxRMM8i.js → DlqControl-Dhcz7LY7.js} +1 -1
- package/dist/assets/DlqPro-CW80tQdN.js +1 -0
- package/dist/assets/FailureDiagnostics-DkLd6szC.js +1 -0
- package/dist/assets/{Fleet-BAziMWfo.js → Fleet-CsscadVQ.js} +1 -1
- package/dist/assets/Flows-Bzq3onQ3.js +2 -0
- package/dist/assets/GlobalSearch-CeCvA6Tm.js +1 -0
- package/dist/assets/{JobInspector-BXuXxDwR.js → JobInspector-nTUU1VOU.js} +2 -2
- package/dist/assets/{Jobs-pQBmffni.js → Jobs-OwKndzhg.js} +1 -1
- package/dist/assets/{JobsPro-k20Pas24.js → JobsPro-CSHP2AYC.js} +1 -1
- package/dist/assets/{Logs-DA4JFvpM.js → Logs-CiYuY8ix.js} +1 -1
- package/dist/assets/{LogsPro-hna5L6sP.js → LogsPro-BA-wZ8Dr.js} +1 -1
- package/dist/assets/{McpServer-Cqem-L3z.js → McpServer-BvOGxNnE.js} +1 -1
- package/dist/assets/MetricHistory-Dmu-XqaO.js +1 -0
- package/dist/assets/{Metrics-CJ9dW0me.js → Metrics-BF38GgYm.js} +1 -1
- package/dist/assets/{MetricsPro-BslYrx1A.js → MetricsPro-DHPmT4Md.js} +1 -1
- package/dist/assets/MonitoringSetup-60_ib3rf.js +3 -0
- package/dist/assets/{Overview-Cmg_2NAt.js → Overview-DBLxV_vL.js} +1 -1
- package/dist/assets/{Pagination-WVfHLHDS.js → Pagination-CmVnmrFt.js} +1 -1
- package/dist/assets/{QueueActions-BQf1-g5m.js → QueueActions-uNol2MD7.js} +1 -1
- package/dist/assets/QueueControl-DbQwvvtX.js +1 -0
- package/dist/assets/{QueueDetail-DfRY4jS4.js → QueueDetail-CA33Kebs.js} +1 -1
- package/dist/assets/{QueueDetailPro-CpSMSo8A.js → QueueDetailPro-AUf6FktH.js} +1 -1
- package/dist/assets/{Queues-C5lElTjp.js → Queues-C_KeSyQs.js} +1 -1
- package/dist/assets/{QueuesOverview-DRohFtuC.js → QueuesOverview-DQ6ta4wA.js} +1 -1
- package/dist/assets/{S3Backup-DUHmp2Xw.js → S3Backup-BgPBXJVZ.js} +1 -1
- package/dist/assets/{S3BackupPro-Cr2ZJZkw.js → S3BackupPro-BUzcmhnj.js} +3 -3
- package/dist/assets/{ServerControl-m58ooJT2.js → ServerControl-WUZjdjPX.js} +1 -1
- package/dist/assets/{Settings-DXsjoOqD.js → Settings-Dwh79r-B.js} +1 -1
- package/dist/assets/{Usage-CY2uEJEu.js → Usage-DeWofLpa.js} +1 -1
- package/dist/assets/{UsagePro-DtlB1dJc.js → UsagePro-BQJWWwW3.js} +1 -1
- package/dist/assets/{Webhooks-B_GwTCBW.js → Webhooks-DS3xmbEi.js} +1 -1
- package/dist/assets/{Workers-Bu8aJlZf.js → Workers-DyAVvmbR.js} +1 -1
- package/dist/assets/{WorkersPro-C6gNYGfo.js → WorkersPro-BJgab7of.js} +1 -1
- package/dist/assets/Workflows-BLXlNIxO.js +1 -0
- package/dist/assets/bqQueueOperationsRepository-BXoBdFQc.js +1 -0
- package/dist/assets/exportFile-B6puuPQx.js +2 -0
- package/dist/assets/index-D7iDxOBp.css +1 -0
- package/dist/assets/index-DwsYIYdu.js +8 -0
- package/dist/assets/{install-hFu5e6YM.js → install-DVeS3d31.js} +2 -2
- package/dist/assets/{package-Bb3FkjoS.js → package-D11d0FBn.js} +1 -1
- package/dist/assets/targetClient-DvzvwnGp.js +1 -0
- package/dist/assets/useDiscovery-BbWXsy6R.js +1 -0
- package/dist/assets/{useThroughputSeries-BN5QmKPt.js → useThroughputSeries-DQo7JaT-.js} +1 -1
- package/dist/favicon.svg +11 -22
- package/dist/index.html +3 -2
- package/package.json +1 -1
- package/scripts/embedded.gen.ts +146 -132
- package/dist/assets/AddJob-Dgjlhzn2.js +0 -3
- package/dist/assets/Database-CeUKS6Nf.js +0 -3
- package/dist/assets/DlqPro-xj-MM6u8.js +0 -1
- package/dist/assets/Flows-BFUMTSWv.js +0 -2
- package/dist/assets/QueueControl-BiMM0jLp.js +0 -1
- package/dist/assets/Workflows-ClF4YzhW.js +0 -1
- package/dist/assets/exportFile-C7xhE8Yh.js +0 -2
- package/dist/assets/index-DR8flo6r.css +0 -1
- 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=
|
|
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
|
|
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-
|
|
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
|
|
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="
|
|
5
|
-
<stop offset="0
|
|
6
|
-
<stop offset="
|
|
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
|
|
14
|
-
<g transform="translate(
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<circle cx="
|
|
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-
|
|
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-
|
|
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
|
|
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",
|