@burdenoff/fluidgrids-fe-sdk 2026.923.1 → 2026.923.3
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/{ExecutionDetailPage-22KHNXBI.js → ExecutionDetailPage-BD7CS4KL.js} +4 -4
- package/dist/{ExecutionDetailPage-22KHNXBI.js.map → ExecutionDetailPage-BD7CS4KL.js.map} +1 -1
- package/dist/{ExecutionsListPage-NQWK2NCN.js → ExecutionsListPage-VOGSLA7T.js} +4 -4
- package/dist/{ExecutionsListPage-NQWK2NCN.js.map → ExecutionsListPage-VOGSLA7T.js.map} +1 -1
- package/dist/{WorkflowBuilder-2PLQT5OZ.js → WorkflowBuilder-WLJBVVHS.js} +4 -4
- package/dist/{WorkflowBuilder-2PLQT5OZ.js.map → WorkflowBuilder-WLJBVVHS.js.map} +1 -1
- package/dist/{WorkflowsList-M2GOHL6L.js → WorkflowsList-O7SLDXML.js} +3 -3
- package/dist/{WorkflowsList-M2GOHL6L.js.map → WorkflowsList-O7SLDXML.js.map} +1 -1
- package/dist/{chunk-YNDQYVT2.js → chunk-4C6UYNC5.js} +3 -3
- package/dist/{chunk-YNDQYVT2.js.map → chunk-4C6UYNC5.js.map} +1 -1
- package/dist/{chunk-24A4C63H.js → chunk-5A7GP6O7.js} +189 -67
- package/dist/chunk-5A7GP6O7.js.map +1 -0
- package/dist/{chunk-C7OR5C6R.js → chunk-5PZDLMC4.js} +3 -3
- package/dist/{chunk-C7OR5C6R.js.map → chunk-5PZDLMC4.js.map} +1 -1
- package/dist/{chunk-EGQB462S.js → chunk-FKOUPL6Z.js} +355 -128
- package/dist/chunk-FKOUPL6Z.js.map +1 -0
- package/dist/{chunk-AQBWMYKP.js → chunk-HNVWIVJH.js} +52 -16
- package/dist/chunk-HNVWIVJH.js.map +1 -0
- package/dist/{chunk-ILH7U6VB.js → chunk-LH2YML5F.js} +3 -3
- package/dist/{chunk-ILH7U6VB.js.map → chunk-LH2YML5F.js.map} +1 -1
- package/dist/{chunk-RRBFISAU.js → chunk-TEZV7I6A.js} +3 -3
- package/dist/{chunk-RRBFISAU.js.map → chunk-TEZV7I6A.js.map} +1 -1
- package/dist/{chunk-PTI43PVQ.js → chunk-TOHTP3BT.js} +3 -3
- package/dist/{chunk-PTI43PVQ.js.map → chunk-TOHTP3BT.js.map} +1 -1
- package/dist/{chunk-WTKMWWSI.js → chunk-VTPBYPDV.js} +10 -4
- package/dist/chunk-VTPBYPDV.js.map +1 -0
- package/dist/{chunk-XQ7FGXPM.js → chunk-X3OSUZIS.js} +397 -7
- package/dist/chunk-X3OSUZIS.js.map +1 -0
- package/dist/{chunk-JMJRE5RT.js → chunk-XF7QA3QT.js} +414 -152
- package/dist/chunk-XF7QA3QT.js.map +1 -0
- package/dist/executions.js +3 -3
- package/dist/index.js +17 -17
- package/dist/observability.js +2 -2
- package/dist/settings.js +2 -2
- package/dist/templates.js +2 -2
- package/dist/workflow-builder.js +3 -3
- package/dist/workflows-list.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-24A4C63H.js.map +0 -1
- package/dist/chunk-AQBWMYKP.js.map +0 -1
- package/dist/chunk-EGQB462S.js.map +0 -1
- package/dist/chunk-JMJRE5RT.js.map +0 -1
- package/dist/chunk-WTKMWWSI.js.map +0 -1
- package/dist/chunk-XQ7FGXPM.js.map +0 -1
|
@@ -439,13 +439,28 @@ function LogStreamingTab() {
|
|
|
439
439
|
className: "rounded-lg border border-status-error-border bg-status-error-bg-subtle p-4 text-sm text-status-error-text",
|
|
440
440
|
children: [
|
|
441
441
|
error.message,
|
|
442
|
-
/* @__PURE__ */ jsx(
|
|
442
|
+
/* @__PURE__ */ jsx(
|
|
443
|
+
Button,
|
|
444
|
+
{
|
|
445
|
+
variant: "outline",
|
|
446
|
+
size: "sm",
|
|
447
|
+
className: "ml-3",
|
|
448
|
+
onClick: () => void refetch(),
|
|
449
|
+
children: tr("fluidgrids.settings.logStreaming.retry", "Retry")
|
|
450
|
+
}
|
|
451
|
+
)
|
|
443
452
|
]
|
|
444
453
|
}
|
|
445
454
|
),
|
|
446
455
|
showForm && /* @__PURE__ */ jsxs(Card, { className: "border-border-secondary bg-background-secondary", children: [
|
|
447
456
|
/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
448
|
-
/* @__PURE__ */ jsx("h3", { className: "font-medium text-text-primary", children: editingId ? tr(
|
|
457
|
+
/* @__PURE__ */ jsx("h3", { className: "font-medium text-text-primary", children: editingId ? tr(
|
|
458
|
+
"fluidgrids.settings.logStreaming.edit",
|
|
459
|
+
"Edit destination"
|
|
460
|
+
) : tr(
|
|
461
|
+
"fluidgrids.settings.logStreaming.new",
|
|
462
|
+
"New destination"
|
|
463
|
+
) }),
|
|
449
464
|
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: resetForm, children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:close", width: 18 }) })
|
|
450
465
|
] }) }),
|
|
451
466
|
/* @__PURE__ */ jsxs(CardContent, { className: "space-y-5", children: [
|
|
@@ -457,7 +472,10 @@ function LogStreamingTab() {
|
|
|
457
472
|
{
|
|
458
473
|
id: "log-stream-name",
|
|
459
474
|
value: form.name,
|
|
460
|
-
onChange: (event) => setForm((current) => ({
|
|
475
|
+
onChange: (event) => setForm((current) => ({
|
|
476
|
+
...current,
|
|
477
|
+
name: event.target.value
|
|
478
|
+
})),
|
|
461
479
|
placeholder: "Production error stream"
|
|
462
480
|
}
|
|
463
481
|
)
|
|
@@ -487,20 +505,29 @@ function LogStreamingTab() {
|
|
|
487
505
|
{
|
|
488
506
|
id: "log-stream-endpoint",
|
|
489
507
|
value: form.endpoint,
|
|
490
|
-
onChange: (event) => setForm((current) => ({
|
|
508
|
+
onChange: (event) => setForm((current) => ({
|
|
509
|
+
...current,
|
|
510
|
+
endpoint: event.target.value
|
|
511
|
+
})),
|
|
491
512
|
placeholder: endpointPlaceholder(form.provider),
|
|
492
513
|
type: form.provider === "WEBHOOK" || form.provider === "SENTRY" ? "url" : "text"
|
|
493
514
|
}
|
|
494
515
|
)
|
|
495
516
|
] }),
|
|
496
517
|
form.provider === "WEBHOOK" && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
497
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "log-stream-secret", children: tr(
|
|
518
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "log-stream-secret", children: tr(
|
|
519
|
+
"fluidgrids.settings.logStreaming.secret",
|
|
520
|
+
"Signing secret"
|
|
521
|
+
) }),
|
|
498
522
|
/* @__PURE__ */ jsx(
|
|
499
523
|
Input,
|
|
500
524
|
{
|
|
501
525
|
id: "log-stream-secret",
|
|
502
526
|
value: form.secret,
|
|
503
|
-
onChange: (event) => setForm((current) => ({
|
|
527
|
+
onChange: (event) => setForm((current) => ({
|
|
528
|
+
...current,
|
|
529
|
+
secret: event.target.value
|
|
530
|
+
})),
|
|
504
531
|
placeholder: editingId ? "Leave blank to keep the current secret" : "Enter a signing secret",
|
|
505
532
|
type: "password",
|
|
506
533
|
autoComplete: "new-password"
|
|
@@ -508,32 +535,48 @@ function LogStreamingTab() {
|
|
|
508
535
|
)
|
|
509
536
|
] }),
|
|
510
537
|
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
511
|
-
/* @__PURE__ */ jsx(Label, { htmlFor: "log-stream-config", children: tr(
|
|
538
|
+
/* @__PURE__ */ jsx(Label, { htmlFor: "log-stream-config", children: tr(
|
|
539
|
+
"fluidgrids.settings.logStreaming.config",
|
|
540
|
+
"Provider configuration (JSON)"
|
|
541
|
+
) }),
|
|
512
542
|
/* @__PURE__ */ jsx(
|
|
513
543
|
"textarea",
|
|
514
544
|
{
|
|
515
545
|
id: "log-stream-config",
|
|
516
546
|
value: form.configText,
|
|
517
|
-
onChange: (event) => setForm((current) => ({
|
|
547
|
+
onChange: (event) => setForm((current) => ({
|
|
548
|
+
...current,
|
|
549
|
+
configText: event.target.value
|
|
550
|
+
})),
|
|
518
551
|
className: "min-h-24 w-full rounded-md border border-border-secondary bg-background-primary px-3 py-2 font-mono text-xs text-text-primary",
|
|
519
552
|
spellCheck: false
|
|
520
553
|
}
|
|
521
554
|
)
|
|
522
555
|
] }),
|
|
523
556
|
/* @__PURE__ */ jsxs("fieldset", { className: "space-y-2", children: [
|
|
524
|
-
/* @__PURE__ */ jsx("legend", { className: "text-sm font-medium text-text-primary", children: tr(
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
557
|
+
/* @__PURE__ */ jsx("legend", { className: "text-sm font-medium text-text-primary", children: tr(
|
|
558
|
+
"fluidgrids.settings.logStreaming.events",
|
|
559
|
+
"Events to stream"
|
|
560
|
+
) }),
|
|
561
|
+
/* @__PURE__ */ jsx("div", { className: "grid gap-2 sm:grid-cols-2 lg:grid-cols-4", children: LOG_STREAM_EVENT_TYPES.map((event) => /* @__PURE__ */ jsxs(
|
|
562
|
+
"label",
|
|
563
|
+
{
|
|
564
|
+
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
565
|
+
children: [
|
|
566
|
+
/* @__PURE__ */ jsx(
|
|
567
|
+
"input",
|
|
568
|
+
{
|
|
569
|
+
type: "checkbox",
|
|
570
|
+
checked: form.eventFilters.includes(event),
|
|
571
|
+
onChange: () => toggleEvent(event),
|
|
572
|
+
className: "size-4 rounded border-border-secondary accent-action-primary-bg"
|
|
573
|
+
}
|
|
574
|
+
),
|
|
575
|
+
eventLabel(event)
|
|
576
|
+
]
|
|
577
|
+
},
|
|
578
|
+
event
|
|
579
|
+
)) })
|
|
537
580
|
] }),
|
|
538
581
|
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm text-text-secondary", children: [
|
|
539
582
|
/* @__PURE__ */ jsx(
|
|
@@ -541,67 +584,146 @@ function LogStreamingTab() {
|
|
|
541
584
|
{
|
|
542
585
|
type: "checkbox",
|
|
543
586
|
checked: form.isEnabled,
|
|
544
|
-
onChange: (event) => setForm((current) => ({
|
|
587
|
+
onChange: (event) => setForm((current) => ({
|
|
588
|
+
...current,
|
|
589
|
+
isEnabled: event.target.checked
|
|
590
|
+
})),
|
|
545
591
|
className: "size-4 rounded border-border-secondary accent-action-primary-bg"
|
|
546
592
|
}
|
|
547
593
|
),
|
|
548
|
-
tr(
|
|
594
|
+
tr(
|
|
595
|
+
"fluidgrids.settings.logStreaming.enabled",
|
|
596
|
+
"Destination enabled"
|
|
597
|
+
)
|
|
549
598
|
] }),
|
|
550
599
|
/* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
551
600
|
/* @__PURE__ */ jsx(Button, { variant: "outline", onClick: resetForm, children: tr("fluidgrids.settings.logStreaming.cancel", "Cancel") }),
|
|
552
|
-
/* @__PURE__ */ jsx(Button, { onClick: () => void save(), disabled: actions.loading, children: actions.loading ? tr("fluidgrids.settings.logStreaming.saving", "Saving\u2026") : tr(
|
|
601
|
+
/* @__PURE__ */ jsx(Button, { onClick: () => void save(), disabled: actions.loading, children: actions.loading ? tr("fluidgrids.settings.logStreaming.saving", "Saving\u2026") : tr(
|
|
602
|
+
"fluidgrids.settings.logStreaming.save",
|
|
603
|
+
"Save destination"
|
|
604
|
+
) })
|
|
553
605
|
] })
|
|
554
606
|
] })
|
|
555
607
|
] }),
|
|
556
608
|
/* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
557
|
-
loading && destinations.length === 0 && /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border-secondary bg-background-secondary p-6 text-sm text-text-secondary", children: tr(
|
|
609
|
+
loading && destinations.length === 0 && /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border-secondary bg-background-secondary p-6 text-sm text-text-secondary", children: tr(
|
|
610
|
+
"fluidgrids.settings.logStreaming.loading",
|
|
611
|
+
"Loading destinations\u2026"
|
|
612
|
+
) }),
|
|
558
613
|
!loading && destinations.length === 0 && /* @__PURE__ */ jsxs("div", { className: "rounded-lg border border-dashed border-border-secondary bg-background-secondary p-8 text-center", children: [
|
|
559
|
-
/* @__PURE__ */ jsx(
|
|
560
|
-
|
|
561
|
-
|
|
614
|
+
/* @__PURE__ */ jsx(
|
|
615
|
+
Icon,
|
|
616
|
+
{
|
|
617
|
+
icon: "mdi:transit-connection-variant",
|
|
618
|
+
className: "mx-auto mb-3 text-text-secondary",
|
|
619
|
+
width: 32
|
|
620
|
+
}
|
|
621
|
+
),
|
|
622
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium text-text-primary", children: tr(
|
|
623
|
+
"fluidgrids.settings.logStreaming.emptyTitle",
|
|
624
|
+
"No log destinations yet"
|
|
625
|
+
) }),
|
|
626
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr(
|
|
627
|
+
"fluidgrids.settings.logStreaming.emptyDescription",
|
|
628
|
+
"Add a webhook, syslog target, or Sentry DSN to start streaming events."
|
|
629
|
+
) })
|
|
562
630
|
] }),
|
|
563
|
-
destinations.map((destination) => /* @__PURE__ */ jsx(
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
/* @__PURE__ */
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
/* @__PURE__ */
|
|
597
|
-
|
|
631
|
+
destinations.map((destination) => /* @__PURE__ */ jsx(
|
|
632
|
+
Card,
|
|
633
|
+
{
|
|
634
|
+
className: "border-border-secondary bg-background-secondary",
|
|
635
|
+
children: /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between", children: [
|
|
636
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
637
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
638
|
+
/* @__PURE__ */ jsx("h3", { className: "font-medium text-text-primary", children: destination.name }),
|
|
639
|
+
/* @__PURE__ */ jsx("span", { className: "rounded-full bg-background-tertiary px-2 py-0.5 text-xs text-text-secondary", children: destination.provider }),
|
|
640
|
+
/* @__PURE__ */ jsx(
|
|
641
|
+
"span",
|
|
642
|
+
{
|
|
643
|
+
className: destination.isEnabled ? "text-xs text-status-success-text" : "text-xs text-text-secondary",
|
|
644
|
+
children: destination.isEnabled ? tr(
|
|
645
|
+
"fluidgrids.settings.logStreaming.enabledBadge",
|
|
646
|
+
"Enabled"
|
|
647
|
+
) : tr(
|
|
648
|
+
"fluidgrids.settings.logStreaming.disabledBadge",
|
|
649
|
+
"Disabled"
|
|
650
|
+
)
|
|
651
|
+
}
|
|
652
|
+
)
|
|
653
|
+
] }),
|
|
654
|
+
/* @__PURE__ */ jsx("p", { className: "mt-1 truncate text-sm text-text-secondary", children: destination.endpoint }),
|
|
655
|
+
/* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-text-secondary", children: [
|
|
656
|
+
destination.eventFilters.length > 0 ? destination.eventFilters.map(eventLabel).join(", ") : tr(
|
|
657
|
+
"fluidgrids.settings.logStreaming.allEvents",
|
|
658
|
+
"All events"
|
|
659
|
+
),
|
|
660
|
+
destination.hasSecret && " \xB7 Secret configured"
|
|
661
|
+
] }),
|
|
662
|
+
destination.lastDispatchError && /* @__PURE__ */ jsx("p", { className: "mt-2 text-xs text-status-error-text", children: destination.lastDispatchError })
|
|
663
|
+
] }),
|
|
664
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-wrap gap-2", children: [
|
|
665
|
+
/* @__PURE__ */ jsxs(
|
|
666
|
+
Button,
|
|
667
|
+
{
|
|
668
|
+
variant: "outline",
|
|
669
|
+
size: "sm",
|
|
670
|
+
onClick: () => void sendTest(destination),
|
|
671
|
+
disabled: actions.loading,
|
|
672
|
+
children: [
|
|
673
|
+
/* @__PURE__ */ jsx(
|
|
674
|
+
Icon,
|
|
675
|
+
{
|
|
676
|
+
icon: "mdi:send-check-outline",
|
|
677
|
+
className: "mr-1",
|
|
678
|
+
width: 15
|
|
679
|
+
}
|
|
680
|
+
),
|
|
681
|
+
tr("fluidgrids.settings.logStreaming.test", "Send test")
|
|
682
|
+
]
|
|
683
|
+
}
|
|
684
|
+
),
|
|
685
|
+
/* @__PURE__ */ jsx(
|
|
686
|
+
Button,
|
|
687
|
+
{
|
|
688
|
+
variant: "outline",
|
|
689
|
+
size: "sm",
|
|
690
|
+
onClick: () => {
|
|
691
|
+
setEditingId(destination.id);
|
|
692
|
+
setShowForm(true);
|
|
693
|
+
},
|
|
694
|
+
disabled: actions.loading,
|
|
695
|
+
children: tr("fluidgrids.settings.logStreaming.editButton", "Edit")
|
|
696
|
+
}
|
|
697
|
+
),
|
|
698
|
+
/* @__PURE__ */ jsxs(
|
|
699
|
+
Button,
|
|
700
|
+
{
|
|
701
|
+
variant: "ghost",
|
|
702
|
+
size: "sm",
|
|
703
|
+
onClick: () => void remove(destination),
|
|
704
|
+
disabled: actions.loading,
|
|
705
|
+
children: [
|
|
706
|
+
/* @__PURE__ */ jsx(
|
|
707
|
+
Icon,
|
|
708
|
+
{
|
|
709
|
+
icon: "mdi:trash-can-outline",
|
|
710
|
+
className: "text-status-error-text",
|
|
711
|
+
width: 17
|
|
712
|
+
}
|
|
713
|
+
),
|
|
714
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: tr("fluidgrids.settings.logStreaming.delete", "Delete") })
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
)
|
|
718
|
+
] })
|
|
598
719
|
] })
|
|
599
|
-
|
|
600
|
-
|
|
720
|
+
},
|
|
721
|
+
destination.id
|
|
722
|
+
))
|
|
601
723
|
] })
|
|
602
724
|
] });
|
|
603
725
|
}
|
|
604
726
|
|
|
605
727
|
export { LogStreamingTab, useDataSinkData, useDataSinks, useInsightsData, useLogStreamDestinationActions, useLogStreamDestinations, useRunReplayActions };
|
|
606
|
-
//# sourceMappingURL=chunk-
|
|
607
|
-
//# sourceMappingURL=chunk-
|
|
728
|
+
//# sourceMappingURL=chunk-5A7GP6O7.js.map
|
|
729
|
+
//# sourceMappingURL=chunk-5A7GP6O7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/observability/hooks/useObservability.ts","../src/modules/observability/types.ts","../src/modules/observability/components/LogStreamingTab.tsx"],"names":["useState","useEffect","useCallback"],"mappings":"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","file":"chunk-5A7GP6O7.js","sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { getFluidGridsClient } from \"../../../graphql/client\";\nimport {\n describeOperationError,\n throwIfResultError,\n} from \"../../../graphql/errors\";\nimport {\n CREATE_LOG_STREAM_DESTINATION,\n DELETE_LOG_STREAM_DESTINATION,\n LOG_STREAM_DESTINATIONS,\n OBSERVABILITY_DATA_SINK_DATA,\n OBSERVABILITY_DATA_SINKS,\n OBSERVABILITY_DASHBOARD_SUMMARY,\n OBSERVABILITY_FAILED_RUNS,\n REPLAY_WORKFLOW_RUN,\n RETRY_WORKFLOW_RUNS,\n TEST_LOG_STREAM_DESTINATION,\n UPDATE_LOG_STREAM_DESTINATION,\n} from \"../operations\";\nimport type {\n DashboardSummary,\n DataSinkData,\n DataSinkSummary,\n FailedRun,\n LogStreamDestination,\n LogStreamDestinationInput,\n LogStreamDestinationResponse,\n MutationResponse,\n TriggerResponse,\n} from \"../types\";\n\ninterface DestinationQueryData {\n logStreamDestinations: LogStreamDestination[];\n}\n\ninterface DestinationMutationData {\n createLogStreamDestination?: LogStreamDestinationResponse;\n updateLogStreamDestination?: LogStreamDestinationResponse;\n deleteLogStreamDestination?: MutationResponse;\n testLogStreamDestination?: MutationResponse;\n}\n\ninterface SummaryQueryData {\n dashboardSummary: DashboardSummary;\n}\n\ninterface FailedRunsQueryData {\n workflowRuns: {\n total: number;\n hasMore: boolean;\n items: FailedRun[];\n };\n}\n\ninterface TriggerMutationData {\n replayWorkflowRun?: TriggerResponse;\n retryWorkflowRuns?: TriggerResponse[];\n}\n\ninterface DataSinksQueryData {\n listDataSinks: {\n totalCount: number;\n pageInfo: { hasNextPage: boolean; endCursor?: string | null };\n edges: Array<{ cursor: string; node: DataSinkSummary }>;\n };\n}\n\ninterface DataSinkDataQueryData {\n getDataSinkData?: DataSinkData | null;\n}\n\ninterface UseAsyncState<T> {\n data: T | null;\n loading: boolean;\n error: Error | null;\n}\n\nfunction useAsyncRefresh<T>(\n fetcher: () => Promise<T>,\n initial: T | null,\n): UseAsyncState<T> & { refetch: () => Promise<T | null> } {\n const [data, setData] = useState<T | null>(initial);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const refetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const next = await fetcher();\n setData(next);\n return next;\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n }, [fetcher]);\n\n useEffect(() => {\n void refetch();\n }, [refetch]);\n\n return { data, loading, error, refetch };\n}\n\nexport function useLogStreamDestinations() {\n const fetchDestinations = useCallback(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DestinationQueryData>({\n query: LOG_STREAM_DESTINATIONS,\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.logStreamDestinations ?? [];\n }, []);\n\n const state = useAsyncRefresh(fetchDestinations, []);\n return { destinations: state.data ?? [], ...state, refetch: state.refetch };\n}\n\nexport function useLogStreamDestinationActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const run = useCallback(\n async <T>(operation: () => Promise<T>): Promise<T | null> => {\n setLoading(true);\n setError(null);\n try {\n return await operation();\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [],\n );\n\n const create = useCallback(\n (input: LogStreamDestinationInput) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: CREATE_LOG_STREAM_DESTINATION,\n variables: { input },\n }),\n );\n return result.data?.createLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const update = useCallback(\n (id: string, input: Partial<LogStreamDestinationInput>) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: UPDATE_LOG_STREAM_DESTINATION,\n variables: { id, input },\n }),\n );\n return result.data?.updateLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const remove = useCallback(\n (id: string) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: DELETE_LOG_STREAM_DESTINATION,\n variables: { id },\n }),\n );\n return result.data?.deleteLogStreamDestination ?? null;\n }),\n [run],\n );\n\n const test = useCallback(\n (id: string) =>\n run(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<DestinationMutationData>({\n mutation: TEST_LOG_STREAM_DESTINATION,\n variables: { id },\n }),\n );\n return result.data?.testLogStreamDestination ?? null;\n }),\n [run],\n );\n\n return { create, update, remove, test, loading, error };\n}\n\nexport function useRunReplayActions() {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const replay = useCallback(async (runId: string) => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<TriggerMutationData>({\n mutation: REPLAY_WORKFLOW_RUN,\n variables: { runId },\n }),\n );\n return result.data?.replayWorkflowRun ?? null;\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return null;\n } finally {\n setLoading(false);\n }\n }, []);\n\n const retryMany = useCallback(async (runIds: string[]) => {\n setLoading(true);\n setError(null);\n try {\n const result = throwIfResultError(\n await getFluidGridsClient().mutate<TriggerMutationData>({\n mutation: RETRY_WORKFLOW_RUNS,\n variables: { runIds },\n }),\n );\n return result.data?.retryWorkflowRuns ?? [];\n } catch (cause) {\n const nextError = new Error(describeOperationError(cause));\n setError(nextError);\n return [];\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { replay, retryMany, loading, error };\n}\n\nexport function useInsightsData() {\n const fetchInsights = useCallback(async () => {\n const client = getFluidGridsClient();\n const [summaryResult, failedResult] = await Promise.all([\n client.query<SummaryQueryData>({\n query: OBSERVABILITY_DASHBOARD_SUMMARY,\n fetchPolicy: \"network-only\",\n }),\n client.query<FailedRunsQueryData>({\n query: OBSERVABILITY_FAILED_RUNS,\n variables: {\n input: {\n status: \"FAILED\",\n limit: 100,\n offset: 0,\n },\n },\n fetchPolicy: \"network-only\",\n }),\n ]);\n throwIfResultError(summaryResult);\n throwIfResultError(failedResult);\n return {\n summary: summaryResult.data?.dashboardSummary ?? null,\n failedRuns: failedResult.data?.workflowRuns.items ?? [],\n };\n }, []);\n\n const state = useAsyncRefresh(fetchInsights, null);\n return {\n summary: state.data?.summary ?? null,\n failedRuns: state.data?.failedRuns ?? [],\n loading: state.loading,\n error: state.error,\n refetch: state.refetch,\n };\n}\n\nexport function useDataSinks(search: string) {\n const fetchSinks = useCallback(async () => {\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataSinksQueryData>({\n query: OBSERVABILITY_DATA_SINKS,\n variables: { first: 50, isActive: true, search: search || undefined },\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.listDataSinks ?? null;\n }, [search]);\n\n const state = useAsyncRefresh(fetchSinks, null);\n return {\n sinks: state.data?.edges.map((edge) => edge.node) ?? [],\n totalCount: state.data?.totalCount ?? 0,\n hasNextPage: state.data?.pageInfo.hasNextPage ?? false,\n ...state,\n };\n}\n\nexport function useDataSinkData(sink: DataSinkSummary | null) {\n const fetchData = useCallback(async () => {\n if (!sink) return null;\n const result = throwIfResultError(\n await getFluidGridsClient().query<DataSinkDataQueryData>({\n query: OBSERVABILITY_DATA_SINK_DATA,\n variables: { id: sink.id, limit: 100, offset: 0 },\n fetchPolicy: \"network-only\",\n }),\n );\n return result.data?.getDataSinkData ?? null;\n }, [sink]);\n\n const state = useAsyncRefresh(fetchData, null);\n return { sinkData: state.data, ...state };\n}\n","export type LogStreamProvider = \"SYSLOG\" | \"WEBHOOK\" | \"SENTRY\";\n\nexport type LogStreamEventType =\n | \"LOG_ERROR\"\n | \"LOG_WARN\"\n | \"NODE_FAILED\"\n | \"NODE_RETRIED\"\n | \"RUN_CANCELLED\"\n | \"RUN_COMPLETED\"\n | \"RUN_FAILED\"\n | \"RUN_STARTED\";\n\nexport interface LogStreamDestination {\n id: string;\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n config?: Record<string, unknown> | null;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n hasSecret: boolean;\n lastDispatchError?: string | null;\n lastDispatchStatus?: string | null;\n lastDispatchedAt?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface LogStreamDestinationInput {\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n config?: Record<string, unknown>;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n secret?: string;\n}\n\nexport interface MutationResponse {\n success: boolean;\n message: string;\n}\n\nexport interface LogStreamDestinationResponse extends MutationResponse {\n destination?: LogStreamDestination | null;\n}\n\nexport interface TriggerResponse {\n runId: string;\n status: string;\n workflowKey: string;\n version: string;\n triggerNodeId: string;\n}\n\nexport interface DashboardSummary {\n workflowsCount: number;\n activeWorkflowsCount: number;\n runsCountTotal: number;\n runsCompletedCount: number;\n runsFailedCount: number;\n runsRunningCount: number;\n runsPendingCount: number;\n runsCancelledCount: number;\n runsWaitingCount: number;\n runsCompletedLast24h: number;\n runsFailedLast24h: number;\n runsCompletedLast7d: number;\n runsFailedLast7d: number;\n runsCompletedLast30d: number;\n runsFailedLast30d: number;\n totalNodesExecutedCount: number;\n avgWorkflowExecutionTimeSeconds?: number | null;\n avgNodeExecutionTimeSeconds?: number | null;\n workflowSuccessRate?: number | null;\n nodeUsageStats: NodeUsageStat[];\n recentRuns: RecentRun[];\n}\n\nexport interface NodeUsageStat {\n nodeType: string;\n totalExecutions: number;\n successCount: number;\n failureCount: number;\n avgExecutionTime?: number | null;\n}\n\nexport interface RecentRun {\n id: string;\n workflowKey: string;\n version: string;\n status: string;\n startedAt?: string | null;\n completedAt?: string | null;\n duration?: number | null;\n}\n\nexport interface FailedRun {\n id: string;\n workflowKey: string;\n status: string;\n errorType?: string | null;\n errorMessage?: string | null;\n triggerNodeId: string;\n startedAt?: string | null;\n completedAt?: string | null;\n duration?: number | null;\n workflow?: { name: string } | null;\n}\n\nexport interface DataSinkSummary {\n id: string;\n key: string;\n name?: string | null;\n description?: string | null;\n status: string;\n setupState: string;\n isActive: boolean;\n sizeBytes: number;\n lastRefreshedAt: string;\n nextRefreshAt?: string | null;\n dataStats?: { dataSizeBytes: number; hash: string } | null;\n linkedWorkflowCount: number;\n linkedParserCount: number;\n}\n\nexport interface DataSinkData {\n cached: boolean;\n extracted?: unknown;\n fetchedAt: string;\n hasMore?: boolean | null;\n limit?: number | null;\n offset?: number | null;\n raw: unknown;\n totalCount?: number | null;\n version: number;\n}\n\nexport function isLogStreamProvider(value: string): value is LogStreamProvider {\n return value === \"SYSLOG\" || value === \"WEBHOOK\" || value === \"SENTRY\";\n}\n\nexport const LOG_STREAM_EVENT_TYPES: readonly LogStreamEventType[] = [\n \"LOG_ERROR\",\n \"LOG_WARN\",\n \"NODE_FAILED\",\n \"NODE_RETRIED\",\n \"RUN_CANCELLED\",\n \"RUN_COMPLETED\",\n \"RUN_FAILED\",\n \"RUN_STARTED\",\n];\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Card,\n CardContent,\n CardHeader,\n Input,\n Label,\n} from \"@burdenoff/fe-libs/ui\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport {\n LOG_STREAM_EVENT_TYPES,\n type LogStreamDestination,\n type LogStreamDestinationInput,\n type LogStreamEventType,\n type LogStreamProvider,\n} from \"../types\";\nimport {\n useLogStreamDestinationActions,\n useLogStreamDestinations,\n} from \"../hooks/useObservability\";\n\ninterface DestinationFormState {\n name: string;\n provider: LogStreamProvider;\n endpoint: string;\n eventFilters: LogStreamEventType[];\n isEnabled: boolean;\n secret: string;\n configText: string;\n}\n\nconst DEFAULT_EVENT_FILTERS: LogStreamEventType[] = [\n \"RUN_FAILED\",\n \"NODE_FAILED\",\n \"LOG_ERROR\",\n];\n\nconst PROVIDERS: LogStreamProvider[] = [\"WEBHOOK\", \"SYSLOG\", \"SENTRY\"];\n\nfunction emptyForm(): DestinationFormState {\n return {\n name: \"\",\n provider: \"WEBHOOK\",\n endpoint: \"\",\n eventFilters: DEFAULT_EVENT_FILTERS,\n isEnabled: true,\n secret: \"\",\n configText: \"{}\",\n };\n}\n\nfunction formFromDestination(\n destination: LogStreamDestination,\n): DestinationFormState {\n return {\n name: destination.name,\n provider: destination.provider,\n endpoint: destination.endpoint,\n eventFilters: destination.eventFilters,\n isEnabled: destination.isEnabled,\n secret: \"\",\n configText: JSON.stringify(destination.config ?? {}, null, 2),\n };\n}\n\nfunction eventLabel(event: LogStreamEventType): string {\n return event\n .toLowerCase()\n .split(\"_\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction endpointPlaceholder(provider: LogStreamProvider): string {\n switch (provider) {\n case \"SYSLOG\":\n return \"logs.example.com:514\";\n case \"SENTRY\":\n return \"https://public@sentry.example/1\";\n case \"WEBHOOK\":\n return \"https://hooks.example.com/workflows\";\n }\n}\n\nfunction parseConfig(configText: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(configText || \"{}\");\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n return parsed as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction formToInput(\n form: DestinationFormState,\n): LogStreamDestinationInput | null {\n const config = parseConfig(form.configText);\n if (!config || !form.name.trim() || !form.endpoint.trim()) return null;\n return {\n name: form.name.trim(),\n provider: form.provider,\n endpoint: form.endpoint.trim(),\n eventFilters: form.eventFilters,\n isEnabled: form.isEnabled,\n config,\n ...(form.secret ? { secret: form.secret } : {}),\n };\n}\n\nexport function LogStreamingTab() {\n const tr = useTr();\n const { destinations, loading, error, refetch } = useLogStreamDestinations();\n const actions = useLogStreamDestinationActions();\n const [form, setForm] = useState<DestinationFormState>(emptyForm);\n const [editingId, setEditingId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n\n const editingDestination = useMemo(\n () => destinations.find((destination) => destination.id === editingId),\n [destinations, editingId],\n );\n\n useEffect(() => {\n if (editingDestination) setForm(formFromDestination(editingDestination));\n }, [editingDestination]);\n\n const resetForm = useCallback(() => {\n setForm(emptyForm());\n setEditingId(null);\n setShowForm(false);\n }, []);\n\n const save = useCallback(async () => {\n const input = formToInput(form);\n if (!input) {\n toast.error(\n tr(\n \"fluidgrids.settings.logStreaming.invalidForm\",\n \"Enter a name, endpoint, and valid JSON configuration.\",\n ),\n );\n return;\n }\n const result = editingId\n ? await actions.update(editingId, input)\n : await actions.create(input);\n if (!result?.success) {\n toast.error(\n result?.message ||\n tr(\n \"fluidgrids.settings.logStreaming.saveFailed\",\n \"Could not save log streaming destination.\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.saved\",\n \"Log streaming destination saved.\",\n ),\n );\n resetForm();\n await refetch();\n }, [actions, editingId, form, refetch, resetForm, tr]);\n\n const remove = useCallback(\n async (destination: LogStreamDestination) => {\n if (!window.confirm(`Delete “${destination.name}”?`)) return;\n const result = await actions.remove(destination.id);\n if (!result?.success) {\n toast.error(\n result?.message ||\n tr(\n \"fluidgrids.settings.logStreaming.deleteFailed\",\n \"Could not delete destination.\",\n ),\n );\n return;\n }\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.deleted\",\n \"Log streaming destination deleted.\",\n ),\n );\n if (editingId === destination.id) resetForm();\n await refetch();\n },\n [actions, editingId, refetch, resetForm, tr],\n );\n\n const sendTest = useCallback(\n async (destination: LogStreamDestination) => {\n const result = await actions.test(destination.id);\n if (!result) return;\n if (result.success) {\n toast.success(\n tr(\n \"fluidgrids.settings.logStreaming.testSucceeded\",\n \"Test event delivered.\",\n ),\n );\n } else {\n toast.error(\n result.message ||\n tr(\n \"fluidgrids.settings.logStreaming.testFailed\",\n \"Test event could not be delivered.\",\n ),\n );\n }\n await refetch();\n },\n [actions, refetch, tr],\n );\n\n const toggleEvent = (event: LogStreamEventType) => {\n setForm((current) => ({\n ...current,\n eventFilters: current.eventFilters.includes(event)\n ? current.eventFilters.filter((item) => item !== event)\n : [...current.eventFilters, event],\n }));\n };\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {tr(\"fluidgrids.settings.logStreaming.title\", \"Log streaming\")}\n </h2>\n <p className=\"mt-1 max-w-2xl text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.description\",\n \"Send workflow run and node events to workspace-managed observability destinations. Secrets are write-only and never returned.\",\n )}\n </p>\n </div>\n <Button\n onClick={() => {\n setForm(emptyForm());\n setEditingId(null);\n setShowForm(true);\n }}\n disabled={actions.loading}\n >\n <Icon icon=\"mdi:plus\" className=\"mr-1\" width={16} />\n {tr(\"fluidgrids.settings.logStreaming.add\", \"Add destination\")}\n </Button>\n </div>\n\n {error && (\n <div\n role=\"alert\"\n className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle p-4 text-sm text-status-error-text\"\n >\n {error.message}\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-3\"\n onClick={() => void refetch()}\n >\n {tr(\"fluidgrids.settings.logStreaming.retry\", \"Retry\")}\n </Button>\n </div>\n )}\n\n {showForm && (\n <Card className=\"border-border-secondary bg-background-secondary\">\n <CardHeader>\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"font-medium text-text-primary\">\n {editingId\n ? tr(\n \"fluidgrids.settings.logStreaming.edit\",\n \"Edit destination\",\n )\n : tr(\n \"fluidgrids.settings.logStreaming.new\",\n \"New destination\",\n )}\n </h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={resetForm}>\n <Icon icon=\"mdi:close\" width={18} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-5\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-name\">\n {tr(\"fluidgrids.settings.logStreaming.name\", \"Name\")}\n </Label>\n <Input\n id=\"log-stream-name\"\n value={form.name}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n name: event.target.value,\n }))\n }\n placeholder=\"Production error stream\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-provider\">\n {tr(\"fluidgrids.settings.logStreaming.provider\", \"Provider\")}\n </Label>\n <select\n id=\"log-stream-provider\"\n value={form.provider}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n provider: event.target.value as LogStreamProvider,\n endpoint: \"\",\n }))\n }\n className=\"w-full rounded-md border border-border-secondary bg-background-primary px-3 py-2 text-sm text-text-primary\"\n >\n {PROVIDERS.map((provider) => (\n <option key={provider} value={provider}>\n {provider}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-endpoint\">\n {tr(\"fluidgrids.settings.logStreaming.endpoint\", \"Endpoint\")}\n </Label>\n <Input\n id=\"log-stream-endpoint\"\n value={form.endpoint}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n endpoint: event.target.value,\n }))\n }\n placeholder={endpointPlaceholder(form.provider)}\n type={\n form.provider === \"WEBHOOK\" || form.provider === \"SENTRY\"\n ? \"url\"\n : \"text\"\n }\n />\n </div>\n {form.provider === \"WEBHOOK\" && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-secret\">\n {tr(\n \"fluidgrids.settings.logStreaming.secret\",\n \"Signing secret\",\n )}\n </Label>\n <Input\n id=\"log-stream-secret\"\n value={form.secret}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n secret: event.target.value,\n }))\n }\n placeholder={\n editingId\n ? \"Leave blank to keep the current secret\"\n : \"Enter a signing secret\"\n }\n type=\"password\"\n autoComplete=\"new-password\"\n />\n </div>\n )}\n <div className=\"space-y-2\">\n <Label htmlFor=\"log-stream-config\">\n {tr(\n \"fluidgrids.settings.logStreaming.config\",\n \"Provider configuration (JSON)\",\n )}\n </Label>\n <textarea\n id=\"log-stream-config\"\n value={form.configText}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n configText: event.target.value,\n }))\n }\n className=\"min-h-24 w-full rounded-md border border-border-secondary bg-background-primary px-3 py-2 font-mono text-xs text-text-primary\"\n spellCheck={false}\n />\n </div>\n <fieldset className=\"space-y-2\">\n <legend className=\"text-sm font-medium text-text-primary\">\n {tr(\n \"fluidgrids.settings.logStreaming.events\",\n \"Events to stream\",\n )}\n </legend>\n <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-4\">\n {LOG_STREAM_EVENT_TYPES.map((event) => (\n <label\n key={event}\n className=\"flex items-center gap-2 text-sm text-text-secondary\"\n >\n <input\n type=\"checkbox\"\n checked={form.eventFilters.includes(event)}\n onChange={() => toggleEvent(event)}\n className=\"size-4 rounded border-border-secondary accent-action-primary-bg\"\n />\n {eventLabel(event)}\n </label>\n ))}\n </div>\n </fieldset>\n <label className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <input\n type=\"checkbox\"\n checked={form.isEnabled}\n onChange={(event) =>\n setForm((current) => ({\n ...current,\n isEnabled: event.target.checked,\n }))\n }\n className=\"size-4 rounded border-border-secondary accent-action-primary-bg\"\n />\n {tr(\n \"fluidgrids.settings.logStreaming.enabled\",\n \"Destination enabled\",\n )}\n </label>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={resetForm}>\n {tr(\"fluidgrids.settings.logStreaming.cancel\", \"Cancel\")}\n </Button>\n <Button onClick={() => void save()} disabled={actions.loading}>\n {actions.loading\n ? tr(\"fluidgrids.settings.logStreaming.saving\", \"Saving…\")\n : tr(\n \"fluidgrids.settings.logStreaming.save\",\n \"Save destination\",\n )}\n </Button>\n </div>\n </CardContent>\n </Card>\n )}\n\n <div className=\"space-y-3\">\n {loading && destinations.length === 0 && (\n <div className=\"rounded-lg border border-border-secondary bg-background-secondary p-6 text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.loading\",\n \"Loading destinations…\",\n )}\n </div>\n )}\n {!loading && destinations.length === 0 && (\n <div className=\"rounded-lg border border-dashed border-border-secondary bg-background-secondary p-8 text-center\">\n <Icon\n icon=\"mdi:transit-connection-variant\"\n className=\"mx-auto mb-3 text-text-secondary\"\n width={32}\n />\n <p className=\"font-medium text-text-primary\">\n {tr(\n \"fluidgrids.settings.logStreaming.emptyTitle\",\n \"No log destinations yet\",\n )}\n </p>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.settings.logStreaming.emptyDescription\",\n \"Add a webhook, syslog target, or Sentry DSN to start streaming events.\",\n )}\n </p>\n </div>\n )}\n {destinations.map((destination) => (\n <Card\n key={destination.id}\n className=\"border-border-secondary bg-background-secondary\"\n >\n <CardContent className=\"flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h3 className=\"font-medium text-text-primary\">\n {destination.name}\n </h3>\n <span className=\"rounded-full bg-background-tertiary px-2 py-0.5 text-xs text-text-secondary\">\n {destination.provider}\n </span>\n <span\n className={\n destination.isEnabled\n ? \"text-xs text-status-success-text\"\n : \"text-xs text-text-secondary\"\n }\n >\n {destination.isEnabled\n ? tr(\n \"fluidgrids.settings.logStreaming.enabledBadge\",\n \"Enabled\",\n )\n : tr(\n \"fluidgrids.settings.logStreaming.disabledBadge\",\n \"Disabled\",\n )}\n </span>\n </div>\n <p className=\"mt-1 truncate text-sm text-text-secondary\">\n {destination.endpoint}\n </p>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {destination.eventFilters.length > 0\n ? destination.eventFilters.map(eventLabel).join(\", \")\n : tr(\n \"fluidgrids.settings.logStreaming.allEvents\",\n \"All events\",\n )}\n {destination.hasSecret && \" · Secret configured\"}\n </p>\n {destination.lastDispatchError && (\n <p className=\"mt-2 text-xs text-status-error-text\">\n {destination.lastDispatchError}\n </p>\n )}\n </div>\n <div className=\"flex shrink-0 flex-wrap gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void sendTest(destination)}\n disabled={actions.loading}\n >\n <Icon\n icon=\"mdi:send-check-outline\"\n className=\"mr-1\"\n width={15}\n />\n {tr(\"fluidgrids.settings.logStreaming.test\", \"Send test\")}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setEditingId(destination.id);\n setShowForm(true);\n }}\n disabled={actions.loading}\n >\n {tr(\"fluidgrids.settings.logStreaming.editButton\", \"Edit\")}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => void remove(destination)}\n disabled={actions.loading}\n >\n <Icon\n icon=\"mdi:trash-can-outline\"\n className=\"text-status-error-text\"\n width={17}\n />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.settings.logStreaming.delete\", \"Delete\")}\n </span>\n </Button>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FluidGridsProvider, Card } from './chunk-
|
|
1
|
+
import { FluidGridsProvider, Card } from './chunk-XF7QA3QT.js';
|
|
2
2
|
import { Input } from './chunk-P5PKRQAO.js';
|
|
3
3
|
import { Button } from './chunk-DBOMRIP5.js';
|
|
4
4
|
import { cn } from './chunk-3ZYUGTIT.js';
|
|
@@ -537,5 +537,5 @@ function WorkflowSearchRedirect() {
|
|
|
537
537
|
}
|
|
538
538
|
|
|
539
539
|
export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };
|
|
540
|
-
//# sourceMappingURL=chunk-
|
|
541
|
-
//# sourceMappingURL=chunk-
|
|
540
|
+
//# sourceMappingURL=chunk-5PZDLMC4.js.map
|
|
541
|
+
//# sourceMappingURL=chunk-5PZDLMC4.js.map
|