@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.
Files changed (44) hide show
  1. package/dist/{ExecutionDetailPage-22KHNXBI.js → ExecutionDetailPage-BD7CS4KL.js} +4 -4
  2. package/dist/{ExecutionDetailPage-22KHNXBI.js.map → ExecutionDetailPage-BD7CS4KL.js.map} +1 -1
  3. package/dist/{ExecutionsListPage-NQWK2NCN.js → ExecutionsListPage-VOGSLA7T.js} +4 -4
  4. package/dist/{ExecutionsListPage-NQWK2NCN.js.map → ExecutionsListPage-VOGSLA7T.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-2PLQT5OZ.js → WorkflowBuilder-WLJBVVHS.js} +4 -4
  6. package/dist/{WorkflowBuilder-2PLQT5OZ.js.map → WorkflowBuilder-WLJBVVHS.js.map} +1 -1
  7. package/dist/{WorkflowsList-M2GOHL6L.js → WorkflowsList-O7SLDXML.js} +3 -3
  8. package/dist/{WorkflowsList-M2GOHL6L.js.map → WorkflowsList-O7SLDXML.js.map} +1 -1
  9. package/dist/{chunk-YNDQYVT2.js → chunk-4C6UYNC5.js} +3 -3
  10. package/dist/{chunk-YNDQYVT2.js.map → chunk-4C6UYNC5.js.map} +1 -1
  11. package/dist/{chunk-24A4C63H.js → chunk-5A7GP6O7.js} +189 -67
  12. package/dist/chunk-5A7GP6O7.js.map +1 -0
  13. package/dist/{chunk-C7OR5C6R.js → chunk-5PZDLMC4.js} +3 -3
  14. package/dist/{chunk-C7OR5C6R.js.map → chunk-5PZDLMC4.js.map} +1 -1
  15. package/dist/{chunk-EGQB462S.js → chunk-FKOUPL6Z.js} +355 -128
  16. package/dist/chunk-FKOUPL6Z.js.map +1 -0
  17. package/dist/{chunk-AQBWMYKP.js → chunk-HNVWIVJH.js} +52 -16
  18. package/dist/chunk-HNVWIVJH.js.map +1 -0
  19. package/dist/{chunk-ILH7U6VB.js → chunk-LH2YML5F.js} +3 -3
  20. package/dist/{chunk-ILH7U6VB.js.map → chunk-LH2YML5F.js.map} +1 -1
  21. package/dist/{chunk-RRBFISAU.js → chunk-TEZV7I6A.js} +3 -3
  22. package/dist/{chunk-RRBFISAU.js.map → chunk-TEZV7I6A.js.map} +1 -1
  23. package/dist/{chunk-PTI43PVQ.js → chunk-TOHTP3BT.js} +3 -3
  24. package/dist/{chunk-PTI43PVQ.js.map → chunk-TOHTP3BT.js.map} +1 -1
  25. package/dist/{chunk-WTKMWWSI.js → chunk-VTPBYPDV.js} +10 -4
  26. package/dist/chunk-VTPBYPDV.js.map +1 -0
  27. package/dist/{chunk-XQ7FGXPM.js → chunk-X3OSUZIS.js} +397 -7
  28. package/dist/chunk-X3OSUZIS.js.map +1 -0
  29. package/dist/{chunk-JMJRE5RT.js → chunk-XF7QA3QT.js} +414 -152
  30. package/dist/chunk-XF7QA3QT.js.map +1 -0
  31. package/dist/executions.js +3 -3
  32. package/dist/index.js +17 -17
  33. package/dist/observability.js +2 -2
  34. package/dist/settings.js +2 -2
  35. package/dist/templates.js +2 -2
  36. package/dist/workflow-builder.js +3 -3
  37. package/dist/workflows-list.js +1 -1
  38. package/package.json +1 -1
  39. package/dist/chunk-24A4C63H.js.map +0 -1
  40. package/dist/chunk-AQBWMYKP.js.map +0 -1
  41. package/dist/chunk-EGQB462S.js.map +0 -1
  42. package/dist/chunk-JMJRE5RT.js.map +0 -1
  43. package/dist/chunk-WTKMWWSI.js.map +0 -1
  44. 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(Button, { variant: "outline", size: "sm", className: "ml-3", onClick: () => void refetch(), children: tr("fluidgrids.settings.logStreaming.retry", "Retry") })
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("fluidgrids.settings.logStreaming.edit", "Edit destination") : tr("fluidgrids.settings.logStreaming.new", "New destination") }),
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) => ({ ...current, name: event.target.value })),
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) => ({ ...current, endpoint: event.target.value })),
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("fluidgrids.settings.logStreaming.secret", "Signing secret") }),
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) => ({ ...current, secret: event.target.value })),
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("fluidgrids.settings.logStreaming.config", "Provider configuration (JSON)") }),
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) => ({ ...current, configText: event.target.value })),
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("fluidgrids.settings.logStreaming.events", "Events to stream") }),
525
- /* @__PURE__ */ jsx("div", { className: "grid gap-2 sm:grid-cols-2 lg:grid-cols-4", children: LOG_STREAM_EVENT_TYPES.map((event) => /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 text-sm text-text-secondary", children: [
526
- /* @__PURE__ */ jsx(
527
- "input",
528
- {
529
- type: "checkbox",
530
- checked: form.eventFilters.includes(event),
531
- onChange: () => toggleEvent(event),
532
- className: "size-4 rounded border-border-secondary accent-action-primary-bg"
533
- }
534
- ),
535
- eventLabel(event)
536
- ] }, event)) })
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) => ({ ...current, isEnabled: event.target.checked })),
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("fluidgrids.settings.logStreaming.enabled", "Destination enabled")
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("fluidgrids.settings.logStreaming.save", "Save destination") })
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("fluidgrids.settings.logStreaming.loading", "Loading destinations\u2026") }),
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(Icon, { icon: "mdi:transit-connection-variant", className: "mx-auto mb-3 text-text-secondary", width: 32 }),
560
- /* @__PURE__ */ jsx("p", { className: "font-medium text-text-primary", children: tr("fluidgrids.settings.logStreaming.emptyTitle", "No log destinations yet") }),
561
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-text-secondary", children: tr("fluidgrids.settings.logStreaming.emptyDescription", "Add a webhook, syslog target, or Sentry DSN to start streaming events.") })
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(Card, { className: "border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardContent, { className: "flex flex-col gap-4 p-4 sm:flex-row sm:items-center sm:justify-between", children: [
564
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
565
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
566
- /* @__PURE__ */ jsx("h3", { className: "font-medium text-text-primary", children: destination.name }),
567
- /* @__PURE__ */ jsx("span", { className: "rounded-full bg-background-tertiary px-2 py-0.5 text-xs text-text-secondary", children: destination.provider }),
568
- /* @__PURE__ */ jsx("span", { className: destination.isEnabled ? "text-xs text-status-success-text" : "text-xs text-text-secondary", children: destination.isEnabled ? tr("fluidgrids.settings.logStreaming.enabledBadge", "Enabled") : tr("fluidgrids.settings.logStreaming.disabledBadge", "Disabled") })
569
- ] }),
570
- /* @__PURE__ */ jsx("p", { className: "mt-1 truncate text-sm text-text-secondary", children: destination.endpoint }),
571
- /* @__PURE__ */ jsxs("p", { className: "mt-1 text-xs text-text-secondary", children: [
572
- destination.eventFilters.length > 0 ? destination.eventFilters.map(eventLabel).join(", ") : tr("fluidgrids.settings.logStreaming.allEvents", "All events"),
573
- destination.hasSecret && " \xB7 Secret configured"
574
- ] }),
575
- destination.lastDispatchError && /* @__PURE__ */ jsx("p", { className: "mt-2 text-xs text-status-error-text", children: destination.lastDispatchError })
576
- ] }),
577
- /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 flex-wrap gap-2", children: [
578
- /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: () => void sendTest(destination), disabled: actions.loading, children: [
579
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:send-check-outline", className: "mr-1", width: 15 }),
580
- tr("fluidgrids.settings.logStreaming.test", "Send test")
581
- ] }),
582
- /* @__PURE__ */ jsx(
583
- Button,
584
- {
585
- variant: "outline",
586
- size: "sm",
587
- onClick: () => {
588
- setEditingId(destination.id);
589
- setShowForm(true);
590
- },
591
- disabled: actions.loading,
592
- children: tr("fluidgrids.settings.logStreaming.editButton", "Edit")
593
- }
594
- ),
595
- /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: () => void remove(destination), disabled: actions.loading, children: [
596
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:trash-can-outline", className: "text-status-error-text", width: 17 }),
597
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: tr("fluidgrids.settings.logStreaming.delete", "Delete") })
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
- ] }) }, destination.id))
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-24A4C63H.js.map
607
- //# sourceMappingURL=chunk-24A4C63H.js.map
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-JMJRE5RT.js';
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-C7OR5C6R.js.map
541
- //# sourceMappingURL=chunk-C7OR5C6R.js.map
540
+ //# sourceMappingURL=chunk-5PZDLMC4.js.map
541
+ //# sourceMappingURL=chunk-5PZDLMC4.js.map