@burdenoff/fluidgrids-fe-sdk 2026.922.13 → 2026.923.1
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 +12 -0
- package/dist/{ExecutionDetailPage-OSDL7NDT.js.map → ExecutionDetailPage-22KHNXBI.js.map} +1 -1
- package/dist/ExecutionsListPage-NQWK2NCN.js +11 -0
- package/dist/{ExecutionsListPage-AATDFFIH.js.map → ExecutionsListPage-NQWK2NCN.js.map} +1 -1
- package/dist/{WorkflowBuilder-D7RKU4UK.js → WorkflowBuilder-2PLQT5OZ.js} +8 -8
- package/dist/{WorkflowBuilder-D7RKU4UK.js.map → WorkflowBuilder-2PLQT5OZ.js.map} +1 -1
- package/dist/{WorkflowsList-JHM7Q5HE.js → WorkflowsList-M2GOHL6L.js} +6 -6
- package/dist/{WorkflowsList-JHM7Q5HE.js.map → WorkflowsList-M2GOHL6L.js.map} +1 -1
- package/dist/chunk-24A4C63H.js +607 -0
- package/dist/chunk-24A4C63H.js.map +1 -0
- package/dist/{chunk-EUZZLC3N.js → chunk-AQBWMYKP.js} +166 -6
- package/dist/chunk-AQBWMYKP.js.map +1 -0
- package/dist/{chunk-MTWEYC2W.js → chunk-C7OR5C6R.js} +4 -4
- package/dist/{chunk-MTWEYC2W.js.map → chunk-C7OR5C6R.js.map} +1 -1
- package/dist/chunk-EGQB462S.js +526 -0
- package/dist/chunk-EGQB462S.js.map +1 -0
- package/dist/{chunk-PTGKDQ5K.js → chunk-ILH7U6VB.js} +8 -2
- package/dist/chunk-ILH7U6VB.js.map +1 -0
- package/dist/{chunk-GWRX2T3K.js → chunk-JMJRE5RT.js} +6 -6
- package/dist/{chunk-GWRX2T3K.js.map → chunk-JMJRE5RT.js.map} +1 -1
- package/dist/chunk-NK32XOQN.js +248 -0
- package/dist/chunk-NK32XOQN.js.map +1 -0
- package/dist/{chunk-XQYAM47Y.js → chunk-PTI43PVQ.js} +4 -4
- package/dist/{chunk-XQYAM47Y.js.map → chunk-PTI43PVQ.js.map} +1 -1
- package/dist/{chunk-CVVNQCFM.js → chunk-Q4RPP67K.js} +4 -4
- package/dist/{chunk-CVVNQCFM.js.map → chunk-Q4RPP67K.js.map} +1 -1
- package/dist/{chunk-UNW4I442.js → chunk-Q7RJYGQK.js} +3 -3
- package/dist/{chunk-UNW4I442.js.map → chunk-Q7RJYGQK.js.map} +1 -1
- package/dist/{chunk-RJQJAN6J.js → chunk-RRBFISAU.js} +4 -4
- package/dist/{chunk-RJQJAN6J.js.map → chunk-RRBFISAU.js.map} +1 -1
- package/dist/{chunk-ISS73LG3.js → chunk-VPWQN7KV.js} +3 -3
- package/dist/{chunk-ISS73LG3.js.map → chunk-VPWQN7KV.js.map} +1 -1
- package/dist/{chunk-R6JFXZXN.js → chunk-WTKMWWSI.js} +41 -5
- package/dist/chunk-WTKMWWSI.js.map +1 -0
- package/dist/{chunk-IPVHC2DM.js → chunk-XQ7FGXPM.js} +3 -3
- package/dist/{chunk-IPVHC2DM.js.map → chunk-XQ7FGXPM.js.map} +1 -1
- package/dist/{chunk-5IAMVAGX.js → chunk-YNDQYVT2.js} +43 -5
- package/dist/chunk-YNDQYVT2.js.map +1 -0
- package/dist/executions.js +7 -6
- package/dist/history.js +4 -4
- package/dist/index.d.ts +71 -1
- package/dist/index.js +26 -23
- package/dist/index.js.map +1 -1
- package/dist/nodes.js +2 -2
- package/dist/observability-5ShR4Phm.d.ts +134 -0
- package/dist/observability.d.ts +2 -0
- package/dist/observability.js +8 -0
- package/dist/observability.js.map +1 -0
- package/dist/settings.js +5 -1
- package/dist/templates.js +6 -6
- package/dist/workflow-builder.js +7 -7
- package/dist/workflows-list.js +4 -4
- package/package.json +5 -1
- package/dist/ExecutionDetailPage-OSDL7NDT.js +0 -11
- package/dist/ExecutionsListPage-AATDFFIH.js +0 -10
- package/dist/chunk-5IAMVAGX.js.map +0 -1
- package/dist/chunk-EUZZLC3N.js.map +0 -1
- package/dist/chunk-PTGKDQ5K.js.map +0 -1
- package/dist/chunk-R6JFXZXN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/observability/utils.ts","../src/modules/observability/pages/DataSinkDashboardPage.tsx","../src/modules/observability/pages/InsightsPage.tsx"],"names":["jsxs","jsx","Icon","useState","useMemo","Button"],"mappings":"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","file":"chunk-EGQB462S.js","sourcesContent":["import type { FailedRun, NodeUsageStat } from \"./types\";\n\nexport interface ErrorBreakdownEntry {\n key: string;\n count: number;\n}\n\nexport interface WorkflowFailureEntry {\n workflowKey: string;\n label: string;\n count: number;\n}\n\nexport function percentage(value: number, total: number): number {\n if (total <= 0) return 0;\n return Math.round((value / total) * 1000) / 10;\n}\n\nexport function getFailureBreakdown(\n runs: readonly FailedRun[],\n): ErrorBreakdownEntry[] {\n const counts = new Map<string, number>();\n for (const run of runs) {\n const key = run.errorType || \"UNKNOWN\";\n counts.set(key, (counts.get(key) ?? 0) + 1);\n }\n return [...counts.entries()]\n .map(([key, count]) => ({ key, count }))\n .sort((a, b) => b.count - a.count || a.key.localeCompare(b.key));\n}\n\nexport function getTopFailingWorkflows(\n runs: readonly FailedRun[],\n): WorkflowFailureEntry[] {\n const counts = new Map<string, WorkflowFailureEntry>();\n for (const run of runs) {\n const current = counts.get(run.workflowKey);\n if (current) {\n current.count += 1;\n } else {\n counts.set(run.workflowKey, {\n workflowKey: run.workflowKey,\n label: run.workflow?.name || run.workflowKey,\n count: 1,\n });\n }\n }\n return [...counts.values()].sort(\n (a, b) => b.count - a.count || a.label.localeCompare(b.label),\n );\n}\n\nexport function getTopFailingNodes(\n nodeUsageStats: readonly NodeUsageStat[],\n): NodeUsageStat[] {\n return [...nodeUsageStats]\n .filter((stat) => stat.failureCount > 0)\n .sort(\n (a, b) =>\n b.failureCount - a.failureCount || a.nodeType.localeCompare(b.nodeType),\n );\n}\n\nexport function formatDuration(seconds: number | null | undefined): string {\n if (seconds === null || seconds === undefined || !Number.isFinite(seconds)) {\n return \"—\";\n }\n if (seconds < 1) return `${Math.round(seconds * 1000)}ms`;\n if (seconds < 60) return `${seconds.toFixed(1)}s`;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.round(seconds % 60);\n return `${minutes}m ${remainingSeconds}s`;\n}\n\nexport function formatBytes(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return \"—\";\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\", \"TB\"];\n let value = bytes / 1024;\n let unit = units[0];\n for (let i = 1; i < units.length && value >= 1024; i += 1) {\n value /= 1024;\n unit = units[i];\n }\n return `${value.toFixed(value >= 10 ? 0 : 1)} ${unit}`;\n}\n\nexport function prettyJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? \"null\";\n } catch {\n return String(value);\n }\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { Input } from \"@burdenoff/fe-libs/ui\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useDataSinkData, useDataSinks } from \"../hooks/useObservability\";\nimport { formatBytes, prettyJson } from \"../utils\";\nimport type { DataSinkSummary } from \"../types\";\n\nfunction valueLabel(value: unknown): string {\n if (value === null || value === undefined) return \"—\";\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nfunction DataPreview({ value }: { value: unknown }) {\n const tr = useTr();\n if (Array.isArray(value)) {\n const rows = value.filter(\n (item): item is Record<string, unknown> =>\n Boolean(item) && typeof item === \"object\" && !Array.isArray(item),\n );\n if (rows.length > 0) {\n const keys = [...new Set(rows.flatMap((row) => Object.keys(row)))].slice(0, 12);\n return (\n <div className=\"overflow-x-auto rounded-lg border border-border-secondary\">\n <table className=\"min-w-full text-left text-sm\">\n <thead className=\"bg-background-tertiary text-xs uppercase text-text-secondary\">\n <tr>{keys.map((key) => <th key={key} className=\"whitespace-nowrap px-3 py-2 font-medium\">{key}</th>)}</tr>\n </thead>\n <tbody className=\"divide-y divide-border-secondary\">\n {rows.slice(0, 50).map((row, index) => (\n <tr key={index} className=\"text-text-primary\">\n {keys.map((key) => <td key={key} className=\"max-w-xs truncate px-3 py-2\">{valueLabel(row[key])}</td>)}\n </tr>\n ))}\n </tbody>\n </table>\n {rows.length > 50 && <p className=\"border-t border-border-secondary px-3 py-2 text-xs text-text-secondary\">{tr(\"fluidgrids.dataSinks.previewLimit\", \"Showing the first 50 rows\")}</p>}\n </div>\n );\n }\n }\n return <pre className=\"max-h-[28rem] overflow-auto rounded-lg border border-border-secondary bg-background-primary p-4 text-xs text-text-primary\">{prettyJson(value)}</pre>;\n}\n\nfunction SinkCard({\n sink,\n selected,\n onSelect,\n}: {\n sink: DataSinkSummary;\n selected: boolean;\n onSelect: () => void;\n}) {\n const tr = useTr();\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={`w-full rounded-lg border p-4 text-left transition-colors ${selected ? \"border-action-primary-bg bg-action-primary-bg/10\" : \"border-border-secondary bg-background-secondary hover:border-action-primary-bg/60\"}`}\n aria-pressed={selected}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-text-primary\">{sink.name || sink.key}</p>\n <p className=\"mt-1 truncate font-mono text-xs text-text-secondary\">{sink.key}</p>\n </div>\n <span className=\"shrink-0 rounded-full bg-background-tertiary px-2 py-0.5 text-xs text-text-secondary\">{sink.status}</span>\n </div>\n <div className=\"mt-3 flex items-center justify-between text-xs text-text-secondary\">\n <span>{formatBytes(sink.sizeBytes)}</span>\n <span>{sink.linkedWorkflowCount} {tr(\"fluidgrids.dataSinks.workflows\", \"workflows\")}</span>\n </div>\n </button>\n );\n}\n\nexport function DataSinkDashboardPage() {\n const tr = useTr();\n const [search, setSearch] = useState(\"\");\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const { sinks, totalCount, loading, error, refetch } = useDataSinks(search);\n const selectedSink = useMemo(\n () => sinks.find((sink) => sink.id === selectedId) ?? sinks[0] ?? null,\n [selectedId, sinks],\n );\n const {\n sinkData,\n loading: dataLoading,\n error: dataError,\n refetch: refetchData,\n } = useDataSinkData(selectedSink);\n\n useEffect(() => {\n if (selectedSink && selectedSink.id !== selectedId) setSelectedId(selectedSink.id);\n }, [selectedId, selectedSink]);\n\n const payload = sinkData?.extracted ?? sinkData?.raw;\n const totalBytes = sinks.reduce((total, sink) => total + sink.sizeBytes, 0);\n\n return (\n <div className=\"min-h-screen bg-background-primary p-4 sm:p-6\">\n <header className=\"mb-6 flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">{tr(\"fluidgrids.dataSinks.kicker\", \"BigConsole data\")}</p>\n <h1 className=\"mt-1 text-2xl font-semibold text-text-primary sm:text-3xl\">{tr(\"fluidgrids.dataSinks.title\", \"DataSink dashboard\")}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.subtitle\", \"Inspect workflow-produced data and its freshness without leaving FluidGrids.\")}</p>\n </div>\n <Button variant=\"outline\" onClick={() => void refetch()} disabled={loading}><Icon icon=\"mdi:refresh\" className=\"mr-1\" width={16} />{tr(\"fluidgrids.dataSinks.refresh\", \"Refresh\")}</Button>\n </header>\n\n <section className=\"mb-6 grid gap-4 sm:grid-cols-3\">\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-4\"><p className=\"text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.totalSinks\", \"DataSinks\")}</p><p className=\"mt-2 text-2xl font-semibold text-text-primary\">{totalCount}</p></div>\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-4\"><p className=\"text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.activeSinks\", \"Active sinks\")}</p><p className=\"mt-2 text-2xl font-semibold text-status-success-text\">{sinks.filter((sink) => sink.isActive).length}</p></div>\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-4\"><p className=\"text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.totalStorage\", \"Visible storage\")}</p><p className=\"mt-2 text-2xl font-semibold text-text-primary\">{formatBytes(totalBytes)}</p></div>\n </section>\n\n {error && <div role=\"alert\" className=\"mb-6 rounded-lg border border-status-error-border bg-status-error-bg-subtle p-4 text-sm text-status-error-text\">{error.message}</div>}\n <div className=\"grid gap-6 xl:grid-cols-[22rem_minmax(0,1fr)]\">\n <aside className=\"space-y-3\">\n <Input value={search} onChange={(event) => setSearch(event.target.value)} placeholder={tr(\"fluidgrids.dataSinks.search\", \"Search by name or key\")} aria-label={tr(\"fluidgrids.dataSinks.search\", \"Search by name or key\")} />\n {loading && sinks.length === 0 && <p className=\"p-4 text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.loading\", \"Loading DataSinks…\")}</p>}\n {!loading && sinks.length === 0 && <div className=\"rounded-lg border border-dashed border-border-secondary p-6 text-center text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.empty\", \"No active DataSinks found.\")}</div>}\n {sinks.map((sink) => <SinkCard key={sink.id} sink={sink} selected={sink.id === selectedSink?.id} onSelect={() => setSelectedId(sink.id)} />)}\n </aside>\n\n <main className=\"min-w-0 rounded-xl border border-border-secondary bg-background-secondary p-5\">\n {!selectedSink && <div className=\"flex min-h-64 flex-col items-center justify-center text-center\"><Icon icon=\"mdi:database-outline\" className=\"mb-3 text-text-secondary\" width={40} /><p className=\"font-medium text-text-primary\">{tr(\"fluidgrids.dataSinks.selectTitle\", \"Select a DataSink\")}</p><p className=\"mt-1 text-sm text-text-secondary\">{tr(\"fluidgrids.dataSinks.selectDescription\", \"Choose a sink to inspect its latest payload.\")}</p></div>}\n {selectedSink && (\n <>\n <div className=\"mb-5 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\"><h2 className=\"truncate text-lg font-semibold text-text-primary\">{selectedSink.name || selectedSink.key}</h2><p className=\"mt-1 font-mono text-xs text-text-secondary\">{selectedSink.key} · {tr(\"fluidgrids.dataSinks.updated\", \"Updated\")} {new Date(selectedSink.lastRefreshedAt).toLocaleString()}</p></div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void refetchData()} disabled={dataLoading}><Icon icon=\"mdi:database-refresh-outline\" className=\"mr-1\" width={16} />{tr(\"fluidgrids.dataSinks.refreshPayload\", \"Refresh payload\")}</Button>\n </div>\n {dataError && <div role=\"alert\" className=\"mb-4 rounded-lg border border-status-error-border bg-status-error-bg-subtle p-3 text-sm text-status-error-text\">{dataError.message}</div>}\n {dataLoading && !sinkData && <div className=\"h-64 animate-pulse rounded-lg bg-background-primary\" />}\n {!dataLoading && sinkData && <><div className=\"mb-4 flex flex-wrap gap-3 text-xs text-text-secondary\"><span>{sinkData.cached ? tr(\"fluidgrids.dataSinks.cached\", \"Cached\") : tr(\"fluidgrids.dataSinks.fresh\", \"Fresh\")}</span><span>v{sinkData.version}</span>{sinkData.totalCount !== null && sinkData.totalCount !== undefined && <span>{sinkData.totalCount} rows</span>}</div><DataPreview value={payload} /></>}\n </>\n )}\n </main>\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { toast } from \"sonner\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useInsightsData, useRunReplayActions } from \"../hooks/useObservability\";\nimport {\n formatDuration,\n getFailureBreakdown,\n getTopFailingNodes,\n getTopFailingWorkflows,\n percentage,\n} from \"../utils\";\nimport type { DashboardSummary, FailedRun } from \"../types\";\n\nfunction normalizedRate(summary: DashboardSummary): number {\n const supplied = summary.workflowSuccessRate;\n if (supplied !== null && supplied !== undefined) {\n return supplied <= 1 ? supplied * 100 : supplied;\n }\n const finished = summary.runsCompletedCount + summary.runsFailedCount;\n return percentage(summary.runsCompletedCount, finished);\n}\n\nfunction MetricCard({\n icon,\n label,\n value,\n detail,\n tone = \"text-text-primary\",\n}: {\n icon: string;\n label: string;\n value: string;\n detail?: string;\n tone?: string;\n}) {\n return (\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Icon icon={icon} width={18} />\n <span>{label}</span>\n </div>\n <p className={`mt-3 text-2xl font-semibold ${tone}`}>{value}</p>\n {detail && <p className=\"mt-1 text-xs text-text-secondary\">{detail}</p>}\n </div>\n );\n}\n\nfunction LoadingState() {\n return (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\" aria-busy=\"true\">\n {[1, 2, 3, 4].map((item) => (\n <div\n key={item}\n className=\"h-28 animate-pulse rounded-xl border border-border-secondary bg-background-secondary\"\n />\n ))}\n </div>\n );\n}\n\nexport interface InsightsPageProps {\n showErrors?: boolean;\n}\n\nexport function InsightsPage({ showErrors = false }: InsightsPageProps) {\n const tr = useTr();\n const navigate = useNavigate();\n const { summary, failedRuns, loading, error, refetch } = useInsightsData();\n const { retryMany, loading: retryLoading } = useRunReplayActions();\n const [activeTab, setActiveTab] = useState<\"overview\" | \"errors\">(\n showErrors ? \"errors\" : \"overview\",\n );\n\n const failureBreakdown = useMemo(\n () => getFailureBreakdown(failedRuns),\n [failedRuns],\n );\n const topWorkflows = useMemo(\n () => getTopFailingWorkflows(failedRuns).slice(0, 8),\n [failedRuns],\n );\n const topNodes = useMemo(\n () => getTopFailingNodes(summary?.nodeUsageStats ?? []).slice(0, 8),\n [summary?.nodeUsageStats],\n );\n\n const retry = async (run: FailedRun) => {\n const retried = await retryMany([run.id]);\n if (retried.length === 0) {\n toast.error(\n tr(\n \"fluidgrids.insights.retryFailed\",\n \"Could not retry the failed run\",\n ),\n );\n return;\n }\n toast.success(\n tr(\"fluidgrids.insights.retryStarted\", \"A new run was started\"),\n );\n navigate(`../runs/${retried[0].runId}`);\n };\n\n if (error) {\n return (\n <div className=\"min-h-screen bg-background-primary p-4 sm:p-6\">\n <div className=\"rounded-lg border border-status-error-border bg-status-error-bg-subtle p-5 text-status-error-text\" role=\"alert\">\n <p className=\"font-medium\">{tr(\"fluidgrids.insights.loadError\", \"Could not load insights\")}</p>\n <p className=\"mt-1 text-sm\">{error.message}</p>\n <Button variant=\"outline\" size=\"sm\" className=\"mt-3\" onClick={() => void refetch()}>\n {tr(\"fluidgrids.insights.retryLoad\", \"Try again\")}\n </Button>\n </div>\n </div>\n );\n }\n\n const successRate = summary ? normalizedRate(summary) : 0;\n const failureRate = summary\n ? percentage(summary.runsFailedCount, summary.runsCountTotal)\n : 0;\n const commonError = failureBreakdown[0];\n\n return (\n <div className=\"min-h-screen bg-background-primary p-4 sm:p-6\">\n <header className=\"mb-6 flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n {tr(\"fluidgrids.insights.period\", \"Last 30 days\")}\n </p>\n <h1 className=\"mt-1 text-2xl font-semibold text-text-primary sm:text-3xl\">\n {tr(\"fluidgrids.insights.title\", \"Workflow insights\")}\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {tr(\n \"fluidgrids.insights.subtitle\",\n \"Understand workflow health, failures, and the nodes that need attention.\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => void refetch()} disabled={loading}>\n <Icon icon=\"mdi:refresh\" className=\"mr-1\" width={16} />\n {tr(\"fluidgrids.insights.refresh\", \"Refresh\")}\n </Button>\n </header>\n\n <div className=\"mb-6 flex gap-1 border-b border-border-secondary\" role=\"tablist\">\n <button\n role=\"tab\"\n aria-selected={activeTab === \"overview\"}\n onClick={() => {\n setActiveTab(\"overview\");\n if (showErrors) navigate(\"../insights\");\n }}\n className={`border-b-2 px-3 py-2 text-sm ${activeTab === \"overview\" ? \"border-action-primary-bg text-text-primary\" : \"border-transparent text-text-secondary\"}`}\n >\n {tr(\"fluidgrids.insights.overviewTab\", \"Overview\")}\n </button>\n <button\n role=\"tab\"\n aria-selected={activeTab === \"errors\"}\n onClick={() => {\n setActiveTab(\"errors\");\n if (!showErrors) navigate(\"../insights/errors\");\n }}\n className={`border-b-2 px-3 py-2 text-sm ${activeTab === \"errors\" ? \"border-action-primary-bg text-text-primary\" : \"border-transparent text-text-secondary\"}`}\n >\n {tr(\"fluidgrids.insights.errorsTab\", \"Error analytics\")}\n </button>\n </div>\n\n {loading && !summary ? (\n <LoadingState />\n ) : activeTab === \"overview\" && summary ? (\n <OverviewContent\n summary={summary}\n successRate={successRate}\n failureRate={failureRate}\n topWorkflows={topWorkflows}\n topNodes={topNodes}\n tr={tr}\n />\n ) : (\n <ErrorContent\n summary={summary}\n failedRuns={failedRuns}\n failureBreakdown={failureBreakdown}\n commonError={commonError}\n retry={retry}\n retryLoading={retryLoading}\n tr={tr}\n />\n )}\n </div>\n );\n}\n\nfunction OverviewContent({\n summary,\n successRate,\n failureRate,\n topWorkflows,\n topNodes,\n tr,\n}: {\n summary: DashboardSummary;\n successRate: number;\n failureRate: number;\n topWorkflows: ReturnType<typeof getTopFailingWorkflows>;\n topNodes: ReturnType<typeof getTopFailingNodes>;\n tr: ReturnType<typeof useTr>;\n}) {\n const totalDuration = summary.runsCompletedCount * (summary.avgWorkflowExecutionTimeSeconds ?? 0);\n return (\n <div className=\"space-y-6\">\n <section className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\" aria-label={tr(\"fluidgrids.insights.healthLabel\", \"Workflow health\")}>\n <MetricCard\n icon=\"mdi:chart-line\"\n label={tr(\"fluidgrids.insights.successRate\", \"Success rate\")}\n value={`${successRate.toFixed(1)}%`}\n detail={`${summary.runsCompletedCount.toLocaleString()} completed runs`}\n tone=\"text-status-success-text\"\n />\n <MetricCard\n icon=\"mdi:clock-outline\"\n label={tr(\"fluidgrids.insights.avgDuration\", \"Average duration\")}\n value={formatDuration(summary.avgWorkflowExecutionTimeSeconds)}\n detail={`${summary.runsCountTotal.toLocaleString()} total runs`}\n />\n <MetricCard\n icon=\"mdi:alert-circle-outline\"\n label={tr(\"fluidgrids.insights.failedRuns\", \"Failed runs\")}\n value={summary.runsFailedCount.toLocaleString()}\n detail={`${failureRate.toFixed(1)}% of all runs`}\n tone=\"text-status-error-text\"\n />\n <MetricCard\n icon=\"mdi:timer-play-outline\"\n label={tr(\"fluidgrids.insights.timeProcessed\", \"Execution time processed\")}\n value={formatDuration(totalDuration)}\n detail={tr(\"fluidgrids.insights.timeProcessedDetail\", \"Based on completed runs; time-saved baselines are not configured.\")}\n />\n </section>\n\n <section className=\"grid gap-6 lg:grid-cols-2\">\n <InsightList\n title={tr(\"fluidgrids.insights.topFailingWorkflows\", \"Top failing workflows\")}\n empty={tr(\"fluidgrids.insights.noFailedWorkflows\", \"No failed workflows in this period.\")}\n >\n {topWorkflows.map((workflow) => (\n <div key={workflow.workflowKey} className=\"flex items-center gap-3\">\n <span className=\"min-w-0 flex-1 truncate text-sm text-text-primary\">{workflow.label}</span>\n <div className=\"h-2 w-28 overflow-hidden rounded-full bg-background-tertiary\">\n <div className=\"h-full rounded-full bg-status-error-bg\" style={{ width: `${Math.max(8, percentage(workflow.count, topWorkflows[0]?.count ?? 1))}%` }} />\n </div>\n <span className=\"w-8 text-right text-sm font-medium text-text-secondary\">{workflow.count}</span>\n </div>\n ))}\n </InsightList>\n <InsightList\n title={tr(\"fluidgrids.insights.topFailingNodes\", \"Top failing nodes\")}\n empty={tr(\"fluidgrids.insights.noFailedNodes\", \"No node failures in this period.\")}\n >\n {topNodes.map((node) => (\n <div key={node.nodeType} className=\"flex items-center gap-3\">\n <span className=\"min-w-0 flex-1 truncate text-sm text-text-primary\">{node.nodeType}</span>\n <div className=\"h-2 w-28 overflow-hidden rounded-full bg-background-tertiary\">\n <div className=\"h-full rounded-full bg-status-warning-bg\" style={{ width: `${Math.max(8, percentage(node.failureCount, topNodes[0]?.failureCount ?? 1))}%` }} />\n </div>\n <span className=\"w-8 text-right text-sm font-medium text-text-secondary\">{node.failureCount}</span>\n </div>\n ))}\n </InsightList>\n </section>\n </div>\n );\n}\n\nfunction InsightList({\n title,\n empty,\n children,\n}: {\n title: string;\n empty: string;\n children: React.ReactNode;\n}) {\n const hasChildren = Array.isArray(children) ? children.length > 0 : Boolean(children);\n return (\n <section className=\"rounded-xl border border-border-secondary bg-background-secondary p-5\">\n <h2 className=\"mb-4 text-base font-semibold text-text-primary\">{title}</h2>\n {hasChildren ? <div className=\"space-y-3\">{children}</div> : <p className=\"text-sm text-text-secondary\">{empty}</p>}\n </section>\n );\n}\n\nfunction ErrorContent({\n summary,\n failedRuns,\n failureBreakdown,\n commonError,\n retry,\n retryLoading,\n tr,\n}: {\n summary: DashboardSummary | null;\n failedRuns: FailedRun[];\n failureBreakdown: ReturnType<typeof getFailureBreakdown>;\n commonError?: { key: string; count: number };\n retry: (run: FailedRun) => Promise<void>;\n retryLoading: boolean;\n tr: ReturnType<typeof useTr>;\n}) {\n return (\n <div className=\"space-y-6\">\n <section className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <MetricCard icon=\"mdi:alert-outline\" label={tr(\"fluidgrids.insights.failureRate\", \"Failure rate\")} value={`${summary ? percentage(summary.runsFailedCount, summary.runsCountTotal).toFixed(1) : \"0.0\"}%`} tone=\"text-status-error-text\" />\n <MetricCard icon=\"mdi:counter\" label={tr(\"fluidgrids.insights.failureCount\", \"Failures captured\")} value={failedRuns.length.toLocaleString()} detail={summary ? `${summary.runsFailedCount.toLocaleString()} total recorded` : undefined} />\n <MetricCard icon=\"mdi:alert-decagram-outline\" label={tr(\"fluidgrids.insights.commonError\", \"Most common error\")} value={commonError?.key ?? \"—\"} detail={commonError ? `${commonError.count} occurrences` : undefined} />\n <MetricCard icon=\"mdi:repeat\" label={tr(\"fluidgrids.insights.recoveredByRetry\", \"Recovered by retry\")} value=\"—\" detail={tr(\"fluidgrids.insights.retryBaselineMissing\", \"Retry recovery baseline is not exposed by the service yet.\")} tone=\"text-text-secondary\" />\n </section>\n <section className=\"grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)]\">\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-5\">\n <h2 className=\"mb-4 text-base font-semibold text-text-primary\">{tr(\"fluidgrids.insights.errorsByType\", \"Errors by type\")}</h2>\n <div className=\"space-y-3\">\n {failureBreakdown.length === 0 && <p className=\"text-sm text-text-secondary\">{tr(\"fluidgrids.insights.noErrors\", \"No errors in this period.\")}</p>}\n {failureBreakdown.map((entry) => (\n <div key={entry.key} className=\"flex items-center gap-3\">\n <span className=\"w-28 truncate text-sm text-text-secondary\">{entry.key}</span>\n <div className=\"h-2 flex-1 overflow-hidden rounded-full bg-background-tertiary\"><div className=\"h-full rounded-full bg-status-error-bg\" style={{ width: `${Math.max(8, percentage(entry.count, failureBreakdown[0]?.count ?? 1))}%` }} /></div>\n <span className=\"w-8 text-right text-sm font-medium text-text-primary\">{entry.count}</span>\n </div>\n ))}\n </div>\n </div>\n <div className=\"rounded-xl border border-border-secondary bg-background-secondary p-5\">\n <div className=\"mb-4 flex items-center justify-between gap-3\">\n <h2 className=\"text-base font-semibold text-text-primary\">{tr(\"fluidgrids.insights.recentFailures\", \"Recent failures\")}</h2>\n <span className=\"text-xs text-text-secondary\">{tr(\"fluidgrids.insights.sampleNote\", \"Showing the latest 100 failures\")}</span>\n </div>\n <div className=\"divide-y divide-border-secondary\">\n {failedRuns.length === 0 && <p className=\"py-3 text-sm text-text-secondary\">{tr(\"fluidgrids.insights.noRecentFailures\", \"No recent failures.\")}</p>}\n {failedRuns.slice(0, 12).map((run) => (\n <div key={run.id} className=\"flex flex-col gap-2 py-3 sm:flex-row sm:items-center sm:gap-4\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-sm font-medium text-text-primary\">{run.errorMessage || run.errorType || \"Workflow failed\"}</p>\n <p className=\"mt-0.5 truncate text-xs text-text-secondary\">{run.workflow?.name || run.workflowKey} · {run.id.slice(0, 10)} · {formatDuration(run.duration)}</p>\n </div>\n <span className=\"rounded-full bg-status-error-bg-subtle px-2 py-1 text-xs text-status-error-text\">{run.errorType || \"UNKNOWN\"}</span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void retry(run)} disabled={retryLoading}>{tr(\"fluidgrids.insights.retry\", \"Retry\")}</Button>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n );\n}\n\nexport function ErrorAnalyticsPage() {\n return <InsightsPage showErrors />;\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LogStreamingTab } from './chunk-24A4C63H.js';
|
|
1
2
|
import { useFlowStore } from './chunk-YMD3T6J2.js';
|
|
2
3
|
import { useWorkflowDefinitionQuery, useUpdateWorkflowDefinitionMutation, useWorkflowDefinitionsQuery } from './chunk-BHITFSOK.js';
|
|
3
4
|
import { useTr } from './chunk-7YWBH2A5.js';
|
|
@@ -660,6 +661,10 @@ function SettingsPage({
|
|
|
660
661
|
/* @__PURE__ */ jsx(Icon, { icon: "mdi:bell-outline", width: 16 }),
|
|
661
662
|
tr("fluidgrids.settings.page.notificationsTab", "Notifications")
|
|
662
663
|
] }),
|
|
664
|
+
/* @__PURE__ */ jsxs(TabsTrigger, { value: "log-streaming", className: "gap-1.5", children: [
|
|
665
|
+
/* @__PURE__ */ jsx(Icon, { icon: "mdi:transit-connection-variant", width: 16 }),
|
|
666
|
+
tr("fluidgrids.settings.page.logStreamingTab", "Log streaming")
|
|
667
|
+
] }),
|
|
663
668
|
/* @__PURE__ */ jsxs(TabsTrigger, { value: "api", className: "gap-1.5", children: [
|
|
664
669
|
/* @__PURE__ */ jsx(Icon, { icon: "mdi:api", width: 16 }),
|
|
665
670
|
tr("fluidgrids.settings.page.apiTab", "API")
|
|
@@ -668,11 +673,12 @@ function SettingsPage({
|
|
|
668
673
|
/* @__PURE__ */ jsx(TabsContent, { value: "general", children: /* @__PURE__ */ jsx(GeneralTab, {}) }),
|
|
669
674
|
/* @__PURE__ */ jsx(TabsContent, { value: "execution", children: /* @__PURE__ */ jsx(ExecutionTab, { workflowKey }) }),
|
|
670
675
|
/* @__PURE__ */ jsx(TabsContent, { value: "notifications", children: /* @__PURE__ */ jsx(NotificationsTab, {}) }),
|
|
676
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "log-streaming", children: /* @__PURE__ */ jsx(LogStreamingTab, {}) }),
|
|
671
677
|
/* @__PURE__ */ jsx(TabsContent, { value: "api", children: /* @__PURE__ */ jsx(ApiTab, {}) })
|
|
672
678
|
] })
|
|
673
679
|
] });
|
|
674
680
|
}
|
|
675
681
|
|
|
676
682
|
export { SettingsPage };
|
|
677
|
-
//# sourceMappingURL=chunk-
|
|
678
|
-
//# sourceMappingURL=chunk-
|
|
683
|
+
//# sourceMappingURL=chunk-ILH7U6VB.js.map
|
|
684
|
+
//# sourceMappingURL=chunk-ILH7U6VB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/settings/pages/SettingsPage.tsx"],"names":[],"mappings":"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","file":"chunk-ILH7U6VB.js","sourcesContent":["import { useState, useCallback, useEffect, useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router\";\nimport { Icon } from \"@iconify/react\";\nimport { Button } from \"@burdenoff/fe-libs/button\";\nimport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n Input,\n Label,\n Switch,\n Card,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n Select,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectItem,\n} from \"@burdenoff/fe-libs/ui\";\nimport { toast } from \"sonner\";\nimport { useTr } from \"../../../hooks/useTr\";\nimport { useFlowStore } from \"../../../builder/stores/flow-store\";\nimport { LogStreamingTab } from \"../../observability/components/LogStreamingTab\";\nimport {\n useWorkflowDefinitionQuery,\n useUpdateWorkflowDefinitionMutation,\n useWorkflowDefinitionsQuery,\n} from \"../../../generated/operations\";\n\n// ============================================================================\n// Per-workflow execution settings (BOFF-7512)\n// ============================================================================\n\n/**\n * Mirrors `IWorkflowConfig` on `wspace-workflow-svc`'s\n * `IWorkflowDefinitionJson.config` (a sibling of `data`, not nested inside\n * it), plus two fields the backend type doesn't have yet: `errorWorkflowKey`\n * and `dataSaving`. Per the ticket, \"if the underlying setting doesn't exist\n * yet, add just the schema field and wire the UI\" — `config` on\n * `definitionJson` is already a free-form JSON blob, so these new keys need\n * no backend schema change to round-trip; nothing downstream reads\n * `dataSaving.saveSuccessExecutions`/`saveFailedExecutions` yet (that's\n * execution-lifecycle work tracked separately), but the value now persists.\n */\ninterface WorkflowExecutionSettings {\n timeout?: number; // seconds\n maxParallelism?: number;\n onError?: \"stop\" | \"continue\" | \"retry\";\n /** Workflow key to run when this workflow's execution fails. */\n errorWorkflowKey?: string;\n dataSaving?: {\n saveSuccessExecutions?: boolean;\n saveFailedExecutions?: boolean;\n };\n}\n\nconst DEFAULT_EXECUTION_SETTINGS: Required<\n Pick<WorkflowExecutionSettings, \"timeout\" | \"maxParallelism\" | \"onError\">\n> = {\n timeout: 300,\n maxParallelism: 5,\n onError: \"stop\",\n};\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_SETTINGS = {\n general: {\n workspaceName: \"Default Workspace\",\n defaultWorkflowPrefix: \"wf\",\n autoSaveDrafts: true,\n },\n execution: {\n defaultTimeoutSeconds: 300,\n maxRetries: 3,\n retryDelaySeconds: 10,\n concurrentExecutionLimit: 5,\n },\n notifications: {\n emailOnSuccess: false,\n emailOnFailure: true,\n webhookOnSuccess: false,\n webhookOnFailure: true,\n },\n api: {\n gatewayUrl: \"/api/v1/workflows\",\n webhookUrlFormat: \"/api/v1/webhooks/workflow/{workflowKey}/trigger\",\n },\n};\n\n// ============================================================================\n// Sub-Components\n// ============================================================================\n\nfunction ReadOnlyBanner() {\n const tr = useTr();\n\n return (\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.readOnlyBanner.message\",\n \"Settings are managed at workspace level. Contact your workspace administrator to change these values.\",\n )}\n </p>\n </div>\n );\n}\n\nfunction CopyButton({ value, label }: { value: string; label: string }) {\n const tr = useTr();\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n toast.success(\n `${label} ${tr(\"fluidgrids.settings.copyButton.copiedToast\", \"copied to clipboard\")}`,\n );\n } catch {\n toast.error(\n tr(\n \"fluidgrids.settings.copyButton.copyFailedToast\",\n \"Failed to copy to clipboard\",\n ),\n );\n }\n }, [value, label, tr]);\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={handleCopy}\n className=\"p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary transition-colors\"\n >\n <Icon icon=\"mdi:content-copy\" width={16} />\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {tr(\"fluidgrids.settings.copyButton.copyTooltipPrefix\", \"Copy\")}{\" \"}\n {label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nfunction SettingRow({\n label,\n description,\n children,\n}: {\n label: string;\n description?: string;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 py-4\">\n <div className=\"flex-1 min-w-0\">\n <Label className=\"text-sm font-medium text-text-primary\">{label}</Label>\n {description && (\n <p className=\"text-xs text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n <div className=\"shrink-0\">{children}</div>\n </div>\n );\n}\n\n// ============================================================================\n// Tab Content Components\n// ============================================================================\n\nfunction GeneralTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.general;\n\n return (\n <div>\n <ReadOnlyBanner />\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workspaceNameLabel\",\n \"Workspace Name\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workspaceNameDescription\",\n \"The name of your workspace\",\n )}\n >\n <Input\n value={settings.workspaceName}\n readOnly\n className=\"w-[250px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.workflowPrefixLabel\",\n \"Default Workflow Prefix\",\n )}\n description={tr(\n \"fluidgrids.settings.general.workflowPrefixDescription\",\n \"Prefix used when generating new workflow keys\",\n )}\n >\n <Input\n value={settings.defaultWorkflowPrefix}\n readOnly\n className=\"w-[120px] bg-background-secondary border-border-secondary text-text-primary cursor-default\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.general.autoSaveDraftsLabel\",\n \"Auto-save Drafts\",\n )}\n description={tr(\n \"fluidgrids.settings.general.autoSaveDraftsDescription\",\n \"Automatically save draft workflows while editing\",\n )}\n >\n <Switch checked={settings.autoSaveDrafts} disabled />\n </SettingRow>\n </div>\n </div>\n );\n}\n\n/**\n * Editable, per-WORKFLOW execution settings (BOFF-7512) — replaces the old\n * global/read-only tab. Resolves the target workflow from (in order) an\n * explicit `workflowKey` prop, the `:id` route param, or the flow store's\n * currently-loaded workflow (set when the user arrived here from the\n * builder). When none of those resolve, falls back to the previous\n * read-only static display rather than a broken/blank editor.\n */\nfunction ExecutionTab({ workflowKey }: Readonly<{ workflowKey?: string }>) {\n const tr = useTr();\n\n const { data, loading, refetch } = useWorkflowDefinitionQuery({\n variables: { workflowKey },\n skip: !workflowKey,\n fetchPolicy: \"cache-and-network\",\n });\n const [updateWorkflowDefinition, { loading: saving }] =\n useUpdateWorkflowDefinitionMutation();\n\n // \"Error workflow\" picker — reuses the same list-workflows query the\n // history/list pages already use (`workflowDefinitions`), latest version\n // per key, excluding the workflow being edited (running itself as its own\n // error handler on every failure risks an infinite loop).\n const { data: otherWorkflowsData, loading: otherWorkflowsLoading } =\n useWorkflowDefinitionsQuery({\n variables: { input: { latestOnly: true, limit: 100 } },\n });\n const errorWorkflowOptions = (\n otherWorkflowsData?.workflowDefinitions?.items ?? []\n ).filter((w) => w.workflowKey !== workflowKey);\n\n const workflow = data?.workflowDefinition;\n const persistedConfig = useMemo(() => {\n const definitionJson = workflow?.definitionJson as\n Record<string, unknown> | undefined;\n const config = definitionJson?.config as\n WorkflowExecutionSettings | undefined;\n return config ?? {};\n }, [workflow?.definitionJson]);\n\n const [form, setForm] = useState<WorkflowExecutionSettings>(persistedConfig);\n // Re-seed the form whenever the fetched workflow (or its persisted config)\n // changes — e.g. on first load, or after switching workflows.\n useEffect(() => setForm(persistedConfig), [persistedConfig]);\n\n const handleSave = useCallback(async () => {\n if (!workflow?.id) return;\n try {\n const definitionJson = {\n ...(workflow.definitionJson as Record<string, unknown>),\n config: form,\n };\n await updateWorkflowDefinition({\n variables: { id: workflow.id, input: { definitionJson } },\n });\n toast.success(\n tr(\n \"fluidgrids.settings.execution.savedToast\",\n \"Execution settings saved\",\n ),\n );\n void refetch();\n } catch (err) {\n toast.error(\n tr(\n \"fluidgrids.settings.execution.saveFailedToast\",\n \"Failed to save settings\",\n ),\n { description: err instanceof Error ? err.message : undefined },\n );\n }\n }, [workflow, form, updateWorkflowDefinition, refetch, tr]);\n\n if (!workflowKey) {\n // No workflow context resolvable — keep the previous static display so\n // the page still renders something useful rather than an empty form.\n // NOT the workspace-level `ReadOnlyBanner` copy: this isn't a policy\n // restriction, just a missing route/store context, so it gets its own\n // message rather than implying \"contact your admin\".\n const settings = DEFAULT_SETTINGS.execution;\n return (\n <div>\n <div className=\"flex items-center gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 mb-6\">\n <Icon\n icon=\"mdi:information\"\n width={18}\n className=\"text-amber-400 shrink-0\"\n />\n <p className=\"text-sm text-amber-400\">\n {tr(\n \"fluidgrids.settings.execution.noWorkflowContextBanner\",\n \"No workflow selected — open Settings from a specific workflow to edit its execution settings.\",\n )}\n </p>\n </div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Default Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.noWorkflowContextDescription\",\n \"Open this page from a specific workflow to edit its execution settings.\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n value={settings.defaultTimeoutSeconds}\n readOnly\n className=\"w-[100px] bg-background-secondary border-border-secondary text-text-primary text-right cursor-default\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"divide-y divide-border-secondary\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.defaultTimeoutLabel\",\n \"Timeout\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.defaultTimeoutDescription\",\n \"Maximum time this workflow's execution can run (in seconds)\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Input\n type=\"number\"\n min={1}\n value={form.timeout ?? DEFAULT_EXECUTION_SETTINGS.timeout}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n timeout: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[100px] text-right\"\n />\n <span className=\"text-xs text-text-secondary\">\n {tr(\n \"fluidgrids.settings.execution.defaultTimeoutUnit\",\n \"seconds\",\n )}\n </span>\n </div>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.concurrencyLimitLabel\",\n \"Concurrency Limit\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.concurrencyLimitDescription\",\n \"Maximum number of this workflow's executions running simultaneously\",\n )}\n >\n <Input\n type=\"number\"\n min={1}\n value={\n form.maxParallelism ?? DEFAULT_EXECUTION_SETTINGS.maxParallelism\n }\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n maxParallelism: Math.max(1, parseInt(e.target.value, 10) || 1),\n }))\n }\n disabled={loading}\n className=\"w-[80px] text-right\"\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.onErrorLabel\",\n \"On workflow error\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.onErrorDescription\",\n \"What to do when this workflow's execution fails\",\n )}\n >\n <select\n value={form.onError ?? DEFAULT_EXECUTION_SETTINGS.onError}\n onChange={(e) =>\n setForm((f) => ({\n ...f,\n onError: e.target.value as WorkflowExecutionSettings[\"onError\"],\n }))\n }\n disabled={loading}\n className=\"w-[160px] rounded-md border border-border-secondary bg-background-secondary px-2 py-1.5 text-sm text-text-primary\"\n >\n <option value=\"stop\">\n {tr(\"fluidgrids.settings.execution.onErrorStop\", \"Stop\")}\n </option>\n <option value=\"continue\">\n {tr(\"fluidgrids.settings.execution.onErrorContinue\", \"Continue\")}\n </option>\n <option value=\"retry\">\n {tr(\"fluidgrids.settings.execution.onErrorRetry\", \"Retry\")}\n </option>\n </select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.errorWorkflowLabel\",\n \"Error workflow\",\n )}\n description={tr(\n \"fluidgrids.settings.execution.errorWorkflowDescription\",\n \"Workflow key to run when this workflow's execution fails (optional)\",\n )}\n >\n <Select\n value={form.errorWorkflowKey ?? \"__none__\"}\n onValueChange={(val) =>\n setForm((f) => ({\n ...f,\n errorWorkflowKey: val === \"__none__\" ? undefined : val,\n }))\n }\n disabled={loading || otherWorkflowsLoading}\n >\n <SelectTrigger className=\"w-[220px] bg-background-secondary border-border-secondary\">\n <SelectValue\n placeholder={tr(\n \"fluidgrids.settings.execution.errorWorkflowPlaceholder\",\n \"None\",\n )}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none__\">\n {tr(\"fluidgrids.settings.execution.errorWorkflowNone\", \"None\")}\n </SelectItem>\n {errorWorkflowOptions.map((w) => (\n <SelectItem key={w.workflowKey} value={w.workflowKey}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveSuccessLabel\",\n \"Save successful execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveSuccessExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveSuccessExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.execution.saveFailedLabel\",\n \"Save failed execution data\",\n )}\n >\n <Switch\n checked={form.dataSaving?.saveFailedExecutions ?? true}\n onCheckedChange={(checked) =>\n setForm((f) => ({\n ...f,\n dataSaving: { ...f.dataSaving, saveFailedExecutions: checked },\n }))\n }\n disabled={loading}\n />\n </SettingRow>\n </div>\n <div className=\"mt-4 flex justify-end\">\n <Button onClick={() => void handleSave()} disabled={loading || saving}>\n {saving\n ? tr(\"fluidgrids.settings.execution.saving\", \"Saving…\")\n : tr(\"fluidgrids.settings.execution.save\", \"Save\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction NotificationsTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.notifications;\n\n return (\n <div>\n <ReadOnlyBanner />\n\n {/* Email Notifications */}\n <div className=\"mb-6\">\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:email-outline\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.emailSectionTitle\",\n \"Email Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnSuccessDescription\",\n \"Send email when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.emailOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.emailOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.emailOnFailureDescription\",\n \"Send email when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.emailOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n\n {/* Webhook Notifications */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary flex items-center gap-2 mb-3\">\n <Icon icon=\"mdi:webhook\" width={18} />\n {tr(\n \"fluidgrids.settings.notifications.webhookSectionTitle\",\n \"Webhook Notifications\",\n )}\n </h3>\n <div className=\"divide-y divide-border-secondary rounded-lg border border-border-secondary bg-background-secondary p-1\">\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessLabel\",\n \"On Success\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnSuccessDescription\",\n \"Send webhook when a workflow execution completes successfully\",\n )}\n >\n <Switch checked={settings.webhookOnSuccess} disabled />\n </SettingRow>\n <SettingRow\n label={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureLabel\",\n \"On Failure\",\n )}\n description={tr(\n \"fluidgrids.settings.notifications.webhookOnFailureDescription\",\n \"Send webhook when a workflow execution fails\",\n )}\n >\n <Switch checked={settings.webhookOnFailure} disabled />\n </SettingRow>\n </div>\n </div>\n </div>\n );\n}\n\nfunction ApiTab() {\n const tr = useTr();\n const settings = DEFAULT_SETTINGS.api;\n\n return (\n <div>\n <div className=\"space-y-4\">\n {/* API Gateway URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon icon=\"mdi:api\" width={20} className=\"text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlTitle\",\n \"API Gateway URL\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.gatewayUrlDescription\",\n \"Base URL for workflow API operations. Use this to trigger, list, and manage workflows programmatically.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.gatewayUrl}\n </code>\n <CopyButton\n value={settings.gatewayUrl}\n label={tr(\n \"fluidgrids.settings.api.gatewayUrlCopyLabel\",\n \"API Gateway URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Webhook URL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:webhook\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlTitle\",\n \"Webhook URL Format\",\n )}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary mb-3\">\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionPrefix\",\n \"URL format for triggering workflows via webhook. Replace\",\n )}{\" \"}\n <code className=\"text-text-primary\">{\"{workflowKey}\"}</code>{\" \"}\n {tr(\n \"fluidgrids.settings.api.webhookUrlDescriptionSuffix\",\n \"with the actual workflow key.\",\n )}\n </p>\n <div className=\"flex items-center gap-2 rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <code className=\"text-sm text-text-primary flex-1 truncate\">\n {settings.webhookUrlFormat}\n </code>\n <CopyButton\n value={settings.webhookUrlFormat}\n label={tr(\n \"fluidgrids.settings.api.webhookUrlCopyLabel\",\n \"Webhook URL\",\n )}\n />\n </div>\n </CardHeader>\n </Card>\n\n {/* Example cURL */}\n <Card className=\"border border-border-secondary bg-background-secondary\">\n <CardHeader className=\"pb-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Icon\n icon=\"mdi:console\"\n width={20}\n className=\"text-text-secondary\"\n />\n <h3 className=\"text-sm font-semibold text-text-primary\">\n {tr(\n \"fluidgrids.settings.api.curlExampleTitle\",\n \"Example: Trigger via cURL\",\n )}\n </h3>\n </div>\n <div className=\"relative rounded-lg bg-background-tertiary px-3 py-2 border border-border-secondary\">\n <pre className=\"text-xs text-text-primary overflow-x-auto whitespace-pre-wrap\">\n {`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\n -H \"Content-Type: application/json\" \\\\\n -H \"Authorization: Bearer <token>\" \\\\\n -d '{\"input\": {}}'`}\n </pre>\n <div className=\"absolute top-2 right-2\">\n <CopyButton\n value={`curl -X POST \"${settings.webhookUrlFormat}\" \\\\\\n -H \"Content-Type: application/json\" \\\\\\n -H \"Authorization: Bearer <token>\" \\\\\\n -d '{\"input\": {}}'`}\n label={tr(\n \"fluidgrids.settings.api.curlCopyLabel\",\n \"cURL command\",\n )}\n />\n </div>\n </div>\n </CardHeader>\n </Card>\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport interface SettingsPageProps {\n /**\n * Explicit workflow key to scope the Execution tab to (BOFF-7512). When\n * omitted, falls back to the `:id`/`:workflowKey` route param (for hosts\n * that mount this page under a per-workflow path), then to the workflow\n * currently loaded in the builder's flow store (for hosts that navigate\n * here from the builder without a route param). If none resolve, the\n * Execution tab falls back to its previous static display.\n */\n workflowKey?: string;\n}\n\nexport function SettingsPage({\n workflowKey: workflowKeyProp,\n}: SettingsPageProps = {}) {\n const tr = useTr();\n const navigate = useNavigate();\n const routeParams = useParams<{ id?: string; workflowKey?: string }>();\n const activeWorkflowKey = useFlowStore((s) => s.workflow.workflowKey);\n const workflowKey =\n workflowKeyProp ||\n routeParams.workflowKey ||\n routeParams.id ||\n activeWorkflowKey ||\n undefined;\n const [activeTab, setActiveTab] = useState(\"general\");\n\n return (\n <div className=\"p-4 sm:p-6 bg-background-primary min-h-screen\">\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6\">\n <div>\n <h1 className=\"text-2xl sm:text-3xl font-bold text-text-primary\">\n {tr(\"fluidgrids.settings.page.title\", \"Settings\")}\n </h1>\n <p className=\"text-text-secondary mt-1\">\n {tr(\n \"fluidgrids.settings.page.subtitle\",\n \"Configure workflow execution and notification preferences\",\n )}\n </p>\n </div>\n <Button variant=\"outline\" onClick={() => navigate(\"../list\")}>\n <Icon icon=\"mdi:arrow-left\" className=\"mr-2\" width={16} />\n {tr(\"fluidgrids.settings.page.backToWorkflows\", \"Back to Workflows\")}\n </Button>\n </div>\n\n {/* Tabs */}\n <Tabs value={activeTab} onValueChange={setActiveTab} className=\"w-full\">\n <TabsList className=\"bg-background-secondary border border-border-secondary mb-6\">\n <TabsTrigger value=\"general\" className=\"gap-1.5\">\n <Icon icon=\"mdi:cog\" width={16} />\n {tr(\"fluidgrids.settings.page.generalTab\", \"General\")}\n </TabsTrigger>\n <TabsTrigger value=\"execution\" className=\"gap-1.5\">\n <Icon icon=\"mdi:play-circle\" width={16} />\n {tr(\"fluidgrids.settings.page.executionTab\", \"Execution\")}\n </TabsTrigger>\n <TabsTrigger value=\"notifications\" className=\"gap-1.5\">\n <Icon icon=\"mdi:bell-outline\" width={16} />\n {tr(\"fluidgrids.settings.page.notificationsTab\", \"Notifications\")}\n </TabsTrigger>\n <TabsTrigger value=\"log-streaming\" className=\"gap-1.5\">\n <Icon icon=\"mdi:transit-connection-variant\" width={16} />\n {tr(\"fluidgrids.settings.page.logStreamingTab\", \"Log streaming\")}\n </TabsTrigger>\n <TabsTrigger value=\"api\" className=\"gap-1.5\">\n <Icon icon=\"mdi:api\" width={16} />\n {tr(\"fluidgrids.settings.page.apiTab\", \"API\")}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"general\">\n <GeneralTab />\n </TabsContent>\n <TabsContent value=\"execution\">\n <ExecutionTab workflowKey={workflowKey} />\n </TabsContent>\n <TabsContent value=\"notifications\">\n <NotificationsTab />\n </TabsContent>\n <TabsContent value=\"log-streaming\">\n <LogStreamingTab />\n </TabsContent>\n <TabsContent value=\"api\">\n <ApiTab />\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
+
import { deepClone, applyTemplateInputs } from './chunk-XQP33UJR.js';
|
|
1
2
|
import { Input as Input$1 } from './chunk-P5PKRQAO.js';
|
|
2
3
|
import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, DialogFooter } from './chunk-NH5YCY37.js';
|
|
3
4
|
import { Badge as Badge$1, Button as Button$1 } from './chunk-DBOMRIP5.js';
|
|
4
5
|
import { getGlobalStoreClient, createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient } from './chunk-BQXHJIER.js';
|
|
5
6
|
import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument, GetNodeInstallableVersionsDocument } from './chunk-6LXMUIR3.js';
|
|
6
|
-
import { deepClone, applyTemplateInputs } from './chunk-XQP33UJR.js';
|
|
7
7
|
import { QuotaExhaustedDialog } from './chunk-AANIWER2.js';
|
|
8
8
|
import { SdkPermissionGate, FLUIDGRIDS_PERMISSIONS, SdkPermissionButton } from './chunk-W23ZXNKU.js';
|
|
9
9
|
import { cn as cn$1 } from './chunk-3ZYUGTIT.js';
|
|
10
|
-
import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-
|
|
11
|
-
import { throwIfResultError, describeOperationError } from './chunk-LMO5ASOE.js';
|
|
10
|
+
import { useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeleteWorkflow, useDeactivateWorkflow } from './chunk-Q4RPP67K.js';
|
|
12
11
|
import { config, getFluidGridsConfig, validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-WWU2O2SR.js';
|
|
13
|
-
import { waitForFluidGridsClient, getFluidGridsClient, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
|
|
14
12
|
import { useFlowStore } from './chunk-YMD3T6J2.js';
|
|
15
13
|
import { NodeEndpointConfigsDocument, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowRunDocument, FluidgridsEntityTagsDocument, AvailableFluidgridsTagsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, UntagFluidgridsEntityDocument, ReplaceFluidgridsEntityTagsDocument, CreateFluidgridsTagDocument, NodeSchemaIntrospectionDocument, useWorkflowPinnedDataQuery, usePinNodeDataMutation, useUnpinNodeDataMutation, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-BHITFSOK.js';
|
|
14
|
+
import { throwIfResultError, describeOperationError } from './chunk-LMO5ASOE.js';
|
|
16
15
|
import { useTr, FluidGridsTranslationProvider, ENGLISH_FALLBACK_TRANSLATOR } from './chunk-7YWBH2A5.js';
|
|
16
|
+
import { waitForFluidGridsClient, getFluidGridsClient, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
|
|
17
17
|
import * as React2 from 'react';
|
|
18
18
|
import React2__default, { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, memo, createContext, lazy, useCallback, useContext, useLayoutEffect, Suspense, useDeferredValue } from 'react';
|
|
19
19
|
import { Textarea, Input, Button, Card, Badge, CardContent as CardContent$1, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuItem, DropdownMenuSeparator, Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, Sheet, SheetTrigger, SheetContent, SheetHeader, SheetTitle, TooltipProvider, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Popover, PopoverTrigger, PopoverContent, Tooltip, TooltipTrigger, TooltipContent, Toaster, Tabs, TabsList, TabsTrigger, TabsContent, CardHeader as CardHeader$1, CardTitle as CardTitle$1, CardDescription as CardDescription$1, ScrollArea, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@burdenoff/fe-libs/ui';
|
|
@@ -25550,5 +25550,5 @@ var FlowBuilderPage = ({
|
|
|
25550
25550
|
};
|
|
25551
25551
|
|
|
25552
25552
|
export { Card2 as Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConnectionFormDialog, ConnectionSelector, EntityTagPicker, FLUIDGRIDS_ENTITY_TYPES, FlowBuilderPage, FluidGridsProvider, ProviderPicker, SchemaConnectionForm, ScopePicker, TemplateCard, buildNodeCheck, buildRequiredNodeTypes, listCustomBlocks, mergeStickyNotes, refetchStoreNodes, registerCustomBlock, resolveUiSpec, stripSubmitActions, tagLabel, useAvailableTags, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useCreateTag, useDraftEntityTags, useEntityTags, useFluidGridsContext, useImportWorkflowTemplate, useInitiateOAuth, useInstalledNodes, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useReplaceEntityTags, useSearchTags, useTagEntity, useUntagEntity, useWorkflowTemplates };
|
|
25553
|
-
//# sourceMappingURL=chunk-
|
|
25554
|
-
//# sourceMappingURL=chunk-
|
|
25553
|
+
//# sourceMappingURL=chunk-JMJRE5RT.js.map
|
|
25554
|
+
//# sourceMappingURL=chunk-JMJRE5RT.js.map
|