bunqueue-dashboard 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +62 -62
- package/dist/assets/{AddJob-ytpBLTCJ.js → AddJob-Cih9F84t.js} +1 -1
- package/dist/assets/{Alerts-C39RrGbQ.js → Alerts-Dp4Vclez.js} +1 -1
- package/dist/assets/{Benchmark-CM60tHbf.js → Benchmark-X_gdZun5.js} +1 -1
- package/dist/assets/{BulkAddJobs-BjL-xcQy.js → BulkAddJobs-CXTpYMZf.js} +1 -1
- package/dist/assets/{CopilotPanel-BGK1rw-V.js → CopilotPanel-CIXpcwkH.js} +1 -1
- package/dist/assets/{Cron-s1e-jgOo.js → Cron-DUHkse77.js} +1 -1
- package/dist/assets/{CronManager-BostU7BX.js → CronManager-BeYrLK2E.js} +1 -1
- package/dist/assets/{Database-ZluStWMz.js → Database-CXPb3XGr.js} +1 -1
- package/dist/assets/{Diagnostics-C0N5z5j-.js → Diagnostics-DDtoiDYT.js} +1 -1
- package/dist/assets/{Dlq-CtcLzs-b.js → Dlq-CX_uRblW.js} +1 -1
- package/dist/assets/{DlqControl-B_Z8KKn5.js → DlqControl-CazFmSEd.js} +1 -1
- package/dist/assets/{DlqPro-B68en6AG.js → DlqPro-HSffdtLJ.js} +1 -1
- package/dist/assets/{Flows-CD_bkCBM.js → Flows-CGmyghKF.js} +1 -1
- package/dist/assets/{JobInspector-DwRtyMz0.js → JobInspector-B9i1HnG5.js} +1 -1
- package/dist/assets/{Jobs-BUtcBKKk.js → Jobs-BZGtMnJI.js} +1 -1
- package/dist/assets/{JobsPro-BK_xd4ji.js → JobsPro-tmEN8f-P.js} +1 -1
- package/dist/assets/{Logs-CmVODYCI.js → Logs-DxUD9V2A.js} +1 -1
- package/dist/assets/{LogsPro-CJ-Il3LP.js → LogsPro-BTQhvPKj.js} +1 -1
- package/dist/assets/{McpServer-dMjyJKgT.js → McpServer-D5rwBg74.js} +1 -1
- package/dist/assets/{Metrics-Dsbeplz-.js → Metrics-CSPpBf1m.js} +1 -1
- package/dist/assets/{MetricsPro-BqxurxrJ.js → MetricsPro-DSn-3qNT.js} +1 -1
- package/dist/assets/{Overview-DH9C2dsf.js → Overview-StvHYRZ5.js} +1 -1
- package/dist/assets/{Pagination-DpxiBnt8.js → Pagination-eotgGQf9.js} +1 -1
- package/dist/assets/{QueueActions-D_QGBaVm.js → QueueActions-CibRLzrz.js} +1 -1
- package/dist/assets/{QueueControl-V0DJ6qk6.js → QueueControl-DwYNcMfI.js} +1 -1
- package/dist/assets/{QueueDetail-BgKAMJqf.js → QueueDetail-NMfKwj6E.js} +1 -1
- package/dist/assets/{QueueDetailPro-BkHYzGiq.js → QueueDetailPro-C8SBjX09.js} +1 -1
- package/dist/assets/{Queues-2_v7DcNi.js → Queues-BeTAi8V8.js} +1 -1
- package/dist/assets/{QueuesOverview-BySSkmB4.js → QueuesOverview-BfQO8NS4.js} +1 -1
- package/dist/assets/{S3Backup-CPADzKQE.js → S3Backup-BYkAtONl.js} +1 -1
- package/dist/assets/{S3BackupPro-CSrQYIDL.js → S3BackupPro-BP1Ch54R.js} +1 -1
- package/dist/assets/{ServerControl-C0tI1VDx.js → ServerControl-C85jYgyN.js} +1 -1
- package/dist/assets/{Settings-CSzoM5up.js → Settings-DjP28c_5.js} +1 -1
- package/dist/assets/{Usage-B4B7tmrc.js → Usage-DECeEsO2.js} +1 -1
- package/dist/assets/{UsagePro-CCBpgSDy.js → UsagePro-CD7dgt3d.js} +1 -1
- package/dist/assets/{Webhooks-aJz-GisQ.js → Webhooks-Ct-x8DD1.js} +1 -1
- package/dist/assets/{Workers-Bg8xKjkg.js → Workers-lP1BXHFq.js} +1 -1
- package/dist/assets/{WorkersPro-BOOCrXf8.js → WorkersPro-CAUqy3Cp.js} +1 -1
- package/dist/assets/{index-Bn2R06qm.js → index-Dr__4DsT.js} +3 -3
- package/dist/assets/install-DPCcfOYo.js +3 -0
- package/dist/assets/{useThroughputSeries-tb26_lkb.js → useThroughputSeries-Bpyg6Jaq.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/scripts/embedded.gen.ts +120 -120
- package/dist/assets/install-CUS8Kijb.js +0 -3
package/dist/.vite/manifest.json
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
"_react-vendor-Bjui4wS4.js"
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
|
-
"_Pagination-
|
|
11
|
-
"file": "assets/Pagination-
|
|
10
|
+
"_Pagination-eotgGQf9.js": {
|
|
11
|
+
"file": "assets/Pagination-eotgGQf9.js",
|
|
12
12
|
"name": "Pagination",
|
|
13
13
|
"imports": [
|
|
14
14
|
"_cn-CMFYpumL.js",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"index.html"
|
|
17
17
|
]
|
|
18
18
|
},
|
|
19
|
-
"_QueueActions-
|
|
20
|
-
"file": "assets/QueueActions-
|
|
19
|
+
"_QueueActions-CibRLzrz.js": {
|
|
20
|
+
"file": "assets/QueueActions-CibRLzrz.js",
|
|
21
21
|
"name": "QueueActions",
|
|
22
22
|
"imports": [
|
|
23
23
|
"_cn-CMFYpumL.js",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"_connectionStore-Cd9-3Fw0.js"
|
|
90
90
|
]
|
|
91
91
|
},
|
|
92
|
-
"_useThroughputSeries-
|
|
93
|
-
"file": "assets/useThroughputSeries-
|
|
92
|
+
"_useThroughputSeries-Bpyg6Jaq.js": {
|
|
93
|
+
"file": "assets/useThroughputSeries-Bpyg6Jaq.js",
|
|
94
94
|
"name": "useThroughputSeries",
|
|
95
95
|
"imports": [
|
|
96
96
|
"_cn-CMFYpumL.js",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
]
|
|
101
101
|
},
|
|
102
102
|
"index.html": {
|
|
103
|
-
"file": "assets/index-
|
|
103
|
+
"file": "assets/index-Dr__4DsT.js",
|
|
104
104
|
"name": "index",
|
|
105
105
|
"src": "index.html",
|
|
106
106
|
"isEntry": true,
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
"src": "node_modules/@fontsource-variable/jetbrains-mono/files/jetbrains-mono-latin-wght-normal.woff2"
|
|
213
213
|
},
|
|
214
214
|
"src/components/copilot/CopilotPanel.tsx": {
|
|
215
|
-
"file": "assets/CopilotPanel-
|
|
215
|
+
"file": "assets/CopilotPanel-CIXpcwkH.js",
|
|
216
216
|
"name": "CopilotPanel",
|
|
217
217
|
"src": "src/components/copilot/CopilotPanel.tsx",
|
|
218
218
|
"isDynamicEntry": true,
|
|
@@ -231,13 +231,13 @@
|
|
|
231
231
|
]
|
|
232
232
|
},
|
|
233
233
|
"src/lib/demo/install.ts": {
|
|
234
|
-
"file": "assets/install-
|
|
234
|
+
"file": "assets/install-DPCcfOYo.js",
|
|
235
235
|
"name": "install",
|
|
236
236
|
"src": "src/lib/demo/install.ts",
|
|
237
237
|
"isDynamicEntry": true
|
|
238
238
|
},
|
|
239
239
|
"src/pages/Alerts.tsx": {
|
|
240
|
-
"file": "assets/Alerts-
|
|
240
|
+
"file": "assets/Alerts-Dp4Vclez.js",
|
|
241
241
|
"name": "Alerts",
|
|
242
242
|
"src": "src/pages/Alerts.tsx",
|
|
243
243
|
"isDynamicEntry": true,
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
]
|
|
251
251
|
},
|
|
252
252
|
"src/pages/Cron.tsx": {
|
|
253
|
-
"file": "assets/Cron-
|
|
253
|
+
"file": "assets/Cron-DUHkse77.js",
|
|
254
254
|
"name": "Cron",
|
|
255
255
|
"src": "src/pages/Cron.tsx",
|
|
256
256
|
"isDynamicEntry": true,
|
|
@@ -258,12 +258,12 @@
|
|
|
258
258
|
"_cn-CMFYpumL.js",
|
|
259
259
|
"_react-vendor-Bjui4wS4.js",
|
|
260
260
|
"index.html",
|
|
261
|
-
"_Pagination-
|
|
261
|
+
"_Pagination-eotgGQf9.js",
|
|
262
262
|
"_useServerActionGuard-CItj3hvh.js"
|
|
263
263
|
]
|
|
264
264
|
},
|
|
265
265
|
"src/pages/Dlq.tsx": {
|
|
266
|
-
"file": "assets/Dlq-
|
|
266
|
+
"file": "assets/Dlq-CX_uRblW.js",
|
|
267
267
|
"name": "Dlq",
|
|
268
268
|
"src": "src/pages/Dlq.tsx",
|
|
269
269
|
"isDynamicEntry": true,
|
|
@@ -272,13 +272,13 @@
|
|
|
272
272
|
"_react-vendor-Bjui4wS4.js",
|
|
273
273
|
"index.html",
|
|
274
274
|
"_form-DsUq0w8s.js",
|
|
275
|
-
"_Pagination-
|
|
275
|
+
"_Pagination-eotgGQf9.js",
|
|
276
276
|
"_flowMutationSafety-DVD1IMr-.js",
|
|
277
277
|
"src/pages/Jobs.tsx"
|
|
278
278
|
]
|
|
279
279
|
},
|
|
280
280
|
"src/pages/Jobs.tsx": {
|
|
281
|
-
"file": "assets/Jobs-
|
|
281
|
+
"file": "assets/Jobs-BZGtMnJI.js",
|
|
282
282
|
"name": "Jobs",
|
|
283
283
|
"src": "src/pages/Jobs.tsx",
|
|
284
284
|
"isDynamicEntry": true,
|
|
@@ -292,7 +292,7 @@
|
|
|
292
292
|
]
|
|
293
293
|
},
|
|
294
294
|
"src/pages/Logs.tsx": {
|
|
295
|
-
"file": "assets/Logs-
|
|
295
|
+
"file": "assets/Logs-DxUD9V2A.js",
|
|
296
296
|
"name": "Logs",
|
|
297
297
|
"src": "src/pages/Logs.tsx",
|
|
298
298
|
"isDynamicEntry": true,
|
|
@@ -301,12 +301,12 @@
|
|
|
301
301
|
"_react-vendor-Bjui4wS4.js",
|
|
302
302
|
"index.html",
|
|
303
303
|
"_form-DsUq0w8s.js",
|
|
304
|
-
"_Pagination-
|
|
304
|
+
"_Pagination-eotgGQf9.js",
|
|
305
305
|
"src/pages/Jobs.tsx"
|
|
306
306
|
]
|
|
307
307
|
},
|
|
308
308
|
"src/pages/Metrics.tsx": {
|
|
309
|
-
"file": "assets/Metrics-
|
|
309
|
+
"file": "assets/Metrics-CSPpBf1m.js",
|
|
310
310
|
"name": "Metrics",
|
|
311
311
|
"src": "src/pages/Metrics.tsx",
|
|
312
312
|
"isDynamicEntry": true,
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
]
|
|
317
317
|
},
|
|
318
318
|
"src/pages/Overview.tsx": {
|
|
319
|
-
"file": "assets/Overview-
|
|
319
|
+
"file": "assets/Overview-StvHYRZ5.js",
|
|
320
320
|
"name": "Overview",
|
|
321
321
|
"src": "src/pages/Overview.tsx",
|
|
322
322
|
"isDynamicEntry": true,
|
|
@@ -326,7 +326,7 @@
|
|
|
326
326
|
]
|
|
327
327
|
},
|
|
328
328
|
"src/pages/QueueDetail.tsx": {
|
|
329
|
-
"file": "assets/QueueDetail-
|
|
329
|
+
"file": "assets/QueueDetail-NMfKwj6E.js",
|
|
330
330
|
"name": "QueueDetail",
|
|
331
331
|
"src": "src/pages/QueueDetail.tsx",
|
|
332
332
|
"isDynamicEntry": true,
|
|
@@ -340,7 +340,7 @@
|
|
|
340
340
|
]
|
|
341
341
|
},
|
|
342
342
|
"src/pages/Queues.tsx": {
|
|
343
|
-
"file": "assets/Queues-
|
|
343
|
+
"file": "assets/Queues-BeTAi8V8.js",
|
|
344
344
|
"name": "Queues",
|
|
345
345
|
"src": "src/pages/Queues.tsx",
|
|
346
346
|
"isDynamicEntry": true,
|
|
@@ -348,11 +348,11 @@
|
|
|
348
348
|
"_cn-CMFYpumL.js",
|
|
349
349
|
"_react-vendor-Bjui4wS4.js",
|
|
350
350
|
"index.html",
|
|
351
|
-
"_Pagination-
|
|
351
|
+
"_Pagination-eotgGQf9.js"
|
|
352
352
|
]
|
|
353
353
|
},
|
|
354
354
|
"src/pages/S3Backup.tsx": {
|
|
355
|
-
"file": "assets/S3Backup-
|
|
355
|
+
"file": "assets/S3Backup-BYkAtONl.js",
|
|
356
356
|
"name": "S3Backup",
|
|
357
357
|
"src": "src/pages/S3Backup.tsx",
|
|
358
358
|
"isDynamicEntry": true,
|
|
@@ -362,7 +362,7 @@
|
|
|
362
362
|
]
|
|
363
363
|
},
|
|
364
364
|
"src/pages/Settings.tsx": {
|
|
365
|
-
"file": "assets/Settings-
|
|
365
|
+
"file": "assets/Settings-DjP28c_5.js",
|
|
366
366
|
"name": "Settings",
|
|
367
367
|
"src": "src/pages/Settings.tsx",
|
|
368
368
|
"isDynamicEntry": true,
|
|
@@ -375,7 +375,7 @@
|
|
|
375
375
|
]
|
|
376
376
|
},
|
|
377
377
|
"src/pages/Usage.tsx": {
|
|
378
|
-
"file": "assets/Usage-
|
|
378
|
+
"file": "assets/Usage-DECeEsO2.js",
|
|
379
379
|
"name": "Usage",
|
|
380
380
|
"src": "src/pages/Usage.tsx",
|
|
381
381
|
"isDynamicEntry": true,
|
|
@@ -385,7 +385,7 @@
|
|
|
385
385
|
]
|
|
386
386
|
},
|
|
387
387
|
"src/pages/Workers.tsx": {
|
|
388
|
-
"file": "assets/Workers-
|
|
388
|
+
"file": "assets/Workers-lP1BXHFq.js",
|
|
389
389
|
"name": "Workers",
|
|
390
390
|
"src": "src/pages/Workers.tsx",
|
|
391
391
|
"isDynamicEntry": true,
|
|
@@ -393,11 +393,11 @@
|
|
|
393
393
|
"_cn-CMFYpumL.js",
|
|
394
394
|
"_react-vendor-Bjui4wS4.js",
|
|
395
395
|
"index.html",
|
|
396
|
-
"_Pagination-
|
|
396
|
+
"_Pagination-eotgGQf9.js"
|
|
397
397
|
]
|
|
398
398
|
},
|
|
399
399
|
"src/pages/control/AddJob.tsx": {
|
|
400
|
-
"file": "assets/AddJob-
|
|
400
|
+
"file": "assets/AddJob-Cih9F84t.js",
|
|
401
401
|
"name": "AddJob",
|
|
402
402
|
"src": "src/pages/control/AddJob.tsx",
|
|
403
403
|
"isDynamicEntry": true,
|
|
@@ -411,7 +411,7 @@
|
|
|
411
411
|
]
|
|
412
412
|
},
|
|
413
413
|
"src/pages/control/Benchmark.tsx": {
|
|
414
|
-
"file": "assets/Benchmark-
|
|
414
|
+
"file": "assets/Benchmark-X_gdZun5.js",
|
|
415
415
|
"name": "Benchmark",
|
|
416
416
|
"src": "src/pages/control/Benchmark.tsx",
|
|
417
417
|
"isDynamicEntry": true,
|
|
@@ -425,7 +425,7 @@
|
|
|
425
425
|
]
|
|
426
426
|
},
|
|
427
427
|
"src/pages/control/BulkAddJobs.tsx": {
|
|
428
|
-
"file": "assets/BulkAddJobs-
|
|
428
|
+
"file": "assets/BulkAddJobs-CXTpYMZf.js",
|
|
429
429
|
"name": "BulkAddJobs",
|
|
430
430
|
"src": "src/pages/control/BulkAddJobs.tsx",
|
|
431
431
|
"isDynamicEntry": true,
|
|
@@ -440,7 +440,7 @@
|
|
|
440
440
|
]
|
|
441
441
|
},
|
|
442
442
|
"src/pages/control/CronManager.tsx": {
|
|
443
|
-
"file": "assets/CronManager-
|
|
443
|
+
"file": "assets/CronManager-BeYrLK2E.js",
|
|
444
444
|
"name": "CronManager",
|
|
445
445
|
"src": "src/pages/control/CronManager.tsx",
|
|
446
446
|
"isDynamicEntry": true,
|
|
@@ -450,13 +450,13 @@
|
|
|
450
450
|
"_upstreamPaths-nG8N1XAz.js",
|
|
451
451
|
"index.html",
|
|
452
452
|
"_form-DsUq0w8s.js",
|
|
453
|
-
"_Pagination-
|
|
453
|
+
"_Pagination-eotgGQf9.js",
|
|
454
454
|
"_useServerActionGuard-CItj3hvh.js",
|
|
455
455
|
"src/pages/control/AddJob.tsx"
|
|
456
456
|
]
|
|
457
457
|
},
|
|
458
458
|
"src/pages/control/Database.tsx": {
|
|
459
|
-
"file": "assets/Database-
|
|
459
|
+
"file": "assets/Database-CXPb3XGr.js",
|
|
460
460
|
"name": "Database",
|
|
461
461
|
"src": "src/pages/control/Database.tsx",
|
|
462
462
|
"isDynamicEntry": true,
|
|
@@ -466,11 +466,11 @@
|
|
|
466
466
|
"_connectionStore-Cd9-3Fw0.js",
|
|
467
467
|
"index.html",
|
|
468
468
|
"_form-DsUq0w8s.js",
|
|
469
|
-
"_Pagination-
|
|
469
|
+
"_Pagination-eotgGQf9.js"
|
|
470
470
|
]
|
|
471
471
|
},
|
|
472
472
|
"src/pages/control/Diagnostics.tsx": {
|
|
473
|
-
"file": "assets/Diagnostics-
|
|
473
|
+
"file": "assets/Diagnostics-DDtoiDYT.js",
|
|
474
474
|
"name": "Diagnostics",
|
|
475
475
|
"src": "src/pages/control/Diagnostics.tsx",
|
|
476
476
|
"isDynamicEntry": true,
|
|
@@ -481,7 +481,7 @@
|
|
|
481
481
|
]
|
|
482
482
|
},
|
|
483
483
|
"src/pages/control/DlqControl.tsx": {
|
|
484
|
-
"file": "assets/DlqControl-
|
|
484
|
+
"file": "assets/DlqControl-CazFmSEd.js",
|
|
485
485
|
"name": "DlqControl",
|
|
486
486
|
"src": "src/pages/control/DlqControl.tsx",
|
|
487
487
|
"isDynamicEntry": true,
|
|
@@ -490,14 +490,14 @@
|
|
|
490
490
|
"_react-vendor-Bjui4wS4.js",
|
|
491
491
|
"index.html",
|
|
492
492
|
"_form-DsUq0w8s.js",
|
|
493
|
-
"_Pagination-
|
|
493
|
+
"_Pagination-eotgGQf9.js",
|
|
494
494
|
"_flowMutationSafety-DVD1IMr-.js",
|
|
495
495
|
"_exportFile-C7xhE8Yh.js",
|
|
496
496
|
"src/pages/control/QueueControl.tsx"
|
|
497
497
|
]
|
|
498
498
|
},
|
|
499
499
|
"src/pages/control/DlqPro.tsx": {
|
|
500
|
-
"file": "assets/DlqPro-
|
|
500
|
+
"file": "assets/DlqPro-HSffdtLJ.js",
|
|
501
501
|
"name": "DlqPro",
|
|
502
502
|
"src": "src/pages/control/DlqPro.tsx",
|
|
503
503
|
"isDynamicEntry": true,
|
|
@@ -506,14 +506,14 @@
|
|
|
506
506
|
"_react-vendor-Bjui4wS4.js",
|
|
507
507
|
"index.html",
|
|
508
508
|
"_form-DsUq0w8s.js",
|
|
509
|
-
"_Pagination-
|
|
509
|
+
"_Pagination-eotgGQf9.js",
|
|
510
510
|
"_flowMutationSafety-DVD1IMr-.js",
|
|
511
511
|
"_exportFile-C7xhE8Yh.js",
|
|
512
512
|
"src/pages/control/QueueControl.tsx"
|
|
513
513
|
]
|
|
514
514
|
},
|
|
515
515
|
"src/pages/control/Flows.tsx": {
|
|
516
|
-
"file": "assets/Flows-
|
|
516
|
+
"file": "assets/Flows-CGmyghKF.js",
|
|
517
517
|
"name": "Flows",
|
|
518
518
|
"src": "src/pages/control/Flows.tsx",
|
|
519
519
|
"isDynamicEntry": true,
|
|
@@ -526,7 +526,7 @@
|
|
|
526
526
|
]
|
|
527
527
|
},
|
|
528
528
|
"src/pages/control/JobInspector.tsx": {
|
|
529
|
-
"file": "assets/JobInspector-
|
|
529
|
+
"file": "assets/JobInspector-B9i1HnG5.js",
|
|
530
530
|
"name": "JobInspector",
|
|
531
531
|
"src": "src/pages/control/JobInspector.tsx",
|
|
532
532
|
"isDynamicEntry": true,
|
|
@@ -543,7 +543,7 @@
|
|
|
543
543
|
]
|
|
544
544
|
},
|
|
545
545
|
"src/pages/control/JobsPro.tsx": {
|
|
546
|
-
"file": "assets/JobsPro-
|
|
546
|
+
"file": "assets/JobsPro-tmEN8f-P.js",
|
|
547
547
|
"name": "JobsPro",
|
|
548
548
|
"src": "src/pages/control/JobsPro.tsx",
|
|
549
549
|
"isDynamicEntry": true,
|
|
@@ -552,14 +552,14 @@
|
|
|
552
552
|
"_react-vendor-Bjui4wS4.js",
|
|
553
553
|
"index.html",
|
|
554
554
|
"_form-DsUq0w8s.js",
|
|
555
|
-
"_Pagination-
|
|
555
|
+
"_Pagination-eotgGQf9.js",
|
|
556
556
|
"_useServerActionGuard-CItj3hvh.js",
|
|
557
557
|
"_exportFile-C7xhE8Yh.js",
|
|
558
558
|
"_jobActions-LQD4KfCc.js"
|
|
559
559
|
]
|
|
560
560
|
},
|
|
561
561
|
"src/pages/control/LogsPro.tsx": {
|
|
562
|
-
"file": "assets/LogsPro-
|
|
562
|
+
"file": "assets/LogsPro-BTQhvPKj.js",
|
|
563
563
|
"name": "LogsPro",
|
|
564
564
|
"src": "src/pages/control/LogsPro.tsx",
|
|
565
565
|
"isDynamicEntry": true,
|
|
@@ -569,12 +569,12 @@
|
|
|
569
569
|
"_connectionStore-Cd9-3Fw0.js",
|
|
570
570
|
"index.html",
|
|
571
571
|
"_form-DsUq0w8s.js",
|
|
572
|
-
"_Pagination-
|
|
572
|
+
"_Pagination-eotgGQf9.js",
|
|
573
573
|
"src/pages/control/QueueControl.tsx"
|
|
574
574
|
]
|
|
575
575
|
},
|
|
576
576
|
"src/pages/control/McpServer.tsx": {
|
|
577
|
-
"file": "assets/McpServer-
|
|
577
|
+
"file": "assets/McpServer-D5rwBg74.js",
|
|
578
578
|
"name": "McpServer",
|
|
579
579
|
"src": "src/pages/control/McpServer.tsx",
|
|
580
580
|
"isDynamicEntry": true,
|
|
@@ -584,7 +584,7 @@
|
|
|
584
584
|
]
|
|
585
585
|
},
|
|
586
586
|
"src/pages/control/MetricsPro.tsx": {
|
|
587
|
-
"file": "assets/MetricsPro-
|
|
587
|
+
"file": "assets/MetricsPro-DSn-3qNT.js",
|
|
588
588
|
"name": "MetricsPro",
|
|
589
589
|
"src": "src/pages/control/MetricsPro.tsx",
|
|
590
590
|
"isDynamicEntry": true,
|
|
@@ -592,13 +592,13 @@
|
|
|
592
592
|
"_cn-CMFYpumL.js",
|
|
593
593
|
"_react-vendor-Bjui4wS4.js",
|
|
594
594
|
"index.html",
|
|
595
|
-
"_Pagination-
|
|
595
|
+
"_Pagination-eotgGQf9.js",
|
|
596
596
|
"_AreaChart-REK4ZsTC.js",
|
|
597
|
-
"_useThroughputSeries-
|
|
597
|
+
"_useThroughputSeries-Bpyg6Jaq.js"
|
|
598
598
|
]
|
|
599
599
|
},
|
|
600
600
|
"src/pages/control/QueueControl.tsx": {
|
|
601
|
-
"file": "assets/QueueControl-
|
|
601
|
+
"file": "assets/QueueControl-DwYNcMfI.js",
|
|
602
602
|
"name": "QueueControl",
|
|
603
603
|
"src": "src/pages/control/QueueControl.tsx",
|
|
604
604
|
"isDynamicEntry": true,
|
|
@@ -608,11 +608,11 @@
|
|
|
608
608
|
"index.html",
|
|
609
609
|
"_form-DsUq0w8s.js",
|
|
610
610
|
"_useServerActionGuard-CItj3hvh.js",
|
|
611
|
-
"_QueueActions-
|
|
611
|
+
"_QueueActions-CibRLzrz.js"
|
|
612
612
|
]
|
|
613
613
|
},
|
|
614
614
|
"src/pages/control/QueueDetailPro.tsx": {
|
|
615
|
-
"file": "assets/QueueDetailPro-
|
|
615
|
+
"file": "assets/QueueDetailPro-C8SBjX09.js",
|
|
616
616
|
"name": "QueueDetailPro",
|
|
617
617
|
"src": "src/pages/control/QueueDetailPro.tsx",
|
|
618
618
|
"isDynamicEntry": true,
|
|
@@ -623,12 +623,12 @@
|
|
|
623
623
|
"_useServerActionGuard-CItj3hvh.js",
|
|
624
624
|
"_flowMutationSafety-DVD1IMr-.js",
|
|
625
625
|
"_AreaChart-REK4ZsTC.js",
|
|
626
|
-
"_QueueActions-
|
|
627
|
-
"_useThroughputSeries-
|
|
626
|
+
"_QueueActions-CibRLzrz.js",
|
|
627
|
+
"_useThroughputSeries-Bpyg6Jaq.js"
|
|
628
628
|
]
|
|
629
629
|
},
|
|
630
630
|
"src/pages/control/QueuesOverview.tsx": {
|
|
631
|
-
"file": "assets/QueuesOverview-
|
|
631
|
+
"file": "assets/QueuesOverview-BfQO8NS4.js",
|
|
632
632
|
"name": "QueuesOverview",
|
|
633
633
|
"src": "src/pages/control/QueuesOverview.tsx",
|
|
634
634
|
"isDynamicEntry": true,
|
|
@@ -636,13 +636,13 @@
|
|
|
636
636
|
"_cn-CMFYpumL.js",
|
|
637
637
|
"_react-vendor-Bjui4wS4.js",
|
|
638
638
|
"index.html",
|
|
639
|
-
"_Pagination-
|
|
639
|
+
"_Pagination-eotgGQf9.js",
|
|
640
640
|
"_useServerActionGuard-CItj3hvh.js",
|
|
641
641
|
"_promisePool-BVfQ9n9Q.js"
|
|
642
642
|
]
|
|
643
643
|
},
|
|
644
644
|
"src/pages/control/S3BackupPro.tsx": {
|
|
645
|
-
"file": "assets/S3BackupPro-
|
|
645
|
+
"file": "assets/S3BackupPro-BP1Ch54R.js",
|
|
646
646
|
"name": "S3BackupPro",
|
|
647
647
|
"src": "src/pages/control/S3BackupPro.tsx",
|
|
648
648
|
"isDynamicEntry": true,
|
|
@@ -655,7 +655,7 @@
|
|
|
655
655
|
]
|
|
656
656
|
},
|
|
657
657
|
"src/pages/control/ServerControl.tsx": {
|
|
658
|
-
"file": "assets/ServerControl-
|
|
658
|
+
"file": "assets/ServerControl-C85jYgyN.js",
|
|
659
659
|
"name": "ServerControl",
|
|
660
660
|
"src": "src/pages/control/ServerControl.tsx",
|
|
661
661
|
"isDynamicEntry": true,
|
|
@@ -667,7 +667,7 @@
|
|
|
667
667
|
]
|
|
668
668
|
},
|
|
669
669
|
"src/pages/control/UsagePro.tsx": {
|
|
670
|
-
"file": "assets/UsagePro-
|
|
670
|
+
"file": "assets/UsagePro-CD7dgt3d.js",
|
|
671
671
|
"name": "UsagePro",
|
|
672
672
|
"src": "src/pages/control/UsagePro.tsx",
|
|
673
673
|
"isDynamicEntry": true,
|
|
@@ -677,7 +677,7 @@
|
|
|
677
677
|
]
|
|
678
678
|
},
|
|
679
679
|
"src/pages/control/Webhooks.tsx": {
|
|
680
|
-
"file": "assets/Webhooks-
|
|
680
|
+
"file": "assets/Webhooks-Ct-x8DD1.js",
|
|
681
681
|
"name": "Webhooks",
|
|
682
682
|
"src": "src/pages/control/Webhooks.tsx",
|
|
683
683
|
"isDynamicEntry": true,
|
|
@@ -686,12 +686,12 @@
|
|
|
686
686
|
"_react-vendor-Bjui4wS4.js",
|
|
687
687
|
"index.html",
|
|
688
688
|
"_form-DsUq0w8s.js",
|
|
689
|
-
"_Pagination-
|
|
689
|
+
"_Pagination-eotgGQf9.js",
|
|
690
690
|
"_useServerActionGuard-CItj3hvh.js"
|
|
691
691
|
]
|
|
692
692
|
},
|
|
693
693
|
"src/pages/control/WorkersPro.tsx": {
|
|
694
|
-
"file": "assets/WorkersPro-
|
|
694
|
+
"file": "assets/WorkersPro-CAUqy3Cp.js",
|
|
695
695
|
"name": "WorkersPro",
|
|
696
696
|
"src": "src/pages/control/WorkersPro.tsx",
|
|
697
697
|
"isDynamicEntry": true,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as e}from"./cn-CMFYpumL.js";import{g as t,l as n,r,t as i}from"./react-vendor-Bjui4wS4.js";import{i as a,o}from"./upstreamPaths-nG8N1XAz.js";import{A as s,C as c,S as l,ct as ee,ft as u,h as d,st as f,w as p}from"./index-
|
|
1
|
+
import{r as e}from"./cn-CMFYpumL.js";import{g as t,l as n,r,t as i}from"./react-vendor-Bjui4wS4.js";import{i as a,o}from"./upstreamPaths-nG8N1XAz.js";import{A as s,C as c,S as l,ct as ee,ft as u,h as d,st as f,w as p}from"./index-Dr__4DsT.js";import{a as m,n as h,o as g,t as _}from"./form-DsUq0w8s.js";import{r as te}from"./useServerActionGuard-CItj3hvh.js";var v=e(t(),1),y=i(),b=e=>e==null?``:String(e),x=365*24*60*60*1e3,S=1440*60*1e3,ne=10*1024*1024,C=10*1024*1024;function w(e,t=1/0){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 T(e){return e.length>10485760||w(e,10485760)>10485760?`Job data is too large (maximum 10 MiB UTF-8 / 10,485,760 characters)`:null}function E(e){let t=T(e);if(t)return{ok:!1,kind:`size`,msg:t};let n;try{n=JSON.parse(e)}catch(e){return{ok:!1,kind:`json`,msg:`Invalid JSON: ${e.message}`}}let r=JSON.stringify(n);return r.length>10485760||w(r,10485760)>10485760?{ok:!1,kind:`size`,msg:`Job data is too large after JSON encoding (maximum 10 MiB UTF-8)`}:{ok:!0,data:n}}function re(e){let t=[{key:`priority`,label:`Priority`,min:-1e6,max:1e6,integer:!0},{key:`delay`,label:`Delay`,min:0,max:x,integer:!0},{key:`maxAttempts`,label:`Max attempts`,min:1,max:1e3,integer:!0},{key:`backoff`,label:`Backoff`,min:0,max:S,integer:!0},{key:`timeout`,label:`Timeout`,min:0,max:S,integer:!0},{key:`ttl`,label:`TTL`,min:0,max:x,integer:!0}],n={};for(let r of t){let t=(e[r.key]??``).trim();if(!t)continue;let i=Number(t);if(!Number.isFinite(i))return{ok:!1,msg:`${r.label} must be a number`};if(r.integer&&!Number.isSafeInteger(i))return{ok:!1,msg:`${r.label} must be a whole, safe integer`};if(i<r.min||i>r.max)return{ok:!1,msg:`${r.label} must be between ${r.min} and ${r.max}`};n[r.key]=i}return{ok:!0,options:n}}function D(e){let t=o(e);return!e&&t?`Choose a queue`:t}function ie(e,t){return e==null?t?{ok:!1,msg:`Backoff strategy needs a base delay in Backoff (ms)`}:{ok:!0,backoff:void 0}:{ok:!0,backoff:t?{type:t,delay:e}:e}}function ae(e,t){return{ok:!0,msg:`Accepted ${t} job submission${t===1?``:`s`}; server returned ${e} distinct job ID${e===1?``:`s`} (deduplication may reuse existing jobs)`}}function oe(e){if(typeof e!=`object`||!e||e.ok!==!0||typeof e.id!=`string`||!e.id||e.id.length>1024)throw Error(`Add job returned a malformed success response`);return e.id}function O(e,t){let n=e?.ids;if(typeof e!=`object`||!e||e.ok!==!0||!Array.isArray(n)||n.length!==t||n.some(e=>typeof e!=`string`||e.length===0||e.length>1024))throw Error(`Bulk add returned a malformed success response`);return n}function k(e){if(!e.trim())return{ok:!0,repeat:void 0};try{let t=JSON.parse(e);if(typeof t!=`object`||!t||Array.isArray(t))return{ok:!1,msg:`Repeat must be a JSON object`};let n=t,r=new Set([`every`,`limit`,`pattern`]),i=Object.keys(n).filter(e=>!r.has(e));if(i.length)return{ok:!1,msg:`Unknown repeat option${i.length===1?``:`s`}: ${i.join(`, `)}`};if(n.pattern!==void 0)return{ok:!1,msg:`repeat.pattern is unsafe in bunqueue v2.8.55; use repeat.every or a Cron schedule`};let a=n.every;return!Number.isSafeInteger(a)||a<=0||a>x?{ok:!1,msg:`Repeat "every" must be a whole number from 1 to ${x} ms`}:n.limit!==void 0&&(!Number.isSafeInteger(n.limit)||n.limit<1)?{ok:!1,msg:`Repeat "limit" must be a whole number of at least 1`}:{ok:!0,repeat:{every:a,...typeof n.limit==`number`?{limit:n.limit}:{}}}}catch(e){return{ok:!1,msg:`Repeat is not valid JSON: ${e.message}`}}}function se(e){let t=typeof e.backoff==`object`?e.backoff:void 0,n=e.backoffConfig??t;return{backoff:b(n?.delay??(typeof e.backoff==`number`?e.backoff:void 0)),backoffType:n?.type??``,tags:e.tags?.join(`, `)??``,groupId:e.groupId??``,ttl:b(e.ttl)}}function A(){let{data:e,error:t,refetch:i}=s(()=>f.queues(),[],{intervalMs:3e4}),o=n().state?.clone,g=o?.options??{},C=se(g),[w,T]=(0,v.useState)(o?.queue??``),[A,ce]=(0,v.useState)(o?.dataText??`{
|
|
2
2
|
"hello": "world"
|
|
3
3
|
}`),[le,ue]=(0,v.useState)(`1`),[de,fe]=(0,v.useState)(b(g.priority)),[M,pe]=(0,v.useState)(``),[N,me]=(0,v.useState)(``),[P,he]=(0,v.useState)(b(g.maxAttempts)),[F,ge]=(0,v.useState)(C.backoff),[I,_e]=(0,v.useState)(b(g.timeout)),[L,ve]=(0,v.useState)(C.ttl),[R,ye]=(0,v.useState)(``),[z,be]=(0,v.useState)(g.removeOnComplete??!1),[B,xe]=(0,v.useState)(g.removeOnFail??!1),[V,Se]=(0,v.useState)(!1),[H,Ce]=(0,v.useState)(!1),[U,we]=(0,v.useState)(C.backoffType),[W,Te]=(0,v.useState)(C.tags),[G,Ee]=(0,v.useState)(C.groupId),[K,De]=(0,v.useState)(``),[q,Oe]=(0,v.useState)(``),[J,ke]=(0,v.useState)(``),[Y,X]=(0,v.useState)(!1),[Z,Q]=(0,v.useState)(null),[Ae,$]=(0,v.useState)(null),je=te(`add-job`);(0,v.useEffect)(()=>{X(!1),Q(null),$(null)},[je.scopeKey]);let Me=async()=>{Q(null),$(null);let e=w.trim(),t=D(e);if(t){Q({ok:!1,msg:t});return}let n=E(A);if(!n.ok){n.kind===`json`?$(n.msg):Q({ok:!1,msg:n.msg});return}let r=n.data,i=re({priority:de,delay:N.trim()?``:M,maxAttempts:P,backoff:F,timeout:I,ttl:L});if(!i.ok){Q({ok:!1,msg:i.msg});return}let o=i.options.delay;if(N.trim()){let e=new Date(N).getTime();if(!Number.isFinite(e)){Q({ok:!1,msg:`Run at is not a valid date/time`});return}if(o=Math.max(0,e-Date.now()),o>x){Q({ok:!1,msg:`Run at must be within the next 365 days`});return}}let s=ie(i.options.backoff,U);if(!s.ok){Q({ok:!1,msg:s.msg});return}let c=s.backoff,l=W.split(`,`).map(e=>e.trim()).filter(Boolean),d=K.split(`,`).map(e=>e.trim()).filter(Boolean),p=R.trim();if(p){let e=a(p);if(e){Q({ok:!1,msg:`Job ID: ${e}`});return}}for(let e of d){let t=a(e);if(t){Q({ok:!1,msg:`Dependency ID "${e}": ${t}`});return}}let m=k(J);if(!m.ok){Q({ok:!1,msg:m.msg});return}let h={data:r,priority:i.options.priority,delay:o,maxAttempts:i.options.maxAttempts,backoff:c,timeout:i.options.timeout,ttl:i.options.ttl,jobId:p||void 0,removeOnComplete:z||void 0,removeOnFail:B||void 0,durable:V||void 0,lifo:H||void 0,tags:l.length?l:void 0,groupId:G.trim()||void 0,dependsOn:d.length?d:void 0,uniqueKey:q.trim()||void 0,repeat:m.repeat},g=Number(le);if(!Number.isSafeInteger(g)||g<1||g>1e4){Q({ok:!1,msg:`Count must be a whole number from 1 to 10000`});return}let _=je.begin();if(_){X(!0);try{if(g===1){let t=oe(await f.addJob(e,h));if(!_.isCurrent())return;Q({ok:!0,msg:`Accepted job ID ${t} (it may be an existing deduplicated job)`}),u.success(`Job submission accepted`,`${e} · ${t}`)}else{let t=Array.from({length:g},()=>h),n=ee(t);if(n){_.isCurrent()&&Q({ok:!1,msg:n});return}let r=O(await f.addJobsBulk(e,t),g);if(!_.isCurrent())return;let i=ae(new Set(r).size,g);Q(i),u.success(i.msg,`in ${e}`)}}catch(e){if(!_.isCurrent())return;Q({ok:!1,msg:e.message}),u.error(`Add job failed`,e.message)}finally{_.finish()&&X(!1)}}};return(0,y.jsxs)(`div`,{children:[(0,y.jsx)(d,{title:`Add Job`,description:`Enqueue a job with full options.`,actions:(0,y.jsx)(r,{to:`/jobs/bulk-add`,className:`rounded-lg border border-line px-3 py-1.5 text-sm text-muted hover:bg-surface-2 hover:text-fg`,children:`Bulk import`})}),o&&(0,y.jsx)(`div`,{className:`mb-4 flex items-center gap-2 rounded-lg border border-accent/30 bg-accent/[0.06] px-4 py-2 text-sm text-accent`,children:`Pre-filled from an existing job. Review the data and options, then enqueue a fresh job.`}),(0,y.jsxs)(`form`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-2`,onSubmit:e=>{e.preventDefault(),Me()},children:[(0,y.jsxs)(l,{children:[(0,y.jsx)(c,{title:`Job`}),(0,y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,y.jsxs)(_,{label:`Queue`,children:[(0,y.jsx)(h,{list:`queue-options`,"aria-label":`Queue`,name:`target-queue`,autoComplete:`off`,value:w,onChange:e=>T(e.target.value),placeholder:`queue name (existing or new)`}),(0,y.jsx)(`datalist`,{id:`queue-options`,children:(e?.queues??[]).map(e=>(0,y.jsx)(`option`,{value:e.name},e.name))})]}),t&&(0,y.jsxs)(`p`,{role:`status`,className:`-mt-2 text-xs text-warning`,children:[`Existing queue suggestions unavailable — `,t.message,`. You can still enter a queue name manually.`,` `,(0,y.jsx)(`button`,{type:`button`,onClick:()=>void i(),className:`font-medium underline underline-offset-2 hover:text-fg`,children:`Retry`})]}),(0,y.jsxs)(`div`,{children:[(0,y.jsx)(_,{label:`Data (JSON)`,children:(0,y.jsx)(`textarea`,{name:`job-data`,value:A,onChange:e=>ce(e.target.value),onBlur:()=>{let e=E(A);$(e.ok?null:e.msg)},maxLength:ne,spellCheck:!1,rows:7,className:`w-full rounded-lg border border-line bg-surface-2 p-3 font-mono text-sm text-fg focus:border-accent/60 focus:outline-none focus:ring-2 focus:ring-accent/30`})}),Ae&&(0,y.jsx)(`p`,{role:`alert`,className:`mt-2 text-xs text-danger`,children:Ae})]})]})]}),(0,y.jsxs)(l,{children:[(0,y.jsx)(c,{title:`Options`}),(0,y.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 md:grid-cols-3`,children:[(0,y.jsx)(_,{label:`Priority`,children:(0,y.jsx)(h,{type:`number`,min:-1e6,max:1e6,step:1,name:`priority`,value:de,onChange:e=>fe(e.target.value),placeholder:`0`})}),(0,y.jsx)(_,{label:`Delay (ms)`,children:(0,y.jsx)(h,{type:`number`,min:0,max:x,step:1,name:`delay`,value:M,onChange:e=>pe(e.target.value),placeholder:`0`,disabled:N.trim()!==``})}),(0,y.jsx)(_,{label:`Run at`,hint:N.trim()?`Overrides Delay — derived from this time (local time).`:`(local time)`,children:(0,y.jsx)(h,{type:`datetime-local`,name:`run-at`,value:N,onChange:e=>me(e.target.value)})}),(0,y.jsx)(_,{label:`Max attempts`,hint:`blank = server default`,children:(0,y.jsx)(h,{type:`number`,min:1,max:1e3,step:1,name:`max-attempts`,value:P,onChange:e=>he(e.target.value),placeholder:`3`})}),(0,y.jsx)(_,{label:`Backoff (ms)`,hint:`blank = server default`,children:(0,y.jsx)(h,{type:`number`,min:0,max:S,step:1,name:`backoff`,value:F,onChange:e=>ge(e.target.value),placeholder:`1000`})}),(0,y.jsx)(_,{label:`Backoff strategy`,hint:`flat delay unless set`,children:(0,y.jsxs)(m,{name:`backoff-strategy`,value:U,onChange:e=>we(e.target.value),children:[(0,y.jsx)(`option`,{value:``,children:`flat`}),(0,y.jsx)(`option`,{value:`fixed`,children:`fixed`}),(0,y.jsx)(`option`,{value:`exponential`,children:`exponential`})]})}),(0,y.jsx)(_,{label:`Timeout (ms)`,children:(0,y.jsx)(h,{type:`number`,min:0,max:S,step:1,name:`timeout`,value:I,onChange:e=>_e(e.target.value),placeholder:`—`})}),(0,y.jsx)(_,{label:`TTL (ms)`,hint:`blank = no expiry`,children:(0,y.jsx)(h,{type:`number`,min:0,max:x,step:1,name:`ttl`,value:L,onChange:e=>ve(e.target.value),placeholder:`—`})}),(0,y.jsx)(_,{label:`Custom job ID`,children:(0,y.jsx)(h,{name:`custom-job-id`,value:R,onChange:e=>ye(e.target.value),placeholder:`idempotency key`})})]}),(0,y.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-6`,children:[(0,y.jsx)(j,{label:`removeOnComplete`,checked:z,onChange:be}),(0,y.jsx)(j,{label:`removeOnFail`,checked:B,onChange:xe}),(0,y.jsx)(j,{label:`durable`,checked:V,onChange:Se}),(0,y.jsx)(j,{label:`lifo`,checked:H,onChange:Ce})]}),(0,y.jsxs)(`div`,{className:`mt-4 border-t border-line pt-4`,children:[(0,y.jsx)(`div`,{className:`mb-3 text-[11px] uppercase tracking-wider text-faint`,children:`Advanced`}),(0,y.jsxs)(`div`,{className:`grid grid-cols-2 gap-4 md:grid-cols-3`,children:[(0,y.jsx)(_,{label:`Tags`,hint:`comma-separated`,children:(0,y.jsx)(h,{name:`tags`,value:W,onChange:e=>Te(e.target.value),placeholder:`email, urgent`})}),(0,y.jsx)(_,{label:`Group ID`,children:(0,y.jsx)(h,{name:`group-id`,value:G,onChange:e=>Ee(e.target.value),placeholder:`—`})}),(0,y.jsx)(_,{label:`Unique key`,hint:`dedup key`,children:(0,y.jsx)(h,{name:`unique-key`,value:q,onChange:e=>Oe(e.target.value),placeholder:`—`})}),(0,y.jsx)(_,{label:`Depends on`,hint:`parent job ids, comma-separated`,children:(0,y.jsx)(h,{name:`depends-on`,value:K,onChange:e=>De(e.target.value),placeholder:`job-id-1, job-id-2`})}),(0,y.jsx)(`div`,{className:`col-span-2 md:col-span-3`,children:(0,y.jsx)(_,{label:`Repeat policy (JSON)`,hint:`v2.8.55-safe form: e.g. {"every":60000,"limit":10}. Use Cron Manager for cron patterns.`,children:(0,y.jsx)(`textarea`,{name:`repeat-policy`,value:J,onChange:e=>ke(e.target.value),rows:2,spellCheck:!1,placeholder:`{"every": 60000}`,className:`w-full rounded-lg border border-line bg-surface-2 px-3 py-2 font-mono text-xs text-fg placeholder:text-faint focus:border-accent/60 focus:outline-none focus:ring-2 focus:ring-accent/30`})})})]})]})]}),(0,y.jsxs)(`div`,{className:`flex flex-wrap items-end gap-3 lg:col-span-2`,children:[(0,y.jsx)(`div`,{className:`w-28`,children:(0,y.jsx)(_,{label:`Count`,hint:`1–10000`,children:(0,y.jsx)(h,{type:`number`,min:1,max:1e4,step:1,name:`count`,value:le,onChange:e=>ue(e.target.value)})})}),(0,y.jsx)(p,{type:`submit`,variant:`accent`,disabled:Y,children:Y?`Adding…`:`Add job`}),Z&&(0,y.jsx)(`span`,{role:Z.ok?`status`:`alert`,className:Z.ok?`text-sm text-success`:`text-sm text-danger`,children:Z.msg})]})]})]})}function j({label:e,checked:t,onChange:n}){return(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(g,{checked:t,onChange:n,label:e}),(0,y.jsx)(`span`,{className:`font-mono text-xs text-muted`,children:e})]})}export{A as AddJob,C as MAX_JOB_DATA_BYTES,ne as MAX_JOB_DATA_CHARS,O as acceptedBulkIds,E as parseJobData,k as parseRepeat,D as queueNameError,w as utf8ByteLength};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./cn-CMFYpumL.js";import{g as t,t as n}from"./react-vendor-Bjui4wS4.js";import{o as r}from"./connectionStore-Cd9-3Fw0.js";import{N as i,S as a,T as o,Y as s,et as c,h as l,mt as u,nt as d,pt as f,tt as p,u as m,v as h,w as g,x as _}from"./index-Bn2R06qm.js";import{a as v,n as y,o as b,t as x}from"./form-DsUq0w8s.js";var S=e(t(),1),C=n(),w=[`email`,`webhook`,`slack`],T=Object.keys(f),E=[`>=`,`>`,`<=`,`<`],D={error_rate:{unit:`% (0–100)`,placeholder:`e.g. 5`},p99_latency:{unit:`ms`,placeholder:`e.g. 250`},waiting:{unit:`jobs`,placeholder:`e.g. 100`},failed:{unit:`jobs`,placeholder:`e.g. 10`},dlq:{unit:`jobs`,placeholder:`e.g. 1`}},O=/^[a-zA-Z0-9_\-.:]+$/;function k(e){let t=e.name.trim();if(!T.includes(e.metric))return{ok:!1,error:`Invalid metric`,field:`metric`};if(!E.includes(e.operator))return{ok:!1,error:`Invalid operator`,field:`operator`};let n=e.metric===`p99_latency`?``:e.queue.trim();if(!t)return{ok:!1,error:`Rule name is required`,field:`name`};if(t.length>200)return{ok:!1,error:`Rule name must be 200 characters or fewer`,field:`name`};if(!e.threshold.trim())return{ok:!1,error:`Threshold is required`,field:`threshold`};let r=Number(e.threshold);return!Number.isFinite(r)||r<0?{ok:!1,error:`Threshold must be a non-negative number`,field:`threshold`}:e.metric===`error_rate`&&r>100?{ok:!1,error:`Error-rate threshold must be between 0 and 100%`,field:`threshold`}:[`waiting`,`failed`,`dlq`].includes(e.metric)&&!Number.isSafeInteger(r)?{ok:!1,error:`Job-count thresholds must be whole numbers`,field:`threshold`}:n&&(n.length>256||!O.test(n))?{ok:!1,error:`Queue contains unsupported characters or is too long`,field:`queue`}:w.includes(e.channel)?{ok:!0,rule:{name:t,metric:e.metric,operator:e.operator,threshold:r,queue:n,channel:e.channel,enabled:!0}}:{ok:!1,error:`Invalid channel type`,field:`channel`}}function A(){return typeof Notification>`u`?`unsupported`:Notification.permission}function j(){let{rules:e,addRule:t,removeRule:n,toggleRule:v}=u(),y=d(e=>e.breaching),x=d(e=>e.status),w=d(e=>e.error),T=d(e=>e.connectionIdentity),E=r(e=>c(e.baseUrl,e.token)),D=e.some(e=>e.enabled),O=T===E,k=O?y:[],j=O?x:D?`checking`:`idle`,N=O?w:null,[P,F]=(0,S.useState)(!1),[I,L]=(0,S.useState)(A);return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(l,{title:`Alerts`,description:`Threshold rules evaluated live in your browser.`,live:D&&j===`live`,actions:(0,C.jsxs)(C.Fragment,{children:[I===`granted`?(0,C.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm text-success`,children:[(0,C.jsx)(i,{className:`size-4`}),` Desktop alerts on`]}):I===`unsupported`?(0,C.jsx)(`span`,{className:`text-sm text-faint`,children:`Notifications unsupported`}):I===`denied`?(0,C.jsx)(`span`,{className:`text-sm text-faint`,children:`Desktop alerts blocked — allow notifications in browser settings`}):(0,C.jsx)(g,{size:`sm`,onClick:async()=>{L(await p())},children:`Enable desktop notifications`}),(0,C.jsx)(g,{variant:`accent`,size:`sm`,"aria-expanded":P,"aria-controls":`alert-rule-form`,onClick:()=>F(e=>!e),children:`+ Create Alert Rule`})]})}),D&&j===`checking`&&(0,C.jsx)(`p`,{role:`status`,className:`mb-4 text-sm text-muted`,children:`Checking alert metrics for the connected server…`}),D&&j===`degraded`&&(0,C.jsx)(_,{message:N??`Alert metrics are unavailable; current rule results may be stale.`}),(0,C.jsx)(`div`,{className:`mb-6 rounded-lg border border-amber-500/20 bg-amber-500/5 px-4 py-3 text-sm text-amber-400/90`,children:`Rules are evaluated in this browser while a tab is open (even backgrounded), raising an in-app toast and — if enabled — a desktop notification. bunqueue OSS has no alerting backend, so email/webhook/slack delivery still needs your own monitoring or hosted bunqueue Cloud.`}),(0,C.jsxs)(`section`,{className:`mb-8`,children:[(0,C.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Triggered Alerts`}),k.length===0?(0,C.jsx)(h,{icon:(0,C.jsx)(i,{}),title:`No triggered alerts`,hint:D?j===`live`?`All enabled rules are within their thresholds.`:j===`checking`?`Alert metrics are still being checked.`:`Alert metrics are unavailable; no all-clear result is available.`:`No enabled rules yet. Create one below.`}):(0,C.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-danger/30 bg-red-500/5`,children:(0,C.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,C.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Current`}),(0,C.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Since`})]})}),(0,C.jsx)(`tbody`,{children:k.map(e=>(0,C.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,C.jsx)(`td`,{className:`px-5 py-3 font-medium text-danger`,children:e.ruleName}),(0,C.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[e.metricLabel,` `,e.operator,` `,(0,C.jsx)(`span`,{className:`font-semibold text-fg`,children:e.threshold})]}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right tnum font-semibold text-danger`,children:Math.round(e.value*100)/100}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right text-faint`,children:m(e.at)})]},e.ruleId))})]})})]}),(0,C.jsxs)(`section`,{children:[(0,C.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Alert Rules`}),P&&(0,C.jsx)(`div`,{id:`alert-rule-form`,children:(0,C.jsx)(a,{className:`mb-4`,children:(0,C.jsx)(M,{onAdd:e=>{let n=t(e);return n.ok&&F(!1),n}})})}),e.length===0?(0,C.jsx)(h,{title:`No alert rules`,hint:`Create a rule to be notified when a threshold is crossed.`}):(0,C.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-line bg-surface`,children:(0,C.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Delivery`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Status`}),(0,C.jsx)(`th`,{className:`w-12 px-5 py-3`})]})}),(0,C.jsx)(`tbody`,{children:e.map(e=>(0,C.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,C.jsx)(`td`,{className:`px-5 py-3 font-medium text-fg`,children:e.name}),(0,C.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[f[e.metric],` `,e.operator,` `,(0,C.jsx)(`span`,{className:`font-semibold text-accent`,children:e.threshold})]}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,C.jsx)(`td`,{className:`px-5 py-3`,children:(0,C.jsx)(`span`,{className:`rounded-md bg-surface-2 px-2 py-0.5 text-xs text-muted`,children:`Browser`})}),(0,C.jsx)(`td`,{className:`px-5 py-3`,children:(0,C.jsx)(b,{checked:e.enabled,onChange:()=>v(e.id),label:`Enabled`})}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,C.jsx)(o,{"aria-label":`Delete rule ${e.name}`,onClick:()=>window.confirm(`Delete alert rule "${e.name}"?`)&&n(e.id),children:(0,C.jsx)(s,{className:`size-3.5`})})})]},e.id))})]})})]})]})}function M({onAdd:e}){let[t,n]=(0,S.useState)(``),[r,i]=(0,S.useState)(`error_rate`),[a,o]=(0,S.useState)(`>=`),[s,c]=(0,S.useState)(``),[l,u]=(0,S.useState)(``),[d,p]=(0,S.useState)(null),m=(0,S.useRef)(!1),h=(0,S.useId)(),_=e=>d?.field===e;return(0,C.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 md:grid-cols-3 lg:grid-cols-5`,children:[(0,C.jsx)(x,{label:`Name`,children:(0,C.jsx)(y,{name:`alert-rule-name`,autoComplete:`off`,maxLength:200,value:t,"aria-invalid":_(`name`),"aria-describedby":_(`name`)?h:void 0,onChange:e=>{n(e.target.value),p(null)},placeholder:`High error rate`})}),(0,C.jsx)(x,{label:`Metric`,children:(0,C.jsx)(v,{name:`alert-rule-metric`,value:r,"aria-invalid":_(`metric`),"aria-describedby":_(`metric`)?h:void 0,onChange:e=>{i(e.target.value),p(null)},children:T.map(e=>(0,C.jsx)(`option`,{value:e,children:f[e]},e))})}),(0,C.jsx)(x,{label:`Operator`,children:(0,C.jsx)(v,{name:`alert-rule-operator`,value:a,"aria-invalid":_(`operator`),"aria-describedby":_(`operator`)?h:void 0,onChange:e=>{o(e.target.value),p(null)},children:E.map(e=>(0,C.jsx)(`option`,{value:e,children:e},e))})}),(0,C.jsx)(x,{label:`Threshold`,hint:D[r].unit,children:(0,C.jsx)(y,{name:`alert-rule-threshold`,autoComplete:`off`,type:`number`,min:0,max:r===`error_rate`?100:void 0,step:[`waiting`,`failed`,`dlq`].includes(r)?1:`any`,value:s,"aria-invalid":_(`threshold`),"aria-describedby":_(`threshold`)?h:void 0,onChange:e=>{c(e.target.value),p(null)},placeholder:D[r].placeholder})}),(0,C.jsx)(x,{label:`Queue (optional)`,hint:r===`p99_latency`?`global only — latency is not per queue`:void 0,children:(0,C.jsx)(y,{name:`alert-rule-queue`,autoComplete:`off`,spellCheck:!1,maxLength:256,value:l,"aria-invalid":_(`queue`),"aria-describedby":_(`queue`)?h:void 0,onChange:e=>{u(e.target.value),p(null)},disabled:r===`p99_latency`,placeholder:r===`p99_latency`?`Global`:`All queues`,className:`disabled:cursor-not-allowed disabled:opacity-40`})}),(0,C.jsxs)(`div`,{className:`col-span-full`,children:[(0,C.jsx)(g,{variant:`accent`,disabled:!t.trim()||!s.trim(),onClick:()=>{if(m.current)return;let n=k({name:t,metric:r,operator:a,threshold:s,queue:l,channel:`email`});if(!n.ok){p({field:n.field,message:n.error});return}m.current=!0;try{let t=e(n.rule);t.ok||(m.current=!1,p({field:`name`,message:t.error}))}catch(e){m.current=!1,p({field:`name`,message:e.message})}},children:`Save rule`}),d&&(0,C.jsx)(`span`,{id:h,role:`alert`,className:`ml-3 text-xs text-danger`,children:d.message})]})]})}export{j as Alerts};
|
|
1
|
+
import{r as e}from"./cn-CMFYpumL.js";import{g as t,t as n}from"./react-vendor-Bjui4wS4.js";import{o as r}from"./connectionStore-Cd9-3Fw0.js";import{N as i,S as a,T as o,Y as s,et as c,h as l,mt as u,nt as d,pt as f,tt as p,u as m,v as h,w as g,x as _}from"./index-Dr__4DsT.js";import{a as v,n as y,o as b,t as x}from"./form-DsUq0w8s.js";var S=e(t(),1),C=n(),w=[`email`,`webhook`,`slack`],T=Object.keys(f),E=[`>=`,`>`,`<=`,`<`],D={error_rate:{unit:`% (0–100)`,placeholder:`e.g. 5`},p99_latency:{unit:`ms`,placeholder:`e.g. 250`},waiting:{unit:`jobs`,placeholder:`e.g. 100`},failed:{unit:`jobs`,placeholder:`e.g. 10`},dlq:{unit:`jobs`,placeholder:`e.g. 1`}},O=/^[a-zA-Z0-9_\-.:]+$/;function k(e){let t=e.name.trim();if(!T.includes(e.metric))return{ok:!1,error:`Invalid metric`,field:`metric`};if(!E.includes(e.operator))return{ok:!1,error:`Invalid operator`,field:`operator`};let n=e.metric===`p99_latency`?``:e.queue.trim();if(!t)return{ok:!1,error:`Rule name is required`,field:`name`};if(t.length>200)return{ok:!1,error:`Rule name must be 200 characters or fewer`,field:`name`};if(!e.threshold.trim())return{ok:!1,error:`Threshold is required`,field:`threshold`};let r=Number(e.threshold);return!Number.isFinite(r)||r<0?{ok:!1,error:`Threshold must be a non-negative number`,field:`threshold`}:e.metric===`error_rate`&&r>100?{ok:!1,error:`Error-rate threshold must be between 0 and 100%`,field:`threshold`}:[`waiting`,`failed`,`dlq`].includes(e.metric)&&!Number.isSafeInteger(r)?{ok:!1,error:`Job-count thresholds must be whole numbers`,field:`threshold`}:n&&(n.length>256||!O.test(n))?{ok:!1,error:`Queue contains unsupported characters or is too long`,field:`queue`}:w.includes(e.channel)?{ok:!0,rule:{name:t,metric:e.metric,operator:e.operator,threshold:r,queue:n,channel:e.channel,enabled:!0}}:{ok:!1,error:`Invalid channel type`,field:`channel`}}function A(){return typeof Notification>`u`?`unsupported`:Notification.permission}function j(){let{rules:e,addRule:t,removeRule:n,toggleRule:v}=u(),y=d(e=>e.breaching),x=d(e=>e.status),w=d(e=>e.error),T=d(e=>e.connectionIdentity),E=r(e=>c(e.baseUrl,e.token)),D=e.some(e=>e.enabled),O=T===E,k=O?y:[],j=O?x:D?`checking`:`idle`,N=O?w:null,[P,F]=(0,S.useState)(!1),[I,L]=(0,S.useState)(A);return(0,C.jsxs)(`div`,{children:[(0,C.jsx)(l,{title:`Alerts`,description:`Threshold rules evaluated live in your browser.`,live:D&&j===`live`,actions:(0,C.jsxs)(C.Fragment,{children:[I===`granted`?(0,C.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm text-success`,children:[(0,C.jsx)(i,{className:`size-4`}),` Desktop alerts on`]}):I===`unsupported`?(0,C.jsx)(`span`,{className:`text-sm text-faint`,children:`Notifications unsupported`}):I===`denied`?(0,C.jsx)(`span`,{className:`text-sm text-faint`,children:`Desktop alerts blocked — allow notifications in browser settings`}):(0,C.jsx)(g,{size:`sm`,onClick:async()=>{L(await p())},children:`Enable desktop notifications`}),(0,C.jsx)(g,{variant:`accent`,size:`sm`,"aria-expanded":P,"aria-controls":`alert-rule-form`,onClick:()=>F(e=>!e),children:`+ Create Alert Rule`})]})}),D&&j===`checking`&&(0,C.jsx)(`p`,{role:`status`,className:`mb-4 text-sm text-muted`,children:`Checking alert metrics for the connected server…`}),D&&j===`degraded`&&(0,C.jsx)(_,{message:N??`Alert metrics are unavailable; current rule results may be stale.`}),(0,C.jsx)(`div`,{className:`mb-6 rounded-lg border border-amber-500/20 bg-amber-500/5 px-4 py-3 text-sm text-amber-400/90`,children:`Rules are evaluated in this browser while a tab is open (even backgrounded), raising an in-app toast and — if enabled — a desktop notification. bunqueue OSS has no alerting backend, so email/webhook/slack delivery still needs your own monitoring or hosted bunqueue Cloud.`}),(0,C.jsxs)(`section`,{className:`mb-8`,children:[(0,C.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Triggered Alerts`}),k.length===0?(0,C.jsx)(h,{icon:(0,C.jsx)(i,{}),title:`No triggered alerts`,hint:D?j===`live`?`All enabled rules are within their thresholds.`:j===`checking`?`Alert metrics are still being checked.`:`Alert metrics are unavailable; no all-clear result is available.`:`No enabled rules yet. Create one below.`}):(0,C.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-danger/30 bg-red-500/5`,children:(0,C.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,C.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Current`}),(0,C.jsx)(`th`,{className:`px-5 py-3 text-right font-medium`,children:`Since`})]})}),(0,C.jsx)(`tbody`,{children:k.map(e=>(0,C.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,C.jsx)(`td`,{className:`px-5 py-3 font-medium text-danger`,children:e.ruleName}),(0,C.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[e.metricLabel,` `,e.operator,` `,(0,C.jsx)(`span`,{className:`font-semibold text-fg`,children:e.threshold})]}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right tnum font-semibold text-danger`,children:Math.round(e.value*100)/100}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right text-faint`,children:m(e.at)})]},e.ruleId))})]})})]}),(0,C.jsxs)(`section`,{children:[(0,C.jsx)(`h2`,{className:`mb-3 text-lg font-semibold text-fg`,children:`Alert Rules`}),P&&(0,C.jsx)(`div`,{id:`alert-rule-form`,children:(0,C.jsx)(a,{className:`mb-4`,children:(0,C.jsx)(M,{onAdd:e=>{let n=t(e);return n.ok&&F(!1),n}})})}),e.length===0?(0,C.jsx)(h,{title:`No alert rules`,hint:`Create a rule to be notified when a threshold is crossed.`}):(0,C.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-line bg-surface`,children:(0,C.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,C.jsx)(`thead`,{children:(0,C.jsxs)(`tr`,{className:`border-b border-line text-left text-[11px] uppercase tracking-wider text-faint`,children:[(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Rule`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Condition`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Queue`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Delivery`}),(0,C.jsx)(`th`,{className:`px-5 py-3 font-medium`,children:`Status`}),(0,C.jsx)(`th`,{className:`w-12 px-5 py-3`})]})}),(0,C.jsx)(`tbody`,{children:e.map(e=>(0,C.jsxs)(`tr`,{className:`border-b border-line last:border-0`,children:[(0,C.jsx)(`td`,{className:`px-5 py-3 font-medium text-fg`,children:e.name}),(0,C.jsxs)(`td`,{className:`px-5 py-3 text-muted`,children:[f[e.metric],` `,e.operator,` `,(0,C.jsx)(`span`,{className:`font-semibold text-accent`,children:e.threshold})]}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-muted`,children:e.queue||`All queues`}),(0,C.jsx)(`td`,{className:`px-5 py-3`,children:(0,C.jsx)(`span`,{className:`rounded-md bg-surface-2 px-2 py-0.5 text-xs text-muted`,children:`Browser`})}),(0,C.jsx)(`td`,{className:`px-5 py-3`,children:(0,C.jsx)(b,{checked:e.enabled,onChange:()=>v(e.id),label:`Enabled`})}),(0,C.jsx)(`td`,{className:`px-5 py-3 text-right`,children:(0,C.jsx)(o,{"aria-label":`Delete rule ${e.name}`,onClick:()=>window.confirm(`Delete alert rule "${e.name}"?`)&&n(e.id),children:(0,C.jsx)(s,{className:`size-3.5`})})})]},e.id))})]})})]})]})}function M({onAdd:e}){let[t,n]=(0,S.useState)(``),[r,i]=(0,S.useState)(`error_rate`),[a,o]=(0,S.useState)(`>=`),[s,c]=(0,S.useState)(``),[l,u]=(0,S.useState)(``),[d,p]=(0,S.useState)(null),m=(0,S.useRef)(!1),h=(0,S.useId)(),_=e=>d?.field===e;return(0,C.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 md:grid-cols-3 lg:grid-cols-5`,children:[(0,C.jsx)(x,{label:`Name`,children:(0,C.jsx)(y,{name:`alert-rule-name`,autoComplete:`off`,maxLength:200,value:t,"aria-invalid":_(`name`),"aria-describedby":_(`name`)?h:void 0,onChange:e=>{n(e.target.value),p(null)},placeholder:`High error rate`})}),(0,C.jsx)(x,{label:`Metric`,children:(0,C.jsx)(v,{name:`alert-rule-metric`,value:r,"aria-invalid":_(`metric`),"aria-describedby":_(`metric`)?h:void 0,onChange:e=>{i(e.target.value),p(null)},children:T.map(e=>(0,C.jsx)(`option`,{value:e,children:f[e]},e))})}),(0,C.jsx)(x,{label:`Operator`,children:(0,C.jsx)(v,{name:`alert-rule-operator`,value:a,"aria-invalid":_(`operator`),"aria-describedby":_(`operator`)?h:void 0,onChange:e=>{o(e.target.value),p(null)},children:E.map(e=>(0,C.jsx)(`option`,{value:e,children:e},e))})}),(0,C.jsx)(x,{label:`Threshold`,hint:D[r].unit,children:(0,C.jsx)(y,{name:`alert-rule-threshold`,autoComplete:`off`,type:`number`,min:0,max:r===`error_rate`?100:void 0,step:[`waiting`,`failed`,`dlq`].includes(r)?1:`any`,value:s,"aria-invalid":_(`threshold`),"aria-describedby":_(`threshold`)?h:void 0,onChange:e=>{c(e.target.value),p(null)},placeholder:D[r].placeholder})}),(0,C.jsx)(x,{label:`Queue (optional)`,hint:r===`p99_latency`?`global only — latency is not per queue`:void 0,children:(0,C.jsx)(y,{name:`alert-rule-queue`,autoComplete:`off`,spellCheck:!1,maxLength:256,value:l,"aria-invalid":_(`queue`),"aria-describedby":_(`queue`)?h:void 0,onChange:e=>{u(e.target.value),p(null)},disabled:r===`p99_latency`,placeholder:r===`p99_latency`?`Global`:`All queues`,className:`disabled:cursor-not-allowed disabled:opacity-40`})}),(0,C.jsxs)(`div`,{className:`col-span-full`,children:[(0,C.jsx)(g,{variant:`accent`,disabled:!t.trim()||!s.trim(),onClick:()=>{if(m.current)return;let n=k({name:t,metric:r,operator:a,threshold:s,queue:l,channel:`email`});if(!n.ok){p({field:n.field,message:n.error});return}m.current=!0;try{let t=e(n.rule);t.ok||(m.current=!1,p({field:`name`,message:t.error}))}catch(e){m.current=!1,p({field:`name`,message:e.message})}},children:`Save rule`}),d&&(0,C.jsx)(`span`,{id:h,role:`alert`,className:`ml-3 text-xs text-danger`,children:d.message})]})]})}export{j as Alerts};
|