@burdenoff/fluidgrids-fe-sdk 2026.1111.20 → 2026.1111.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/dist/{AiStudioPage-CmjZwaoy.js → AiStudioPage-DIfF4LhQ.js} +5 -5
- package/dist/{DataSinkDashboardPage-auvILMSt.js → DataSinkDashboardPage-DDvNPS8Z.js} +1 -1
- package/dist/{DataTablesPage-BZy2z0LB.js → DataTablesPage-BpnF13UT.js} +9 -1
- package/dist/{ExecutionDetailPage-C0q5brcQ.js → ExecutionDetailPage-DYLWtHRG.js} +60 -13
- package/dist/{ExecutionsListPage-Dcc6wi-8.js → ExecutionsListPage-D63aCXJH.js} +4 -4
- package/dist/{FluidGridsProvider-CRGXDZX1.js → FluidGridsProvider-CWyQ8ziM.js} +364 -98
- package/dist/{HistoryPage-B5Np7Dd_.js → HistoryPage-CNXgUMb0.js} +1 -1
- package/dist/{InsightsPage-CQ8sB4d6.js → InsightsPage-Duo83yAM.js} +1 -1
- package/dist/{MissingNodesInstallModal-Dm1m3Ysp.js → MissingNodesInstallModal-Q3RYBvS8.js} +1 -1
- package/dist/{QuotaExhaustedDialog-DYCpMOyQ.js → QuotaExhaustedDialog-ChBoJnRo.js} +3 -2
- package/dist/{SettingsPage-BNJV7nwG.js → SettingsPage-DI_vIG7t.js} +2 -2
- package/dist/{TemplateCard-BuP6_QX8.js → TemplateCard-6W2q2wiK.js} +4 -3
- package/dist/{TemplateConfigurationModal--YswnkOD.js → TemplateConfigurationModal-qNQGP7cm.js} +1 -1
- package/dist/{TemplateDetailPanel-CtUjihCQ.js → TemplateDetailPanel-CQvYqhVO.js} +1 -1
- package/dist/{TemplatePreview-TH3zVEtT.js → TemplatePreview-t3251W_n.js} +4 -4
- package/dist/{TemplatesPage-BDiIswSv.js → TemplatesPage-Bvg6R2P9.js} +6 -5
- package/dist/{WorkflowBuilder-KypUzhmK.js → WorkflowBuilder-C-hgvww2.js} +3 -3
- package/dist/{WorkflowBuilder-DnTqzYD5.js → WorkflowBuilder-DdvSGsxr.js} +8 -8
- package/dist/{WorkflowSearchRedirect-DAA2K0Md.js → WorkflowSearchRedirect-33Vs4FKc.js} +1 -1
- package/dist/{WorkflowsList-BWdu8wj0.js → WorkflowsList-C3bHLpSv.js} +147 -22
- package/dist/agent-tools.js +1 -1
- package/dist/{agentTools-VQXDvw4O.js → agentTools-BjhxAdlt.js} +3 -4
- package/dist/askAboutBridge-BV8m95kk.js +65 -0
- package/dist/assistant.d.ts +30 -1
- package/dist/assistant.js +2 -1
- package/dist/{canvasNoteTools-CCQtxq7U.js → canvasNoteTools-CZEFFhRp.js} +2 -2
- package/dist/{code-editor-field-4j1LiULY.js → code-editor-field-CfP0QYUD.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-KbM4vIW8.js → flow-builder-CE8cNXNi.js} +16 -73
- package/dist/fluidgridsEvents-Dm5CaHtr.js +162 -0
- package/dist/history.js +1 -1
- package/dist/{index-6JR2vD9J.d.ts → index-7eJQwsNS.d.ts} +3 -19
- package/dist/index.d.ts +2 -1
- package/dist/index.js +29 -27
- package/dist/{node-detail-view-CeOkSF2C.js → node-detail-view-BoR0vYZ3.js} +5 -5
- package/dist/{node-editor-tab-body-CN89wDV7.js → node-editor-tab-body-DxMbKspp.js} +2 -2
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-CxKbvYSJ.js → popover-B1aKz7DC.js} +1 -1
- package/dist/{quick-config-panel-wfP0s4QO.js → quick-config-panel-DXvLJdeW.js} +3 -3
- package/dist/quota-Cdt8yz7N.js +152 -0
- package/dist/quota.d.ts +3 -0
- package/dist/quota.js +4 -0
- package/dist/runsQuota-DsniKiSg.d.ts +20 -0
- package/dist/runsQuota-DvXR6mRN.js +100 -0
- package/dist/{schedule-panel-2HgyHvO8.js → schedule-panel-CY6S4JMd.js} +5 -5
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-DLOVQATw.js → sidebar-node-editor-FU3fvOjh.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{uiMarkTools-nlmzsHQM.js → uiMarkTools-DZ6akjQK.js} +1 -1
- package/dist/useActionParam-B0ebTZmg.js +83 -0
- package/dist/{useDurableParity-CJvnfF3T.js → useDurableParity-BApRraSO.js} +1 -1
- package/dist/{useExecutions-CyXkJtpk.js → useExecutions-C2a4EcvC.js} +2 -2
- package/dist/{useObservability-QZjFuXnI.js → useObservability-BmbeK5bG.js} +2 -2
- package/dist/{useRunHistory-D4gaa81A.js → useRunHistory-CqfDFRzr.js} +1 -1
- package/dist/{useWorkflowCodeExport-BNGq3BJ9.js → useWorkflowCodeExport-DebpM48M.js} +1 -1
- package/dist/{useWorkflows-XsfD7JA-.js → useWorkflows-D1-rYzGK.js} +2 -2
- package/dist/workflow-builder.js +4 -4
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +14 -14
- package/dist/workflows-list.d.ts +6 -0
- package/dist/workflows-list.js +3 -2
- package/package.json +5 -1
- package/dist/fluidgridsEvents-CNdcrUNN.js +0 -310
package/dist/index.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import { n as WorkflowBuilderCore, r as EnsureThemeProvider, t as WorkflowBuilder } from "./WorkflowBuilder-
|
|
4
|
-
import { a as useCreateWorkflowFirst, i as FirstWorkflowChecklistView, r as FirstWorkflowChecklist, t as WorkflowsList } from "./WorkflowsList-
|
|
5
|
-
import { a as START_NAME_PARAM, c as readStartNodeRequest, i as START_FIELD_PREFIX, l as startNodeLink, o as START_NODE_PARAM, r as GuidedTourStarter, s as START_OPERATION_PARAM, t as WorkflowBuilder$1 } from "./WorkflowBuilder-
|
|
6
|
-
import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-
|
|
7
|
-
import { A as isDurableFunctionNodeType, C as CardFooter, D as RUN_CONTROL_NODE_TYPES, E as DURABLE_FUNCTION_NODE_TYPES, M as isRunControlNodeType, O as WORKFLOW_TEST_NODE_TYPES, S as CardDescription, T as CardTitle, b as Card, i as badgeVariants, j as isNodeTypeHiddenFromPalette, k as filterPaletteNodes, r as Badge, w as CardHeader, x as CardContent } from "./TemplateCard-
|
|
8
|
-
import { r as extractTemplateGraph, t as TemplatePreview } from "./TemplatePreview-
|
|
2
|
+
import { At as createThenOpen, Dt as blankWorkflowCreateInput, _n as openRunQuotaUpgradePrompt, et as resolveUiSpec, gn as useFluidGridsAnalytics, kt as classifyCreateRefusal, m as refetchStoreNodes, n as FluidGridsProvider, on as useNodeExecution, r as useFluidGridsContext, tt as stripSubmitActions } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
3
|
+
import { n as WorkflowBuilderCore, r as EnsureThemeProvider, t as WorkflowBuilder } from "./WorkflowBuilder-C-hgvww2.js";
|
|
4
|
+
import { a as useCreateWorkflowFirst, i as FirstWorkflowChecklistView, r as FirstWorkflowChecklist, t as WorkflowsList } from "./WorkflowsList-C3bHLpSv.js";
|
|
5
|
+
import { a as START_NAME_PARAM, c as readStartNodeRequest, i as START_FIELD_PREFIX, l as startNodeLink, o as START_NODE_PARAM, r as GuidedTourStarter, s as START_OPERATION_PARAM, t as WorkflowBuilder$1 } from "./WorkflowBuilder-DdvSGsxr.js";
|
|
6
|
+
import { t as WorkflowSearchRedirect } from "./WorkflowSearchRedirect-33Vs4FKc.js";
|
|
7
|
+
import { A as isDurableFunctionNodeType, C as CardFooter, D as RUN_CONTROL_NODE_TYPES, E as DURABLE_FUNCTION_NODE_TYPES, M as isRunControlNodeType, O as WORKFLOW_TEST_NODE_TYPES, S as CardDescription, T as CardTitle, b as Card, i as badgeVariants, j as isNodeTypeHiddenFromPalette, k as filterPaletteNodes, r as Badge, w as CardHeader, x as CardContent } from "./TemplateCard-6W2q2wiK.js";
|
|
8
|
+
import { r as extractTemplateGraph, t as TemplatePreview } from "./TemplatePreview-t3251W_n.js";
|
|
9
9
|
import { $ as DuplicateWorkflowDocument, $n as UntagFluidgridsEntityDocument, $r as WorkflowRunPendingDocument, $t as RenameWorkflowProjectDocument, A as CreateWorkflowDefinitionDocument, An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, At as NodePaletteEntriesDocument, B as DeactivateWorkflowDefinitionDocument, Bn as TakeOverWorkflowEditLeaseDocument, Br as WorkflowNotificationSettingsDocument, Bt as PreviewN8nImportDocument, C as CompleteActivityByIdDocument, Ci as WorkflowWorkersDocument, Cn as SandboxWorkerTokenFieldsFragmentDoc, Cr as WorkflowCallInputsDocument, Ct as ListenForWebhookTestEventDocument, D as CreateFluidgridsTagDocument, Dn as SetContinuousOptimisationEnabledDocument, Dr as WorkflowDefinitionForBuilderDocument, Dt as NodeEndpointConfigsDocument, E as CreateActivityPauseRuleDocument, En as SearchFluidgridsTagsDocument, Er as WorkflowDefinitionDocument, Et as NodeEndpointConfigDocument, F as CreateWorkflowTestCaseDocument, Fn as StartBatchExportDocument, Fr as WorkflowGenerationTemplatesDocument, Ft as OptimisationSuggestionsDocument, G as DeleteWorkflowFolderDocument, Gn as TerminateExecutionDocument, Gr as WorkflowRolloutFieldsFragmentDoc, Gt as PushWorkflowToGitDocument, H as DeleteTaskQueueDocument, Hn as TaskQueueKindStatsFieldsFragmentDoc, Hr as WorkflowProjectsDocument, Ht as ProposeOptimisationDocument, I as CreateWorkflowTestCaseFromRunDocument, In as StartBatchOperationDocument, Ir as WorkflowGitCommitsDocument, It as PauseActivityDocument, J as DeleteWorkflowSearchAttributeDocument, Jn as TriggerWorkflowScheduleDocument, Jr as WorkflowRunEventFieldsFragmentDoc, Jt as RejectWorkflowPromotionDocument, K as DeleteWorkflowProjectDocument, Kn as TerminateWorkflowRunDocument, Kr as WorkflowRunDeterminismStatusDocument, Kt as QueryWorkflowRunDocument, L as CreateWorkflowVersionDocument, Ln as StartBatchTerminateDocument, Lr as WorkflowGitDiffDocument, Lt as PauseExecutionDocument, M as CreateWorkflowProjectDocument, Mn as ShareWorkflowDocument, Mr as WorkflowEnvironmentsDocument, Mt as NodeStatesDocument, N as CreateWorkflowSearchAttributeDocument, Nn as SignalWorkflowRunDocument, Nr as WorkflowFoldersDocument, Nt as NodeUsageStatusDocument, O as CreateTaskQueueDocument, On as SetRunFailureTriageEnabledDocument, Or as WorkflowDefinitionsDocument, Ot as NodeManifestDocument, P as CreateWorkflowSignalTokenDocument, Pn as SnoozeOptimisationSuggestionDocument, Pr as WorkflowGenerationDocument, Pt as OptimisationSuggestionFieldsFragmentDoc, Q as DismissRunFailureClusterDocument, Qn as UnpinNodeDataDocument, Qr as WorkflowRunMetadataDocument, Qt as RenameWorkflowFolderDocument, R as DashboardSummaryDocument, Rn as StopWebhookTestListenerDocument, Rr as WorkflowGitPushesDocument, Rt as PauseWorkflowScheduleDocument, S as CodecServerSettingsDocument, Si as WorkflowVersionsDocument, Sn as RunWorkflowTestsDocument, Sr as WorkflowBatchOperationsDocument, St as LinkWorkflowGitRepositoryDocument, T as ContinuousOptimisationSettingsFieldsFragmentDoc, Ti as WorkspaceRunsQuotaDocument, Tn as SaveWorkflowDraftDocument, Tr as WorkflowCodeSourceDocument, Tt as MoveWorkflowFolderDocument, U as DeleteWorkerTokenDocument, Un as TaskQueueStatsDocument, Ur as WorkflowPromotionRequestsDocument, Ut as ProposeRunFixDocument, V as DeleteActivityPauseRuleDocument, Vn as TaskQueueFieldsFragmentDoc, Vr as WorkflowPinnedDataDocument, Vt as PreviewScheduleDocument, W as DeleteWorkflowDefinitionDocument, Wn as TaskQueuesDocument, Wr as WorkflowProposalDocument, Wt as ProposeWorkflowChangeDocument, X as DeployWorkflowVersionToDevDocument, Xn as UnpauseActivityDocument, Xr as WorkflowRunHistoryArchiveDocument, Xt as ReleaseWorkflowEditLeaseDocument, Y as DeleteWorkflowTestCaseDocument, Yn as UnlinkWorkflowGitRepositoryDocument, Yr as WorkflowRunHierarchyDocument, Yt as RejectWorkflowProposalDocument, Z as DismissOptimisationSuggestionDocument, Zn as UnpauseWorkflowScheduleDocument, Zr as WorkflowRunHistoryDocument, Zt as RemoveNodeFromWorkflowsDocument, _ as CancelBatchOperationDocument, _i as WorkflowTestRunsDocument, _n as RunFromNodeDocument, _r as WorkflowArchiveSettingsFieldsFragmentDoc, _t as FluidgridsEntityTagsDocument, a as AgentStepFieldsFragmentDoc, ai as WorkflowScheduleDescriptionFieldsFragmentDoc, an as RestoreWorkflowFromGitDocument, ar as UpdateTaskQueueDocument, at as ExecuteStepDocument, b as CancelWorkflowPromotionDocument, bi as WorkflowVersionDrainageDocument, bn as RunLogLineFieldsFragmentDoc, br as WorkflowBatchOperationDocument, bt as ImportWorkflowDocument, c as ApplyWorkflowProposalDocument, ci as WorkflowSearchAttributesDocument, cn as RetryNodeDocument, cr as UpdateWorkflowNotificationSettingsDocument, ct as ExecutionStatsDocument, d as AvailableFluidgridsTagsDocument, di as WorkflowSignalTokensDocument, dn as RunAiUsageDocument, dr as UpsertWorkflowRunSearchAttributesDocument, dt as ExportWorkflowCodeDocument, ei as WorkflowRunStackTraceDocument, en as ReplaceFluidgridsEntityTagsDocument, er as UpdateActivityOptionsDocument, et as DurableHistoryCapsDocument, f as BackfillWorkflowScheduleDocument, fi as WorkflowTestCaseFieldsFragmentDoc, fn as RunCodeReplaceFieldsFragmentDoc, fr as UsageTimeSeriesDocument, ft as FailActivityByIdDocument, g as BulkMoveWorkflowsToFolderDocument, gi as WorkflowTestRunFieldsFragmentDoc, gn as RunFailureTriageSettingsDocument, gr as WorkflowActivityPauseRulesDocument, gt as FluidgridsAvailableTagFieldsFragmentDoc, h as BulkDeleteWorkflowsDocument, hi as WorkflowTestRunDocument, hn as RunFailureClustersDocument, hr as WorkflowActivityPauseRuleFieldsFragmentDoc, ht as FileDownloadUrlDocument, i as ActiveExecutionsDocument, ii as WorkflowScheduleDescribeDocument, in as ResetWorkflowRunToLastCleanTaskDocument, ir as UpdateManagedAiWorkspacePolicyDocument, it as EventRegistrationsDocument, j as CreateWorkflowFolderDocument, jn as SetWorkflowRunVersioningOverrideDocument, jr as WorkflowEditLeaseStatusDocument, jt as NodeSchemaIntrospectionDocument, k as CreateWorkerTokenDocument, kn as SetWorkerTokenConnectionAllowlistDocument, kr as WorkflowDefinitionsTagsDocument, kt as NodeManifestsDocument, l as ApproveWorkflowPromotionDocument, li as WorkflowSharingDocument, ln as RevokeWorkflowSignalTokenDocument, lr as UpdateWorkflowRunDocument, lt as ExecutionsListDocument, m as BulkAssignWorkflowsToProjectDocument, mi as WorkflowTestCasesDocument, mn as RunEventAppendedDocument, mr as WorkerTokensDocument, mt as FgTriageFailedRunsDocument, n as ActivateWorkflowDefinitionDocument, ni as WorkflowRunsCountDocument, nn as ResetActivityDocument, nr as UpdateCodecServerSettingsDocument, nt as DurableRunFieldsDocument, o as AgentStepUpdatedDocument, oi as WorkflowScheduleTickFieldsFragmentDoc, on as RestoreWorkflowVersionDocument, or as UpdateWorkflowDefinitionDocument, ot as ExecutionDetailDocument, p as BuildWorkflowCodeDocument, pi as WorkflowTestCaseResultFieldsFragmentDoc, pn as RunControlFieldsDocument, pr as WebhookTestListenerDocument, pt as FgRunOptimisationScanDocument, q as DeleteWorkflowRolloutDocument, qn as TriggerWorkflowDocument, qr as WorkflowRunDocument, qt as RegisterNodeDocument, r as ActivateWorkflowVersionCheckedDocument, ri as WorkflowRunsDocument, rn as ResetWorkflowRunDocument, rr as UpdateDurableHistoryCapsDocument, rt as ErrorAnalyticsDocument, s as AgentTraceDocument, si as WorkflowSearchAttributeFieldsFragmentDoc, sn as ResumeExecutionDocument, sr as UpdateWorkflowEnvironmentPolicyDocument, st as ExecutionLogsDocument, t as AcquireWorkflowEditLeaseDocument, ti as WorkflowRunUpdateDocument, tn as RequestWorkflowPromotionDocument, tr as UpdateArchiveSettingsDocument, tt as DurableParityRunFieldsDocument, u as ArchiveSettingsDocument, ui as WorkflowSignalTokenFieldsFragmentDoc, un as RotateWorkerTokenDocument, ur as UpdateWorkflowTestCaseDocument, ut as ExplainRunDocument, v as CancelExecutionDocument, vi as WorkflowUpdateResultFieldsFragmentDoc, vn as RunFromNodeEligibilityDocument, vr as WorkflowAuthoringDocument, vt as FluidgridsTagAssignmentFieldsFragmentDoc, w as ContinuousOptimisationSettingsDocument, wi as WorkspaceAiUsageDocument, wn as SandboxWorkflowWorkerFieldsFragmentDoc, wr as WorkflowCodeBundleSdkDocument, wt as ManagedAiWorkspacePolicyDocument, x as CancelWorkflowProposalDocument, xi as WorkflowVersioningDocument, xn as RunLogsDocument, xr as WorkflowBatchOperationUpdatedDocument, xt as ImportWorkflowTemplateDocument, y as CancelWorkflowGenerationDocument, yi as WorkflowVersionDiffDocument, yn as RunLogAppendedDocument, yr as WorkflowBatchJobFieldsFragmentDoc, yt as GenerateWorkflowFromPromptDocument, z as DataTablesTagsDocument, zn as TagFluidgridsEntityDocument, zr as WorkflowGitRepositoryDocument, zt as PinNodeDataDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
10
|
-
import { t as AiStudioPage } from "./AiStudioPage-
|
|
10
|
+
import { t as AiStudioPage } from "./AiStudioPage-DIfF4LhQ.js";
|
|
11
11
|
import { t as ThemeProvider } from "./theme-provider-B3mIuz2d.js";
|
|
12
|
-
import { c as RunsUsageMeter,
|
|
12
|
+
import { c as RunsUsageMeter, l as RunsUsageMeterView, o as BUILDER_FULLSCREEN_ATTRIBUTE, s as BUILDER_FULLSCREEN_EVENT, t as FlowBuilderPage, u as useRunsQuota, v as FluidGridsMark } from "./flow-builder-CE8cNXNi.js";
|
|
13
13
|
import { A as themeKey, C as resetFluidGridsConfig, D as FLUIDGRIDS_THEME_TOKEN_MAP, O as applyFluidGridsTheme, S as getGraphQLEndpoint, T as setFluidGridsConfig, _ as throwIfResultError, a as resetFluidGridsClient, c as createFluidGridsTokenRefreshLink, g as isUnauthenticatedError, h as isForbiddenError, i as isFluidGridsClientReady, j as themeToCssVariables, k as sanitizeThemeValue, l as FLUIDGRIDS_EVENTS_VERSION, m as describeOperationError, n as getFluidGridsClient, o as setFluidGridsClient, r as getFluidGridsClientSafe, s as waitForFluidGridsClient, t as createFluidGridsClient, u as FLUIDGRIDS_EVENT_NAMES, w as resetFluidGridsExecutionState, x as getFluidGridsConfig, y as config } from "./client-C9XSzSXr.js";
|
|
14
|
+
import { t as ExecutionsListPage } from "./ExecutionsListPage-D63aCXJH.js";
|
|
14
15
|
import { n as buttonVariants, t as Button } from "./button-DG7y_FVJ.js";
|
|
15
16
|
import { a as DialogFooter, c as DialogPortal, d as Input, i as DialogDescription, l as DialogTitle, n as DialogClose, o as DialogHeader, r as DialogContent, s as DialogOverlay, t as Dialog, u as DialogTrigger } from "./dialog-Cjb4lB4D.js";
|
|
16
|
-
import { t as
|
|
17
|
-
import { _ as useWorkflowRuns, a as useDeactivateWorkflow, c as useImportWorkflow, d as useRestoreWorkflowVersion, f as useTriggerWorkflow, g as useWorkflowRun, h as useWorkflowDefinitions, i as useDashboardSummary, l as useLazyWorkflowDefinition, m as useWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, p as useUpdateWorkflow, r as useCreateWorkflowVersion, s as useDuplicateWorkflow, t as useActivateWorkflow, u as usePreviewN8nImport, v as useWorkflowVersions } from "./useWorkflows-
|
|
18
|
-
import { r as
|
|
19
|
-
import { a as ConnectionSelector, i as RunOnSection, n as PopoverContent, r as PopoverTrigger, t as Popover } from "./popover-CxKbvYSJ.js";
|
|
17
|
+
import { r as RunHumanRequests, t as ExecutionDetailPage } from "./ExecutionDetailPage-DYLWtHRG.js";
|
|
18
|
+
import { _ as useWorkflowRuns, a as useDeactivateWorkflow, c as useImportWorkflow, d as useRestoreWorkflowVersion, f as useTriggerWorkflow, g as useWorkflowRun, h as useWorkflowDefinitions, i as useDashboardSummary, l as useLazyWorkflowDefinition, m as useWorkflowDefinition, n as useCreateWorkflow, o as useDeleteWorkflow, p as useUpdateWorkflow, r as useCreateWorkflowVersion, s as useDuplicateWorkflow, t as useActivateWorkflow, u as usePreviewN8nImport, v as useWorkflowVersions } from "./useWorkflows-D1-rYzGK.js";
|
|
19
|
+
import { a as ConnectionSelector, i as RunOnSection, n as PopoverContent, r as PopoverTrigger, t as Popover } from "./popover-B1aKz7DC.js";
|
|
20
20
|
import { t as ConnectionFormDialog } from "./ConnectionFormDialog-Bg9_OdHX.js";
|
|
21
21
|
import { a as useInitiateOAuth, i as useCreateConnection, n as useConnections, o as useProviders, r as useConnectionsByProvider, t as useConnection } from "./useConnections-Cs7LCWEM.js";
|
|
22
|
-
import { t as HistoryPage } from "./HistoryPage-
|
|
23
|
-
import { t as TemplatesPage } from "./TemplatesPage-
|
|
22
|
+
import { t as HistoryPage } from "./HistoryPage-CNXgUMb0.js";
|
|
23
|
+
import { t as TemplatesPage } from "./TemplatesPage-Bvg6R2P9.js";
|
|
24
24
|
import { a as useNodeEndpoint, i as useLazyNodeManifest, o as useNodeEndpoints, r as fetchAllNodesWithManifests, s as useNodeManifest, t as NodesPage } from "./NodesPage-Bf5PhfBK.js";
|
|
25
|
-
import { t as SettingsPage } from "./SettingsPage-
|
|
26
|
-
import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-
|
|
27
|
-
import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-
|
|
28
|
-
import { a as useLogStreamDestinations, i as useLogStreamDestinationActions, n as useDataSinks, o as useRunReplayActions, r as useInsightsData, t as useDataSinkData } from "./useObservability-
|
|
25
|
+
import { t as SettingsPage } from "./SettingsPage-DI_vIG7t.js";
|
|
26
|
+
import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-DDvNPS8Z.js";
|
|
27
|
+
import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-Duo83yAM.js";
|
|
28
|
+
import { a as useLogStreamDestinations, i as useLogStreamDestinationActions, n as useDataSinks, o as useRunReplayActions, r as useInsightsData, t as useDataSinkData } from "./useObservability-BmbeK5bG.js";
|
|
29
29
|
import { a as useRevealVariableValue, c as useTestSecretsProviderConnection, i as useDeleteVariable, l as useUpdateVariable, o as useSaveSecretsProviderConfig, r as useCreateVariable, s as useSecretsProviderConfigs, t as VariablesPage, u as useVariables } from "./VariablesPage-67WR_lVE.js";
|
|
30
30
|
import { t as RunnersPage } from "./RunnersPage-CLCOCclc.js";
|
|
31
31
|
import { a as useRunners, i as useRunnerActions, n as RUNNER_INSTALL_SCRIPT_URL, r as runnerInstallCommand, t as RunnerStatusPill } from "./RunnerStatusPill-Ctg4TJcP.js";
|
|
@@ -33,7 +33,7 @@ import { a as taskQueueNameProblem, i as taskQueueInputOf, n as TaskQueuesPage,
|
|
|
33
33
|
import { i as decodePayloads, n as checkCodecServerUrl, o as isEncodedPayload } from "./codec-client-CJ95Rmqo.js";
|
|
34
34
|
import { i as usePendingToolApprovals, r as useDecideToolApproval, t as ApprovalInboxPage } from "./ApprovalInboxPage-dbBDSJ-f.js";
|
|
35
35
|
import { a as useRunHumanRequests, i as useRespondToHumanRequest, r as usePendingHumanRequests, t as HumanRequestCard } from "./HumanRequestCard-D-ooVPDn.js";
|
|
36
|
-
import { a as rowsToCsv, c as useDataTables, d as useInsertDataTableRow, f as useUpdateDataTable, i as parseCsv, l as useDeleteDataTable, o as useCreateDataTable, p as useUpdateDataTableRow, r as csvToRows, s as useDataTableRows, t as DataTablesPage, u as useDeleteDataTableRows } from "./DataTablesPage-
|
|
36
|
+
import { a as rowsToCsv, c as useDataTables, d as useInsertDataTableRow, f as useUpdateDataTable, i as parseCsv, l as useDeleteDataTable, o as useCreateDataTable, p as useUpdateDataTableRow, r as csvToRows, s as useDataTableRows, t as DataTablesPage, u as useDeleteDataTableRows } from "./DataTablesPage-BpnF13UT.js";
|
|
37
37
|
import { n as FluidGridsTranslationProvider, r as useTr, t as ENGLISH_FALLBACK_TRANSLATOR } from "./TranslationBridge-Da-TPgQm.js";
|
|
38
38
|
import { a as SdkPermissionGate, c as Tooltip, d as TooltipTrigger, i as SdkPermissionButton, l as TooltipContent, n as ALLOW_ALL_PERMISSIONS, o as evaluatePermissionCheck, r as FluidGridsPermissionsProvider, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS, u as TooltipProvider } from "./constants-B2lhWNoN.js";
|
|
39
39
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
@@ -44,12 +44,14 @@ import { t as EntityTagPicker } from "./EntityTagPicker-BqRNsLCQ.js";
|
|
|
44
44
|
import { c as useReplaceEntityTags, d as useUntagEntity, i as useCreateTag, l as useSearchTags, n as tagLabel, o as useDraftEntityTags, r as useAvailableTags, s as useEntityTags, t as FLUIDGRIDS_ENTITY_TYPES, u as useTagEntity } from "./useEntityTags-DhnsZcTl.js";
|
|
45
45
|
import { t as cn } from "./cn-QqidFIgr.js";
|
|
46
46
|
import { n as useFluidGridsPageControls, t as FluidGridsAssistantBridge } from "./pageControlsBridge-0pX9s-3k.js";
|
|
47
|
-
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-
|
|
47
|
+
import { a as triggerNodesOf, i as pickTriggerNode, n as AgentCalloutOverlay, r as createFluidGridsAgentTools, t as createUiMarkTools } from "./uiMarkTools-DZ6akjQK.js";
|
|
48
48
|
import { n as useAgentMarksStore, t as resetAgentMarks } from "./marksStore-DGCXjTmZ.js";
|
|
49
49
|
import { a as resolvePhaseCFlags, c as useDurableParityEnabled, d as usePaletteGates, f as usePhaseCFlags, i as resolveFluidGridsFlagsSettled, l as useFluidGridsFlag, m as useWorkflowTestsEnabled, n as FLUIDGRIDS_FLAG_DEFAULTS, o as useContinuousOptimisationEnabled, p as useSelfHostedWorkersEnabled, r as PHASE_C_FLAGS_OFF, s as useDurableFunctionNodesEnabled, t as FLUIDGRIDS_FLAGS, u as useFluidGridsFlagsSettled } from "./feature-flags-DM5myWaD.js";
|
|
50
|
-
import {
|
|
51
|
-
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-
|
|
50
|
+
import { c as isQuotaExhaustedFailure, i as WORKFLOWS_QUOTA_NAME, r as RUNS_QUOTA_NAME, s as findQuotaRefusal, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
51
|
+
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-DebpM48M.js";
|
|
52
|
+
import { n as runsQuotaLevel, r as summarizeRunsQuota, t as readRunsQuota } from "./runsQuota-DvXR6mRN.js";
|
|
52
53
|
import { a as firstWorkflowProgress, n as GUIDED_FIRST_WORKFLOW_STATE, o as isGuidedTourIntent, r as GUIDED_TOUR_STATE, s as pickGuidedTour, t as GUIDED_FIRST_WORKFLOW_NAV } from "./firstWorkflow-C_h0KMB2.js";
|
|
54
|
+
import { a as emitTemplateUsed, c as emitWorkflowLimitHit, i as emitRunStarted, l as emitWorkflowPublished, n as emitRunFailed, o as emitUpgradeClicked, r as emitRunLimitHit, s as emitWorkflowCreated, t as emitNodeInstalled } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
53
55
|
import { t as Label } from "./label-CDy86rIZ.js";
|
|
54
56
|
import { n as DEVPORTAL_NODE_APPS_PATH, r as resolveDevportalLink, t as PublishCustomNodeAction } from "./PublishCustomNodeAction-5XXnSA3H.js";
|
|
55
57
|
import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
|
|
@@ -76,10 +78,10 @@ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
|
76
78
|
import * as SwitchPrimitives from "@radix-ui/react-switch";
|
|
77
79
|
|
|
78
80
|
// src/components/FluidGridsRoot.tsx
|
|
79
|
-
const WorkflowsList$1 = lazy(() => import("./WorkflowsList-
|
|
80
|
-
const WorkflowBuilder$2 = lazy(() => import("./WorkflowBuilder-
|
|
81
|
-
const ExecutionsListPage$1 = lazy(() => import("./ExecutionsListPage-
|
|
82
|
-
const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-
|
|
81
|
+
const WorkflowsList$1 = lazy(() => import("./WorkflowsList-C3bHLpSv.js").then((n) => n.n).then((m) => ({ default: m.WorkflowsList })));
|
|
82
|
+
const WorkflowBuilder$2 = lazy(() => import("./WorkflowBuilder-DdvSGsxr.js").then((n) => n.n).then((m) => ({ default: m.WorkflowBuilder })));
|
|
83
|
+
const ExecutionsListPage$1 = lazy(() => import("./ExecutionsListPage-D63aCXJH.js").then((n) => n.n).then((m) => ({ default: m.ExecutionsListPage })));
|
|
84
|
+
const ExecutionDetailPage$1 = lazy(() => import("./ExecutionDetailPage-DYLWtHRG.js").then((n) => n.n).then((m) => ({ default: m.ExecutionDetailPage })));
|
|
83
85
|
const PageLoader = () => /* @__PURE__ */ jsx("div", {
|
|
84
86
|
className: "flex items-center justify-center h-64",
|
|
85
87
|
children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-primary" })
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
3
|
import { H as useFlowStore, a as changedSourceFiles, c as diagnosticsByPath, d as isEditableSourcePath, f as projectLanguage, h as sourceLanguageOf, l as interfaceFields, o as childRunIdOf, p as readCodeWorkflowState, r as CODE_WORKFLOW_NODE_TYPE, s as defaultSourcePath, u as interfaceHandlers } from "./node-operation-selection--oy-yEq_.js";
|
|
4
|
-
import {
|
|
5
|
-
import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-
|
|
4
|
+
import { $ as useNodeConfig, Fn as getNodeDetail, J as nodeSubtitle, Sn as useCodeWorkflowInterface, Y as nodeTitle, bn as clearCodeWorkflowDefinitionCache, dt as latestNodeLog, lt as FieldTree, mt as useGuardedNavigate, on as useNodeExecution, pn as fieldsFromValue, wn as declaredSignals } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
5
|
+
import { a as TabButton, c as NDV_Z_INDEX, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, r as NodeExecutionActions, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-CY6S4JMd.js";
|
|
6
6
|
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-C9XSzSXr.js";
|
|
7
7
|
import { Mt as NodeStatesDocument, Tr as WorkflowCodeSourceDocument, ht as FileDownloadUrlDocument, jr as WorkflowEditLeaseStatusDocument, p as BuildWorkflowCodeDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
8
|
-
import {
|
|
8
|
+
import { h as TableView, m as JsonView } from "./flow-builder-CE8cNXNi.js";
|
|
9
9
|
import { jt as useUnpinNodeDataMutation, qt as useWorkflowPinnedDataQuery, st as usePinNodeDataMutation } from "./useAgentDefinitions-B0dam3_o.js";
|
|
10
10
|
import { f as usePhaseCFlags, s as useDurableFunctionNodesEnabled } from "./feature-flags-DM5myWaD.js";
|
|
11
11
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
12
|
-
import { t as CodeEditorField } from "./code-editor-field-
|
|
12
|
+
import { t as CodeEditorField } from "./code-editor-field-CfP0QYUD.js";
|
|
13
13
|
import { h as fetchCodeBundleSdk } from "./api-BrCHB5oA.js";
|
|
14
|
-
import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-
|
|
14
|
+
import { n as SignalRunDialog, s as RunHistoryView, t as useRunHistory } from "./useRunHistory-CqfDFRzr.js";
|
|
15
15
|
import { s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
|
|
16
16
|
import { n as agentTracePath } from "./ai-usage-glCwHyQz.js";
|
|
17
17
|
import * as React$1 from "react";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Y as nodeTitle, lt as FieldTree } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
5
|
import { f as usePhaseCFlags } from "./feature-flags-DM5myWaD.js";
|
|
6
6
|
import { s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
7
|
-
import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-
|
|
7
|
+
import { a as TabButton, i as ReadOnlyFieldset, n as SchedulePanel, o as NodeSettingsPanel, s as NodeParamsForm, t as SCHEDULE_NODE_TYPE } from "./schedule-panel-CY6S4JMd.js";
|
|
8
8
|
import { useState } from "react";
|
|
9
9
|
import { Icon } from "@iconify/react";
|
|
10
10
|
import { cn } from "@burdenoff/fe-libs/utils";
|
package/dist/observability.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
import { Aa as
|
|
2
|
+
import { Aa as LogStreamEventType, Da as FailedRun, Ea as DataSinkSummary, Ma as NodeUsageStat, Oa as LogStreamDestination, Ta as DataSinkData, aAa as DataSinkDashboardPage, ja as LogStreamProvider, ka as LogStreamDestinationInput, nAa as InsightsPage, tAa as ErrorAnalyticsPage, wa as DashboardSummary } from "./index-7eJQwsNS.js";
|
|
3
3
|
export { type DashboardSummary, DataSinkDashboardPage, type DataSinkData, type DataSinkSummary, ErrorAnalyticsPage, type FailedRun, InsightsPage, type LogStreamDestination, type LogStreamDestinationInput, type LogStreamEventType, type LogStreamProvider, type NodeUsageStat };
|
package/dist/observability.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-
|
|
3
|
-
import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-
|
|
2
|
+
import { t as DataSinkDashboardPage } from "./DataSinkDashboardPage-DDvNPS8Z.js";
|
|
3
|
+
import { n as InsightsPage, t as ErrorAnalyticsPage } from "./InsightsPage-Duo83yAM.js";
|
|
4
4
|
|
|
5
5
|
export { DataSinkDashboardPage, ErrorAnalyticsPage, InsightsPage };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { An as
|
|
2
|
+
import { An as connectionsForAdapter, Mn as matchesAdapterProvider, Nn as newConnectionProviderKey, Pn as replaceAdapterConnections, jn as isOptionalAdapter } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
3
3
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
4
4
|
import { r as useAgentsUsingConnection } from "./useAgentDefinitions-B0dam3_o.js";
|
|
5
5
|
import { t as cn } from "./cn-QqidFIgr.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { A as nodeAccent, H as useFlowStore, j as NodeTypeIcon } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
-
import {
|
|
4
|
-
import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-
|
|
3
|
+
import { $ as useNodeConfig, Fn as getNodeDetail, J as nodeSubtitle, Y as nodeTitle, on as useNodeExecution } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
|
+
import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-DxMbKspp.js";
|
|
5
5
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
6
|
-
import { r as NodeExecutionActions } from "./schedule-panel-
|
|
6
|
+
import { r as NodeExecutionActions } from "./schedule-panel-CY6S4JMd.js";
|
|
7
7
|
import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
8
8
|
import { useReactFlow, useStore } from "@xyflow/react";
|
|
9
9
|
import { Icon } from "@iconify/react";
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
// src/billing/quota.ts
|
|
3
|
+
/**
|
|
4
|
+
* Plan-quota refusals for the FluidGrids SDK.
|
|
5
|
+
*
|
|
6
|
+
* wspace-workflow-svc meters two quotas with `@usage`, and the gateway refuses
|
|
7
|
+
* a call past either one with `429 QUOTA_EXHAUSTED`:
|
|
8
|
+
*
|
|
9
|
+
* - `fluidgrids.runs.monthly` — every mutation that starts a run:
|
|
10
|
+
* `triggerWorkflow`, `runFromNode`, `replayWorkflowRun`, `retryWorkflowRuns`
|
|
11
|
+
* and `listenForWebhookTestEvent`.
|
|
12
|
+
* - `fluidgrids.workflows.count` — the mutations that create a workflow
|
|
13
|
+
* (save, duplicate, template import). Those keep their local
|
|
14
|
+
* `QuotaExhaustedDialog`.
|
|
15
|
+
* - `fluidgrids.nodes.count` — node additions are counted by workflow save;
|
|
16
|
+
* the same save dialog handles its refusal.
|
|
17
|
+
*
|
|
18
|
+
* A run refusal opens the shell's shared upgrade prompt — see
|
|
19
|
+
* `openRunQuotaUpgradePrompt` in `./upgradePrompt`. This module is the pure
|
|
20
|
+
* detection half, so it imports nothing from `@burdenoff/fe-libs`.
|
|
21
|
+
*
|
|
22
|
+
* ★★ Why this does not just call fe-libs `isQuotaExhaustedError`. That helper
|
|
23
|
+
* reads the Apollo 3 shapes (`graphQLErrors`, `networkError.result.errors`, a
|
|
24
|
+
* code in the message). Under Apollo 4 — what every host runs — the refusal
|
|
25
|
+
* never takes those shapes:
|
|
26
|
+
*
|
|
27
|
+
* - the gateway answers `429`, and Apollo 4's HTTP link turns any non-2xx
|
|
28
|
+
* `application/json` response into a `ServerError` whose GraphQL body is
|
|
29
|
+
* only in `bodyText` (message: "Response not successful: Received status
|
|
30
|
+
* code 429");
|
|
31
|
+
* - a 2xx GraphQL error arrives as `CombinedGraphQLErrors`, whose list is
|
|
32
|
+
* `.errors`, not `.graphQLErrors`;
|
|
33
|
+
* - `throwIfResultError` wraps either one in a plain `Error`, keeping the
|
|
34
|
+
* original as `cause`.
|
|
35
|
+
*
|
|
36
|
+
* None of those match, so the refusal read as an ordinary failure. This walker
|
|
37
|
+
* reads all of them, and the Apollo 3 shapes too.
|
|
38
|
+
*/
|
|
39
|
+
/** The monthly run allowance every run-starting mutation is metered against. */
|
|
40
|
+
const RUNS_QUOTA_NAME = "fluidgrids.runs.monthly";
|
|
41
|
+
/** The workflow-count allowance save / duplicate / template import consume. */
|
|
42
|
+
const WORKFLOWS_QUOTA_NAME = "fluidgrids.workflows.count";
|
|
43
|
+
/**
|
|
44
|
+
* Where an upgrade CTA sends the user: the plan picker, not the billing
|
|
45
|
+
* overview. Matches the shared `UpgradePromptModal` default and the shell nav.
|
|
46
|
+
*/
|
|
47
|
+
const BILLING_PLANS_PATH = "/billing/plans";
|
|
48
|
+
const QUOTA_EXHAUSTED_CODE = "QUOTA_EXHAUSTED";
|
|
49
|
+
const QUOTA_NOT_PROVISIONED_CODE = "QUOTA_NOT_PROVISIONED";
|
|
50
|
+
function asRecord(value) {
|
|
51
|
+
return typeof value === "object" && value !== null ? value : null;
|
|
52
|
+
}
|
|
53
|
+
/** The `extensions` of each entry of an `errors`-like list. */
|
|
54
|
+
function extensionsOfList(list) {
|
|
55
|
+
if (!Array.isArray(list)) return [];
|
|
56
|
+
const found = [];
|
|
57
|
+
for (const entry of list) {
|
|
58
|
+
const extensions = asRecord(asRecord(entry)?.extensions);
|
|
59
|
+
if (extensions) found.push(extensions);
|
|
60
|
+
}
|
|
61
|
+
return found;
|
|
62
|
+
}
|
|
63
|
+
/** The GraphQL `errors[].extensions` inside a raw response body, if it is JSON. */
|
|
64
|
+
function extensionsOfBody(bodyText) {
|
|
65
|
+
if (typeof bodyText !== "string" || !bodyText.includes("errors")) return [];
|
|
66
|
+
try {
|
|
67
|
+
return extensionsOfList(asRecord(JSON.parse(bodyText))?.errors);
|
|
68
|
+
} catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Bounds the `cause` walk; real chains are one or two links long. */
|
|
73
|
+
const MAX_CAUSE_DEPTH = 5;
|
|
74
|
+
/**
|
|
75
|
+
* Every `extensions` object reachable on a thrown value, across the Apollo 3
|
|
76
|
+
* and Apollo 4 shapes and the `cause` chain `throwIfResultError` adds.
|
|
77
|
+
*/
|
|
78
|
+
function collectExtensions(error) {
|
|
79
|
+
const found = [];
|
|
80
|
+
const seen = /* @__PURE__ */ new Set();
|
|
81
|
+
let current = error;
|
|
82
|
+
for (let depth = 0; depth < MAX_CAUSE_DEPTH; depth += 1) {
|
|
83
|
+
const host = asRecord(current);
|
|
84
|
+
if (!host || seen.has(host)) break;
|
|
85
|
+
seen.add(host);
|
|
86
|
+
const direct = asRecord(host.extensions);
|
|
87
|
+
if (direct) found.push(direct);
|
|
88
|
+
found.push(...extensionsOfList(host.errors));
|
|
89
|
+
found.push(...extensionsOfList(host.graphQLErrors));
|
|
90
|
+
const networkError = asRecord(host.networkError);
|
|
91
|
+
found.push(...extensionsOfList(asRecord(networkError?.result)?.errors));
|
|
92
|
+
found.push(...extensionsOfBody(networkError?.bodyText));
|
|
93
|
+
found.push(...extensionsOfList(asRecord(host.result)?.errors));
|
|
94
|
+
found.push(...extensionsOfBody(host.bodyText));
|
|
95
|
+
current = host.cause;
|
|
96
|
+
}
|
|
97
|
+
return found;
|
|
98
|
+
}
|
|
99
|
+
/** Every GraphQL `extensions.code` carried by `error` or its causes. */
|
|
100
|
+
function errorCodesOf(error) {
|
|
101
|
+
return collectExtensions(error).map((ext) => ext.code).filter((code) => typeof code === "string");
|
|
102
|
+
}
|
|
103
|
+
function stringField(extensions, key) {
|
|
104
|
+
const value = extensions[key];
|
|
105
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The refusal kind one GraphQL `extensions` object reports, or null.
|
|
109
|
+
*
|
|
110
|
+
* The gateway sets both `code` and `quotaBlock` on a quota refusal
|
|
111
|
+
* (`sendQuotaExhausted` in wspace-public-gateway); either is enough here, so
|
|
112
|
+
* a refusal relayed with only one of them (a proxy, an older gateway build)
|
|
113
|
+
* still reads as one.
|
|
114
|
+
*/
|
|
115
|
+
function refusalKindOf(extensions) {
|
|
116
|
+
if (extensions.code === "QUOTA_NOT_PROVISIONED" || extensions.quotaBlock === "not-provisioned") return "not-provisioned";
|
|
117
|
+
if (extensions.code === "QUOTA_EXHAUSTED" || extensions.quotaBlock === "exhausted") return "exhausted";
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The quota refusal carried by `error`, or null when it is not one.
|
|
122
|
+
*
|
|
123
|
+
* Keyed on `extensions.code` (or the gateway's `extensions.quotaBlock`), never
|
|
124
|
+
* on the HTTP status or the message: both refusals are 429s, and only those
|
|
125
|
+
* fields tell "used up" from "never granted". `not-provisioned` wins when both
|
|
126
|
+
* appear.
|
|
127
|
+
*/
|
|
128
|
+
function findQuotaRefusal(error) {
|
|
129
|
+
const all = collectExtensions(error);
|
|
130
|
+
const notProvisioned = all.find((ext) => refusalKindOf(ext) === "not-provisioned");
|
|
131
|
+
if (notProvisioned) return {
|
|
132
|
+
kind: "not-provisioned",
|
|
133
|
+
quotaName: stringField(notProvisioned, "quotaName"),
|
|
134
|
+
limitLeft: null
|
|
135
|
+
};
|
|
136
|
+
const exhausted = all.find((ext) => refusalKindOf(ext) === "exhausted");
|
|
137
|
+
if (exhausted) {
|
|
138
|
+
const limitLeft = exhausted.limitLeft;
|
|
139
|
+
return {
|
|
140
|
+
kind: "exhausted",
|
|
141
|
+
quotaName: stringField(exhausted, "quotaName"),
|
|
142
|
+
limitLeft: typeof limitLeft === "number" ? limitLeft : null
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
/** True when `error` is an exhausted (not merely unprovisioned) plan quota. */
|
|
148
|
+
function isQuotaExhaustedFailure(error) {
|
|
149
|
+
return findQuotaRefusal(error)?.kind === "exhausted";
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export { collectExtensions as a, isQuotaExhaustedFailure as c, WORKFLOWS_QUOTA_NAME as i, QUOTA_EXHAUSTED_CODE as n, errorCodesOf as o, RUNS_QUOTA_NAME as r, findQuotaRefusal as s, BILLING_PLANS_PATH as t };
|
package/dist/quota.d.ts
ADDED
package/dist/quota.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
import { ApolloClient } from "@apollo/client";
|
|
3
|
+
interface RunsQuotaRow {
|
|
4
|
+
quotaName: string;
|
|
5
|
+
limit?: number | null;
|
|
6
|
+
used: number;
|
|
7
|
+
noLimit: boolean;
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
}
|
|
11
|
+
interface RunsQuota {
|
|
12
|
+
used: number;
|
|
13
|
+
limit: number | null;
|
|
14
|
+
noLimit: boolean;
|
|
15
|
+
}
|
|
16
|
+
type RunsQuotaLevel = "ok" | "warning" | "exhausted";
|
|
17
|
+
declare function summarizeRunsQuota(rows: readonly RunsQuotaRow[], quotaName?: string): RunsQuota | null;
|
|
18
|
+
declare function runsQuotaLevel(quota: RunsQuota): RunsQuotaLevel;
|
|
19
|
+
declare function readRunsQuota(client: Pick<ApolloClient, "query">, workspaceId: string): Promise<RunsQuota | null>;
|
|
20
|
+
export { summarizeRunsQuota as a, runsQuotaLevel as i, RunsQuotaLevel as n, readRunsQuota as r, RunsQuota as t };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { r as RUNS_QUOTA_NAME } from "./quota-Cdt8yz7N.js";
|
|
3
|
+
import { gql } from "@apollo/client/core";
|
|
4
|
+
|
|
5
|
+
// src/billing/runsQuotaDocument.ts
|
|
6
|
+
/**
|
|
7
|
+
* The runs-quota read's own GraphQL document (BOFF-10854, companion to the
|
|
8
|
+
* light-SDK-entry work of BOFF-11826).
|
|
9
|
+
*
|
|
10
|
+
* `readRunsQuota` (`./runsQuota`) is reachable from the light `./quota`
|
|
11
|
+
* entry — a host's profile/plan surface, not the builder — so its one query
|
|
12
|
+
* is kept here as a plain `gql` tag over `@apollo/client/core`, the same
|
|
13
|
+
* pattern `modules/observability/operations.ts` already uses for its own
|
|
14
|
+
* module-local operations. It must NOT come from the SDK's generated
|
|
15
|
+
* `../graphql/operations`: that module also carries a document and an Apollo
|
|
16
|
+
* hook for every other operation in the SDK (executions, builder, templates,
|
|
17
|
+
* node editors, …), so importing even one document from it would put all of
|
|
18
|
+
* that on a quota-only bundle — exactly the ~700 KB regression BOFF-11826
|
|
19
|
+
* fixed for `./flags` and `./workflow-route`.
|
|
20
|
+
*
|
|
21
|
+
* Kept field-for-field equal to
|
|
22
|
+
* `src/operations/workflows/queries/workspaceRunsQuota.graphql` (the same
|
|
23
|
+
* source the generated module's copy is compiled from) and validated against
|
|
24
|
+
* the composed workspace schema by `runsQuotaDocument.test.ts`.
|
|
25
|
+
*/
|
|
26
|
+
const WORKSPACE_RUNS_QUOTA_QUERY = gql`
|
|
27
|
+
query WorkspaceRunsQuota($workspaceId: ID!) {
|
|
28
|
+
workspaceQuotaAssignments(workspaceId: $workspaceId) {
|
|
29
|
+
id
|
|
30
|
+
quotaName
|
|
31
|
+
limit
|
|
32
|
+
used
|
|
33
|
+
noLimit
|
|
34
|
+
isActive
|
|
35
|
+
createdAt
|
|
36
|
+
resetPeriod
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
|
|
41
|
+
// src/billing/runsQuota.ts
|
|
42
|
+
/** Mirrors wspace-activity-svc `MAX_ASSIGNMENTS_PER_QUOTA`. */
|
|
43
|
+
const MAX_ASSIGNMENTS_PER_QUOTA = 100;
|
|
44
|
+
/** Share of the allowance at which the meter warns and offers an upgrade. */
|
|
45
|
+
const RUNS_QUOTA_WARNING_RATIO = .8;
|
|
46
|
+
const createdAtMs = (row) => {
|
|
47
|
+
const ms = Date.parse(row.createdAt);
|
|
48
|
+
return Number.isNaN(ms) ? Number.POSITIVE_INFINITY : ms;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Aggregates the workspace's active `fluidgrids.runs.monthly` assignments.
|
|
52
|
+
* Null when there is none: the quota is not provisioned, nothing to meter.
|
|
53
|
+
*/
|
|
54
|
+
function summarizeRunsQuota(rows, quotaName = RUNS_QUOTA_NAME) {
|
|
55
|
+
const assignments = rows.filter((row) => row.isActive && row.quotaName === quotaName).sort((a, b) => createdAtMs(a) - createdAtMs(b)).slice(0, 100);
|
|
56
|
+
if (assignments.length === 0) return null;
|
|
57
|
+
const used = assignments.reduce((sum, row) => sum + row.used, 0);
|
|
58
|
+
if (assignments.some((row) => row.noLimit || row.limit == null)) return {
|
|
59
|
+
used,
|
|
60
|
+
limit: null,
|
|
61
|
+
noLimit: true
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
used,
|
|
65
|
+
limit: assignments.reduce((sum, row) => sum + (row.limit ?? 0), 0),
|
|
66
|
+
noLimit: false
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Where the workspace stands against its allowance. */
|
|
70
|
+
function runsQuotaLevel(quota) {
|
|
71
|
+
if (quota.noLimit || quota.limit === null) return "ok";
|
|
72
|
+
if (quota.limit <= 0 || quota.used >= quota.limit) return "exhausted";
|
|
73
|
+
return quota.used / quota.limit >= .8 ? "warning" : "ok";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* One read of the workspace's run allowance.
|
|
77
|
+
*
|
|
78
|
+
* Null — the meter hides — when there is no workspace, when the read errors
|
|
79
|
+
* (FORBIDDEN, a gateway 500, a network failure) or when the quota is not
|
|
80
|
+
* provisioned. A failed read must never render a number: "0 used" would read
|
|
81
|
+
* as "nothing spent" when the truth is "unknown".
|
|
82
|
+
*/
|
|
83
|
+
async function readRunsQuota(client, workspaceId) {
|
|
84
|
+
if (!workspaceId) return null;
|
|
85
|
+
try {
|
|
86
|
+
const result = await client.query({
|
|
87
|
+
query: WORKSPACE_RUNS_QUOTA_QUERY,
|
|
88
|
+
variables: { workspaceId },
|
|
89
|
+
fetchPolicy: "network-only",
|
|
90
|
+
errorPolicy: "all"
|
|
91
|
+
});
|
|
92
|
+
if (result.error) return null;
|
|
93
|
+
const rows = result.data?.workspaceQuotaAssignments;
|
|
94
|
+
return rows ? summarizeRunsQuota(rows) : null;
|
|
95
|
+
} catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { runsQuotaLevel as n, summarizeRunsQuota as r, readRunsQuota as t };
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { _ as throwIfResultError, m as describeOperationError, n as getFluidGridsClient, r as getFluidGridsClientSafe } from "./client-C9XSzSXr.js";
|
|
3
3
|
import { H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
4
|
-
import {
|
|
4
|
+
import { Bn as useBuilderReadOnly, G as asRecord, K as coerceNumber, U as useRunGuard, X as optionText, Y as nodeTitle, Z as paramsFromOperation, _n as openRunQuotaUpgradePrompt, at as resolveLoadOptionsSpec, ct as casesFromRules, dn as parseParameterValue, fn as structuredParameterType, ft as boundFieldsOf, gn as useFluidGridsAnalytics, hn as isParamVisible, it as optionListValues, nt as isStringOptionList, ot as ConditionTreeBuilder, pt as missingRequiredParameters, rt as optionListText, st as SwitchRulesEditor, t as FluidGridsContext, un as formatParameterValue, ut as parseMappingValue } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
5
5
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
6
|
-
import { y as useGlobalStoreClient } from "./TemplateCard-
|
|
6
|
+
import { y as useGlobalStoreClient } from "./TemplateCard-6W2q2wiK.js";
|
|
7
7
|
import { Cr as WorkflowCallInputsDocument, Ct as ListenForWebhookTestEventDocument, Rn as StopWebhookTestListenerDocument, Vt as PreviewScheduleDocument, pr as WebhookTestListenerDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
8
8
|
import { t as useAgentDefinitionList, vt as useRunFromNodeEligibilityQuery } from "./useAgentDefinitions-B0dam3_o.js";
|
|
9
|
-
import {
|
|
9
|
+
import { a as collectExtensions } from "./quota-Cdt8yz7N.js";
|
|
10
10
|
import { PD as ScheduleType, VF as WorkflowScheduleOverlapPolicy } from "./graphql-types-CDKVWH2R.js";
|
|
11
11
|
import { C as rowsFromRules, S as readAssertRulesSetting, _ as ASSERT_OPERATORS, b as normaliseAssertRules, v as describeAssertRuleProblem, w as ruleFromRow, x as operatorSpec, y as emptyAssertRuleRow } from "./WorkflowProposalCard-qrEeNyYG.js";
|
|
12
12
|
import { r as describeRule, s as isAgentNodeType } from "./agent-form-Bfvm32j1.js";
|
|
13
13
|
import { i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-CMfn30xT.js";
|
|
14
14
|
import { L as triggerSchedule, T as pauseSchedule, t as backfillSchedule, u as describeSchedule, z as unpauseSchedule } from "./api-BrCHB5oA.js";
|
|
15
|
-
import { a as ConnectionSelector, i as RunOnSection, n as PopoverContent$1, r as PopoverTrigger$1, t as Popover$1 } from "./popover-
|
|
16
|
-
import { r as normalizeCodeLanguage, t as CodeEditorField } from "./code-editor-field-
|
|
15
|
+
import { a as ConnectionSelector, i as RunOnSection, n as PopoverContent$1, r as PopoverTrigger$1, t as Popover$1 } from "./popover-B1aKz7DC.js";
|
|
16
|
+
import { r as normalizeCodeLanguage, t as CodeEditorField } from "./code-editor-field-CfP0QYUD.js";
|
|
17
17
|
import { useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
18
18
|
import { Icon } from "@iconify/react";
|
|
19
19
|
import { cn } from "@burdenoff/fe-libs/utils";
|
package/dist/settings.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as SettingsPage } from "./SettingsPage-
|
|
2
|
+
import { t as SettingsPage } from "./SettingsPage-DI_vIG7t.js";
|
|
3
3
|
import { t as ManagedAiPolicyAuthorityProvider } from "./ManagedAiPolicyAuthority-BxwJ3ptd.js";
|
|
4
4
|
|
|
5
5
|
export { ManagedAiPolicyAuthorityProvider, SettingsPage };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { A as nodeAccent, H as useFlowStore, j as NodeTypeIcon } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
-
import {
|
|
4
|
-
import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-
|
|
5
|
-
import { r as NodeExecutionActions } from "./schedule-panel-
|
|
3
|
+
import { $ as useNodeConfig, Fn as getNodeDetail, J as nodeSubtitle, Y as nodeTitle, on as useNodeExecution } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
|
+
import { i as NodeInputFields, n as useNodeEditorTab, r as NodeEditorTabs, t as NodeEditorTabBody } from "./node-editor-tab-body-DxMbKspp.js";
|
|
5
|
+
import { r as NodeExecutionActions } from "./schedule-panel-CY6S4JMd.js";
|
|
6
6
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { Icon } from "@iconify/react";
|
package/dist/templates.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as TemplatesPage } from "./TemplatesPage-
|
|
3
|
-
import { t as TemplatePreview } from "./TemplatePreview-
|
|
2
|
+
import { t as TemplatesPage } from "./TemplatesPage-Bvg6R2P9.js";
|
|
3
|
+
import { t as TemplatePreview } from "./TemplatePreview-t3251W_n.js";
|
|
4
4
|
|
|
5
5
|
export { TemplatePreview, TemplatesPage };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
3
|
-
import { u as nodesOf } from "./fluidgridsEvents-
|
|
3
|
+
import { u as nodesOf } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
4
4
|
import { n as useAgentMarksStore } from "./marksStore-DGCXjTmZ.js";
|
|
5
5
|
import { useEffect, useState } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|