@oomol-lab/open-flow 0.1.0-beta.85 → 0.1.0-beta.87
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/browser/{FlowCanvas-CZoHhB1y.js → FlowCanvas-SqPUBqze.js} +3 -3
- package/dist/browser/{createResourceDialog-Bi4fUnbD.js → createResourceDialog-CB3eiK7e.js} +3 -3
- package/dist/browser/{dialog-BzoSxhXQ.js → dialog-Bi-MVTGj.js} +291 -143
- package/dist/browser/{exportPng-CXVWVlLc.js → exportPng-CLZKdNzR.js} +2 -2
- package/dist/browser/{flowChanges-C567g-Pc.js → flowChanges-azhepfr-.js} +375 -83
- package/dist/browser/{flowWorkspace-BNdBKtla.js → flowWorkspace-Cs2ZGBYK.js} +1619 -475
- package/dist/browser/fr-CNTSedYU.js +593 -0
- package/dist/browser/ja-CxQBHr2J.js +593 -0
- package/dist/browser/ko-D1Exiv1h.js +593 -0
- package/dist/browser/licenses.md +1 -1
- package/dist/browser/{markdownContent-DF39sd9T.js → markdownContent-D0BBrFcF.js} +1 -1
- package/dist/browser/preview.css +193 -191
- package/dist/browser/preview.js +1997 -624
- package/dist/browser/ru-BzLZv0B7.js +593 -0
- package/dist/browser/theme.css +3 -1
- package/dist/browser/{tooltip-DGj5pudg.js → tooltip-BZ6tpqnr.js} +58 -24
- package/dist/browser/ui.css +12 -10
- package/dist/browser/ui.d.ts +1 -0
- package/dist/browser/ui.js +110 -63
- package/dist/browser/workbench.css +193 -191
- package/dist/browser/workbench.js +86 -17
- package/dist/browser/{workbenchSelect-BIaEVTx6.js → workbenchSelect-CHOeceKA.js} +2 -2
- package/dist/browser/{wrapLayout-C4moMKgb.js → wrapLayout-BB_qwy3k.js} +1 -1
- package/dist/browser/zh-CN-Dg_xSGde.js +593 -0
- package/dist/browser/zh-TW-oxuLwsV0.js +593 -0
- package/dist/command/index.js +61 -57
- package/dist/command/licenses.md +28 -4
- package/dist/common/authoring.d.ts +5 -5
- package/dist/common/authoringExamples.d.ts +3 -2
- package/dist/common/authoringSchema.d.ts +41 -4
- package/dist/common/catalogCache.d.ts +46 -0
- package/dist/common/connector-action.js +13 -10
- package/dist/common/connector-proxy.d.ts +96 -0
- package/dist/common/connector-proxy.js +5209 -0
- package/dist/common/control-api-conformance.js +312 -46
- package/dist/common/control-api.d.ts +12 -1
- package/dist/common/control-api.js +303 -41
- package/dist/common/control-requests.d.ts +4 -3
- package/dist/common/control-requests.js +14111 -171
- package/dist/common/engine-contract.d.ts +3 -2
- package/dist/common/event-source.js +55 -23
- package/dist/common/flow-authoring-node.d.ts +2 -0
- package/dist/common/flow-authoring.js +6936 -6781
- package/dist/common/flow-change-schema.d.ts +1 -1
- package/dist/common/flow-change.d.ts +2 -2
- package/dist/common/flow-change.js +91 -36
- package/dist/common/flow-connectionUsage.d.ts +1 -1
- package/dist/common/flow-encoding.js +93 -38
- package/dist/common/flow-requestParameters.d.ts +34 -0
- package/dist/common/flow-semantics.js +9429 -9236
- package/dist/common/flow-state.js +55 -23
- package/dist/common/flow-workflowFile.d.ts +3 -1
- package/dist/common/http-request.d.ts +6 -11
- package/dist/common/http-request.js +192 -141
- package/dist/common/licenses.md +1 -1
- package/dist/common/mcp.d.ts +3 -3
- package/dist/common/mcp.js +303 -41
- package/dist/common/run-events.js +1 -0
- package/dist/common/runtime-contract.js +10 -4
- package/dist/common/runtime-nodejs-compat.js +55 -23
- package/dist/common/scheduler-checkpoint.d.ts +3 -3
- package/dist/common/scheduler-dependencies.d.ts +22 -28
- package/dist/common/scheduler-node-execution.d.ts +1 -0
- package/dist/common/scheduler.d.ts +8 -2
- package/dist/common/scheduler.js +274 -95
- package/dist/common/workflow.js +51 -19
- package/dist/common/workflowAuthoring.d.ts +411 -0
- package/dist/render/browser/licenses.md +1 -1
- package/dist/render/browser/runtime.css +12 -10
- package/dist/render/browser/runtime.js +183 -49
- package/dist/render/node/index.js +85 -30
- package/dist/render/node/licenses.md +1 -1
- package/package.json +1 -1
- package/skills/open-flow/references/flow-authoring.md +14 -13
- package/src/base/common/jsonSchema.ts +11 -0
- package/src/connector/common/actionSchema.ts +4 -11
- package/src/connector/common/proxy.ts +152 -0
- package/src/control/common/api.ts +99 -3
- package/src/control/common/authoring.ts +23 -9
- package/src/control/common/authoringExamples.ts +9 -0
- package/src/control/common/authoringSchema.ts +21 -12
- package/src/control/common/catalogCache.ts +145 -0
- package/src/control/common/conformance.ts +9 -3
- package/src/control/common/connectorQueries.ts +17 -2
- package/src/control/common/requests.ts +1 -0
- package/src/control/common/workflowAuthoring.ts +120 -0
- package/src/execution/common/checkpoint.ts +18 -12
- package/src/execution/common/dependencies.ts +132 -15
- package/src/execution/common/events.ts +3 -0
- package/src/execution/common/node-execution.ts +22 -15
- package/src/execution/common/scheduler.ts +20 -31
- package/src/flow/common/change.ts +2 -1
- package/src/flow/common/changeSchema.ts +11 -1
- package/src/flow/common/connectionUsage.ts +4 -2
- package/src/flow/common/errorHandling.ts +3 -1
- package/src/flow/common/nodeChanges.ts +35 -18
- package/src/flow/common/requestParameters.ts +120 -0
- package/src/flow/common/semantics.ts +51 -1
- package/src/flow/common/sourceField.ts +3 -2
- package/src/flow/common/workflowFile.ts +2 -2
- package/src/http/common/httpRequest.ts +28 -78
- package/src/runtime/common/engineContract.ts +6 -3
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
|
|
2
|
-
import { $ as waitBranchDescription, A as DropdownMenuItem, B as CompositeItem, C as IconifyProvider, D as DropdownMenuCheckboxItem, E as DropdownMenu, F as DropdownMenuSub, I as DropdownMenuSubContent, L as DropdownMenuSubTrigger, M as DropdownMenuRadioGroup, N as DropdownMenuRadioItem, O as DropdownMenuContent, P as DropdownMenuSeparator, R as DropdownMenuTrigger, _ as Z$1, a as CompositeRoot, c as PopoverContent, d as PopoverPanelContent, dt as useAriaLabelledBy, f as PopoverTitle, g as VirtualScrollArea, h as ScrollArea, i as Textarea, j as DropdownMenuLabel, k as DropdownMenuGroup, l as PopoverDescription, m as NativeScrollArea, p as PopoverTrigger, s as Popover, u as PopoverHeader, ut as Checkbox, v as ContentIcon } from "./wrapLayout-
|
|
2
|
+
import { $ as waitBranchDescription, A as DropdownMenuItem, B as CompositeItem, C as IconifyProvider, D as DropdownMenuCheckboxItem, E as DropdownMenu, F as DropdownMenuSub, I as DropdownMenuSubContent, L as DropdownMenuSubTrigger, M as DropdownMenuRadioGroup, N as DropdownMenuRadioItem, O as DropdownMenuContent, P as DropdownMenuSeparator, R as DropdownMenuTrigger, _ as Z$1, a as CompositeRoot, c as PopoverContent, d as PopoverPanelContent, dt as useAriaLabelledBy, f as PopoverTitle, g as VirtualScrollArea, h as ScrollArea, i as Textarea, j as DropdownMenuLabel, k as DropdownMenuGroup, l as PopoverDescription, m as NativeScrollArea, p as PopoverTrigger, s as Popover, u as PopoverHeader, ut as Checkbox, v as ContentIcon } from "./wrapLayout-BB_qwy3k.js";
|
|
3
3
|
import { i as compute, l as val } from "./dist-bO8nvHFH.js";
|
|
4
4
|
import { c as useLang, l as useTranslate, o as I18nProvider, r as isPlainObject, s as useI18n, u as useVal } from "./dist-BFmpkX4P.js";
|
|
5
|
-
import { $ as useToolbarRootContext, A as string, Bn as transitionStatusMapping, Br as useStableCallback, Cr as cn, Er as useRenderElement, Fr as formatErrorMessage, In as useTransitionStatus, Ir as mergeProps, Ln as useOpenChangeComplete, Lr as useIsoLayoutEffect, Mr as useButton, Nn as useLabelableId, Or as EMPTY_OBJECT, Qt as useStore, Sr as buttonVariants, Un as useValueChanged, Wn as createChangeEventDetails, _r as fieldValidityMapping, a as createTooltipHandle, br as useControlled, c as TooltipPositioner, d as TooltipRoot, dr as useFormContext, fr as useRegisterFieldControl, i as TooltipTrigger, jr as useMergedRefs, l as TooltipPortal, mr as useBaseUiId, mt as triggerOpenStateMapping, n as TooltipContent, nn as require_builtin_esm_external_require_react, o as TooltipArrow, p as timeZoneOffsetMinutes, pr as useFieldRootContext, qn as clearPress, r as TooltipProvider, rr as none, s as TooltipPopup, t as Tooltip, u as TooltipTrigger$1, ur as useLabelableContext, vr as visuallyHidden, wr as cva, xr as Button$1, yr as visuallyHiddenInput, zr as error$1 } from "./tooltip-
|
|
6
|
-
import { $ as waitAutoContinueSchema,
|
|
7
|
-
import { C as isMac, S as toManifestNodeId, T as flowPngAspectRatios, _ as E$1, a as CanvasNodeIcon, b as toViewEdge, c as collapseAllNested, d as IconStack, f as selectableTimeZones, g as cronDescription, h as timeZoneOffset, i as pasteVideoLink, l as formatDuration, m as timeZoneLongLabel, n as setAddItemId, o as defaultTriggerIcon, p as timeZoneLabel, s as JSONViewer, t as FlowCanvas, u as useDebouncedValue, v as CanvasTooltip, w as isSameViewport, x as toManifestHandleName, y as CanvasStore } from "./FlowCanvas-
|
|
8
|
-
import { $ as resourceValue, $t as WorkflowExportDialog, A as schemaForEditor, An as TabsTrigger, Ar as serverAddress, B as datePickerValue, Bn as EmptyMedia, Br as ApiError, Cn as selectors, Cr as inputValue, D as defaultValueEditorSchema, Dn as Tabs, Dr as openApiTask, Dt as diagnosticMessage, E as supportsFeishuChatFilter, En as IconPickerButton, Er as openApiFieldIssues, F as calendarChange, Fn as InputGroupInput, Fr as workflowCandidateGroup, G as indexAddNodeOptions, Gn as SourceSelect, H as isDateFormat, Hn as Badge, Hr as eventSourceKind, I as calendarDate, In as Empty, Ir as workflowCapability, Jn as EventSourceSetup, Kn as createI18n, L as dateFromTimeZone, Ln as EmptyContent, Lr as workflowSelectionTask, M as getDefaultValue, Mn as followWorkbenchLink, Mr as sameWorkflowInterface, N as isUnconstrainedSchema, Nn as InputGroup, Nr as workflowAgentTool, O as editorComponent, On as TabsContent, Or as securityOptions, Ot as diagnosticNodeId, P as typeOfSchema, Pn as InputGroupAddon, Q as resourceData, R as dateInTimeZone, Rn as EmptyDescription, Sn as ComboboxRoot, Sr as triggerConfigValues, St as revisionView, T as feishuResourceKind, Tn as useComboboxRootContext, Tr as object$1, V as dateTimeWall, Vn as EmptyTitle, Vr as controlErrorCode, Wn as SourceForm, Y as connectorActionPresentation, Yn as errorNotice, Z as observeResource, Zt as dequal$1, _n as ComboboxList, _t as actionSummary, ar as webhookResponseDiagnostics, bn as ComboboxInputGroup, bt as canCancelRun, cn as selectionMenuItemClass, dn as valueEditor_module_default, dr as isJsonObject, dt as loadJson, en as WorkflowExportMenuItem, er as decodeResultList, fn as ComboboxItemIndicator, ft as designerGraph, gn as ComboboxPortal, gt as triggerNodeIcon, hn as ComboboxPositioner, ht as semanticNodeIcon, ir as resolutionOutputPorts, it as decodeAppCatalogResponse, j as valueForEditor, jr as servers, jt as connectionCatalog, k as editorGroups, kn as TabsList, kr as selectOperation, kt as schemaMismatchMessage, ln as ValueControl, mn as ComboboxPopup, mt as nodeTitle, n as agentTool, nn as IdTooltip, nr as executionReachableNodes, or as sourceOutputLabel, ot as getAppCatalogCache, pn as ComboboxItem, pt as nodeIcon, q as mapSource, qn as FeishuEventPicker, rn as FlowSettingsButton, rr as inputSourceCandidates, sn as selectionMenuContentClass, sr as sourcePort, tn as useWorkflowExportAction, tt as provider, un as ValueEditorFeedback, ur as triggerOutputDefinitions, vn as GroupCollectionProvider, vt as providerIcon, wn as useComboboxInputValueContext, wr as listOperations, xn as ComboboxInput, xr as triggerConfigValue, xt as hasRunFilter, yn as ComboboxTrigger, z as datePickerChange, zn as EmptyHeader } from "./flowChanges-
|
|
5
|
+
import { $ as useToolbarRootContext, A as string, Bn as transitionStatusMapping, Br as useStableCallback, Cr as cn, Er as useRenderElement, Fr as formatErrorMessage, In as useTransitionStatus, Ir as mergeProps, Ln as useOpenChangeComplete, Lr as useIsoLayoutEffect, Mr as useButton, Nn as useLabelableId, Or as EMPTY_OBJECT, Qt as useStore, Sr as buttonVariants, Un as useValueChanged, Wn as createChangeEventDetails, _r as fieldValidityMapping, a as createTooltipHandle, br as useControlled, c as TooltipPositioner, d as TooltipRoot, dr as useFormContext, fr as useRegisterFieldControl, i as TooltipTrigger, jr as useMergedRefs, l as TooltipPortal, mr as useBaseUiId, mt as triggerOpenStateMapping, n as TooltipContent, nn as require_builtin_esm_external_require_react, o as TooltipArrow, p as timeZoneOffsetMinutes, pr as useFieldRootContext, qn as clearPress, r as TooltipProvider, rr as none, s as TooltipPopup, t as Tooltip, u as TooltipTrigger$1, ur as useLabelableContext, vr as visuallyHidden, wr as cva, xr as Button$1, yr as visuallyHiddenInput, zr as error$1 } from "./tooltip-BZ6tpqnr.js";
|
|
6
|
+
import { $ as waitAutoContinueSchema, $t as SelectGroup, A as comparisonIssue, Bt as schemaObject, D as nodeSystemOutputPorts, Dt as connectorProxyTask, E as nodeErrorSchema, Et as connectorProxySupportsBody, F as operatorsForType, Ft as webhookMethods, It as webhookSupportsBody, J as webhookResponseAllowsBody, K as webhookHeaderValuePort, L as unaryOperator, O as supportsNodeErrorHandling, P as operandHandle, Pt as httpHeaderNameIssue, Q as workflowOutputsPort, Qt as SelectContent, R as valueType, Rt as matchesSchema, St as connectorProxyHeaderSchema, T as workflowToolNameIssue, Tt as connectorProxyQuerySchema, U as decodeRevisionContent, Vt as variableInputCompatible, X as webhookResponseTimeout, Xt as Select$1, Y as webhookResponseInputs, Yt as dequal, Z as webhookStatusCodePort, Zt as SelectChevron, _t as defaultDecisionQuestion, a as DialogFooter, at as httpHeaderSchema, b as nodeNameIssue, c as DialogTrigger, ct as httpRequestIssues, d as Field, en as SelectItem, et as defaultNodeRetry, f as FieldDescription, ft as isHttpHost, gn as ChevronDown, gt as decisionTask, h as FieldLabel, hn as Input, ht as decisionQuestionIssues, i as DialogDescription, l as Icon, lt as httpRequestTask, m as FieldGroup, mn as Label, n as DialogClose, nn as SelectTrigger, nt as retryConfigurationSchema, o as DialogHeader, ot as httpQuerySchema, p as FieldError, pt as decisionLimits, q as webhookHeadersPort, qt as skipDuplicatesConfigSchema, r as DialogContent, rn as SelectValue, rt as supportsNodeRetry, s as DialogTitle, t as Dialog, tn as SelectSeparator, tt as nodeRetryLimits, u as Spinner, vt as limitDecisionQuestions, wt as connectorProxyIssues, xt as connectorProxyHasBody, yt as connectorProxyBodyInput, zt as portsAssignable } from "./dialog-Bi-MVTGj.js";
|
|
7
|
+
import { C as isMac, S as toManifestNodeId, T as flowPngAspectRatios, _ as E$1, a as CanvasNodeIcon, b as toViewEdge, c as collapseAllNested, d as IconStack, f as selectableTimeZones, g as cronDescription, h as timeZoneOffset, i as pasteVideoLink, l as formatDuration, m as timeZoneLongLabel, n as setAddItemId, o as defaultTriggerIcon, p as timeZoneLabel, s as JSONViewer, t as FlowCanvas, u as useDebouncedValue, v as CanvasTooltip, w as isSameViewport, x as toManifestHandleName, y as CanvasStore } from "./FlowCanvas-SqPUBqze.js";
|
|
8
|
+
import { $ as resourceValue, $t as WorkflowExportDialog, A as schemaForEditor, An as TabsTrigger, Ar as serverAddress, B as datePickerValue, Bn as EmptyMedia, Br as ApiError, Cn as selectors, Cr as inputValue, D as defaultValueEditorSchema, Dn as Tabs, Dr as openApiTask, Dt as diagnosticMessage, E as supportsFeishuChatFilter, En as IconPickerButton, Er as openApiFieldIssues, F as calendarChange, Fn as InputGroupInput, Fr as workflowCandidateGroup, G as indexAddNodeOptions, Gn as SourceSelect, H as isDateFormat, Hn as Badge, Hr as eventSourceKind, I as calendarDate, In as Empty, Ir as workflowCapability, Jn as EventSourceSetup, Kn as createI18n, L as dateFromTimeZone, Ln as EmptyContent, Lr as workflowSelectionTask, M as getDefaultValue, Mn as followWorkbenchLink, Mr as sameWorkflowInterface, N as isUnconstrainedSchema, Nn as InputGroup, Nr as workflowAgentTool, O as editorComponent, On as TabsContent, Or as securityOptions, Ot as diagnosticNodeId, P as typeOfSchema, Pn as InputGroupAddon, Q as resourceData, R as dateInTimeZone, Rn as EmptyDescription, Sn as ComboboxRoot, Sr as triggerConfigValues, St as revisionView, T as feishuResourceKind, Tn as useComboboxRootContext, Tr as object$1, V as dateTimeWall, Vn as EmptyTitle, Vr as controlErrorCode, Wn as SourceForm, Y as connectorActionPresentation, Yn as errorNotice, Z as observeResource, Zt as dequal$1, _n as ComboboxList, _t as actionSummary, ar as webhookResponseDiagnostics, bn as ComboboxInputGroup, bt as canCancelRun, cn as selectionMenuItemClass, dn as valueEditor_module_default, dr as isJsonObject, dt as loadJson, en as WorkflowExportMenuItem, er as decodeResultList, fn as ComboboxItemIndicator, ft as designerGraph, gn as ComboboxPortal, gt as triggerNodeIcon, hn as ComboboxPositioner, ht as semanticNodeIcon, ir as resolutionOutputPorts, it as decodeAppCatalogResponse, j as valueForEditor, jr as servers, jt as connectionCatalog, k as editorGroups, kn as TabsList, kr as selectOperation, kt as schemaMismatchMessage, ln as ValueControl, mn as ComboboxPopup, mt as nodeTitle, n as agentTool, nn as IdTooltip, nr as executionReachableNodes, or as sourceOutputLabel, ot as getAppCatalogCache, pn as ComboboxItem, pt as nodeIcon, q as mapSource, qn as FeishuEventPicker, rn as FlowSettingsButton, rr as inputSourceCandidates, sn as selectionMenuContentClass, sr as sourcePort, tn as useWorkflowExportAction, tt as provider, un as ValueEditorFeedback, ur as triggerOutputDefinitions, vn as GroupCollectionProvider, vt as providerIcon, wn as useComboboxInputValueContext, wr as listOperations, xn as ComboboxInput, xr as triggerConfigValue, xt as hasRunFilter, yn as ComboboxTrigger, z as datePickerChange, zn as EmptyHeader } from "./flowChanges-azhepfr-.js";
|
|
9
|
+
import { r as resolveUiLanguage } from "./languages-gYzoQqCi.js";
|
|
9
10
|
import { a as renameObjectField, i as objectValue, n as isJsonValue, o as setObjectField, r as jsonDataTypes, s as valueType$1, t as initialValue } from "./value-BbFQZZ_V.js";
|
|
10
11
|
import { n as compile, r as validate } from "./flowRunInputEditorStore-ys1-w9GW.js";
|
|
11
|
-
import { t as WorkbenchSelect } from "./workbenchSelect-
|
|
12
|
+
import { t as WorkbenchSelect } from "./workbenchSelect-CHOeceKA.js";
|
|
12
13
|
import * as React from "react";
|
|
13
14
|
import reactExports, { Children, Fragment, Suspense, createContext, forwardRef, isValidElement, lazy, memo, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
14
15
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -231,7 +232,7 @@ function CanvasHistoryScope({ history, disabled, ...props }) {
|
|
|
231
232
|
}
|
|
232
233
|
//#endregion
|
|
233
234
|
//#region src/workbench/browser/runtime/editor/commentInspector.tsx
|
|
234
|
-
var MarkdownContent = lazy(() => import("./markdownContent-
|
|
235
|
+
var MarkdownContent = lazy(() => import("./markdownContent-D0BBrFcF.js"));
|
|
235
236
|
/** A comment is presentation data; editing it does not require the canvas store. */
|
|
236
237
|
function CommentInspector({ title, content, disabled = false, readOnly, dark, onSave }) {
|
|
237
238
|
const t = useTranslate();
|
|
@@ -519,14 +520,14 @@ function AccountControlButton({ disabled, status, label, hint, onClick }) {
|
|
|
519
520
|
})]
|
|
520
521
|
}) }), /* @__PURE__ */ jsx(TooltipContent, { children: hint ?? label })] });
|
|
521
522
|
}
|
|
522
|
-
function AccountSelect({ connections, disabled, loading = false, id, invalid, warning, addWhenEmpty, allowDeferred = false, label, selectedConnection, selectedId, onChange, onManage }) {
|
|
523
|
+
function AccountSelect({ connections, disabled, readOnly = false, loading = false, id, invalid, warning, addWhenEmpty, allowDeferred = false, label, selectedConnection, selectedId, onChange, onManage }) {
|
|
523
524
|
const t = useTranslate();
|
|
524
525
|
const [container, setContainer] = useState(null);
|
|
525
526
|
const selected = selectedConnection ?? connections.find((candidate) => candidate.connectionId == selectedId);
|
|
526
527
|
const showLoading = loading && selected == null && selectedId !== "";
|
|
527
528
|
const builtInName = t("inspector.account.oomolBuiltIn");
|
|
528
529
|
const displayName = (connection) => accountDisplayName(connection, connection.displayName, builtInName);
|
|
529
|
-
const selectedLabel = selectedId === "" ? t("inspector.account.deferred") : selected == null ? selectedId == null ? void 0 : `${selectedId} (${t("inspector.account.unavailable")})` : `${displayName(selected)}${selected.isDefault ? ` (${t("inspector.account.teamDefault")})` : ""}`;
|
|
530
|
+
const selectedLabel = selectedId === "" ? t("inspector.account.deferred") : selected == null ? selectedId == null ? void 0 : readOnly ? selectedId : `${selectedId} (${t("inspector.account.unavailable")})` : `${displayName(selected)}${selected.isDefault ? ` (${t("inspector.account.teamDefault")})` : ""}`;
|
|
530
531
|
const missingSelected = selectedId != null && selectedId !== "" && !connections.some((candidate) => candidate.connectionId == selectedId);
|
|
531
532
|
const empty = !loading && connections.length == 0;
|
|
532
533
|
const items = [
|
|
@@ -554,7 +555,7 @@ function AccountSelect({ connections, disabled, loading = false, id, invalid, wa
|
|
|
554
555
|
label: t("inspector.account.addAccount")
|
|
555
556
|
}]
|
|
556
557
|
];
|
|
557
|
-
if (!allowDeferred && !loading && addWhenEmpty && connections.length === 0 && selectedId == null) return /* @__PURE__ */ jsx(AccountControlButton, {
|
|
558
|
+
if (!readOnly && !allowDeferred && !loading && addWhenEmpty && connections.length === 0 && selectedId == null) return /* @__PURE__ */ jsx(AccountControlButton, {
|
|
558
559
|
disabled,
|
|
559
560
|
status: "warning",
|
|
560
561
|
onClick: onManage,
|
|
@@ -564,7 +565,7 @@ function AccountSelect({ connections, disabled, loading = false, id, invalid, wa
|
|
|
564
565
|
ref: setContainer,
|
|
565
566
|
className: "account-select relative min-w-0",
|
|
566
567
|
children: [/* @__PURE__ */ jsxs(Select$1, {
|
|
567
|
-
disabled: disabled || loading,
|
|
568
|
+
disabled: readOnly || disabled || loading,
|
|
568
569
|
items,
|
|
569
570
|
value: selectedId ?? null,
|
|
570
571
|
onValueChange: (value) => {
|
|
@@ -581,8 +582,8 @@ function AccountSelect({ connections, disabled, loading = false, id, invalid, wa
|
|
|
581
582
|
"data-status": invalid ? "danger" : warning ? "warning" : void 0,
|
|
582
583
|
className: `${fieldSelectTriggerClass} account-control`,
|
|
583
584
|
children: /* @__PURE__ */ jsx(SelectValue, {
|
|
584
|
-
className: !loading && selectedId != null ? "mr-5" : void 0,
|
|
585
|
-
placeholder: t("inspector.account.chooseAccount"),
|
|
585
|
+
className: !readOnly && !loading && selectedId != null ? "mr-5" : void 0,
|
|
586
|
+
placeholder: t(readOnly ? "connectorAccess.noAccountSelected" : "inspector.account.chooseAccount"),
|
|
586
587
|
children: showLoading ? /* @__PURE__ */ jsxs("span", {
|
|
587
588
|
role: "status",
|
|
588
589
|
className: "flex min-w-0 items-center gap-2 text-muted-foreground",
|
|
@@ -636,7 +637,7 @@ function AccountSelect({ connections, disabled, loading = false, id, invalid, wa
|
|
|
636
637
|
})] })
|
|
637
638
|
]
|
|
638
639
|
})]
|
|
639
|
-
}), !loading && selectedId != null && /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
|
|
640
|
+
}), !readOnly && !loading && selectedId != null && /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: /* @__PURE__ */ jsx(Button$1, {
|
|
640
641
|
className: "account-select-clear absolute top-1/2 right-7 -translate-y-1/2 text-muted-foreground",
|
|
641
642
|
type: "button",
|
|
642
643
|
variant: "ghost",
|
|
@@ -659,17 +660,18 @@ function AccountSelect({ connections, disabled, loading = false, id, invalid, wa
|
|
|
659
660
|
})] })]
|
|
660
661
|
});
|
|
661
662
|
}
|
|
662
|
-
function ConnectorAccount({ accessError, onConfigureAccess,
|
|
663
|
+
function ConnectorAccount({ accessError, onConfigureAccess, resource, actionError, actionId, activeConnections, authorizationPending, connection, connectionError, connectionId, connectors, disabled, fieldIdPrefix, loading, nodeId }) {
|
|
663
664
|
const t = useTranslate();
|
|
664
665
|
const available = activeConnections ?? [];
|
|
666
|
+
const authenticated = resource == null ? void 0 : "authenticated" in resource ? resource.authenticated : !resource.noSetup;
|
|
665
667
|
const accessIssue = accessError ?? (actionError?.code == "connector.access-required" || actionError?.code == "connector.access-invalid" ? actionError.message : void 0);
|
|
666
|
-
const pending = loading || accessIssue == null && actionError == null && (
|
|
667
|
-
const required = !pending && (accessIssue != null || connectionId !== "" &&
|
|
668
|
+
const pending = loading || accessIssue == null && actionError == null && (resource == null || activeConnections == null && connectionError == null);
|
|
669
|
+
const required = !pending && (accessIssue != null || connectionId !== "" && authenticated == true && (connectionId == null || activeConnections != null && connection?.status != "active"));
|
|
668
670
|
let onManage;
|
|
669
671
|
let content;
|
|
670
672
|
if (pending) content = /* @__PURE__ */ jsx("p", { children: t("inspector.account.loading") });
|
|
671
673
|
else if (accessIssue != null) content = /* @__PURE__ */ jsx("p", { children: accessIssue });
|
|
672
|
-
else if (actionError != null ||
|
|
674
|
+
else if (actionError != null || resource == null) {
|
|
673
675
|
const canRetry = actionError?.code != "authorization.denied" && actionError?.code != "connector.action-not-found";
|
|
674
676
|
content = /* @__PURE__ */ jsx(ConnectionAlert, {
|
|
675
677
|
disabled,
|
|
@@ -787,19 +789,26 @@ function TriggerConnection({ activeConnections, authorizationPending, connection
|
|
|
787
789
|
});
|
|
788
790
|
}
|
|
789
791
|
/** A persisted reference has no live account health or authorization state. */
|
|
790
|
-
function SavedConnectionReference({
|
|
792
|
+
function SavedConnectionReference({ noSetup, connectionId }) {
|
|
791
793
|
const t = useTranslate();
|
|
792
|
-
|
|
794
|
+
if (noSetup || connectionId?.startsWith("no_auth:")) return null;
|
|
795
|
+
return /* @__PURE__ */ jsx(InspectorStatusSection, {
|
|
793
796
|
title: t("inspector.account.title"),
|
|
794
797
|
section: "account",
|
|
795
|
-
children:
|
|
796
|
-
className: "
|
|
797
|
-
children:
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
798
|
+
children: /* @__PURE__ */ jsxs(Field, {
|
|
799
|
+
className: "connection-field",
|
|
800
|
+
children: [/* @__PURE__ */ jsx(FieldLabel, {
|
|
801
|
+
className: "sr-only",
|
|
802
|
+
children: t("inspector.account.connection")
|
|
803
|
+
}), /* @__PURE__ */ jsx(AccountSelect, {
|
|
804
|
+
readOnly: true,
|
|
805
|
+
connections: [],
|
|
806
|
+
selectedId: connectionId,
|
|
807
|
+
disabled: true,
|
|
808
|
+
onChange: () => {},
|
|
809
|
+
onManage: void 0
|
|
810
|
+
})]
|
|
811
|
+
})
|
|
803
812
|
});
|
|
804
813
|
}
|
|
805
814
|
//#endregion
|
|
@@ -1176,7 +1185,7 @@ function NodePickerContent({ options, connections, loadConnections, browseOption
|
|
|
1176
1185
|
onDragStart: (event) => drag(event, item),
|
|
1177
1186
|
onDragEnd,
|
|
1178
1187
|
className: `group/app h-auto justify-start whitespace-normal font-normal flex min-w-0 items-start gap-2.5 rounded-[calc(var(--ui-control-radius)+2px)] px-2.5 py-1.5 text-left outline-none hover:bg-accent focus-visible:bg-accent focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 ${compact ? "" : "[&>span:first-child]:translate-y-[2px]"}`,
|
|
1179
|
-
children: [item.kind == "connector" || item.kind == "trigger" && "trigger" in item && (item.trigger.kind == "catalog" || item.trigger.kind == "connect") ? /* @__PURE__ */ jsx(ProviderAppIcon, { src: item.icon }) : /* @__PURE__ */ jsx("span", {
|
|
1188
|
+
children: [item.kind == "connector" || item.kind === "connector-proxy" || item.kind == "trigger" && "trigger" in item && (item.trigger.kind == "catalog" || item.trigger.kind == "connect") ? /* @__PURE__ */ jsx(ProviderAppIcon, { src: item.icon }) : /* @__PURE__ */ jsx("span", {
|
|
1180
1189
|
className: "flex size-7 shrink-0 items-center justify-center rounded-[var(--ui-control-radius)] bg-muted",
|
|
1181
1190
|
children: /* @__PURE__ */ jsx(ContentIcon, {
|
|
1182
1191
|
src: item.icon,
|
|
@@ -1373,6 +1382,7 @@ function NodePickerContent({ options, connections, loadConnections, browseOption
|
|
|
1373
1382
|
children: [app != null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1374
1383
|
section(t("addNode.triggers"), visibleTriggers),
|
|
1375
1384
|
actionSections(visibleActions),
|
|
1385
|
+
section(t("nodePicker.custom"), visibleActions.filter((item) => item.kind === "connector-proxy")),
|
|
1376
1386
|
!choicesLoading && !choicesFailed && !catalogFailed && visibleActions.length == 0 && visibleTriggers.length == 0 && /* @__PURE__ */ jsx(PickerStatus, {})
|
|
1377
1387
|
] }) : searching ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1378
1388
|
matchedApps.length > 0 && /* @__PURE__ */ jsxs("section", {
|
|
@@ -1537,6 +1547,7 @@ function fallbackIcon$1(item) {
|
|
|
1537
1547
|
case "http-request":
|
|
1538
1548
|
case "openapi":
|
|
1539
1549
|
case "connector":
|
|
1550
|
+
case "connector-proxy":
|
|
1540
1551
|
case "connector-group": return "connection";
|
|
1541
1552
|
case "llm": return "llm";
|
|
1542
1553
|
case "approval": return "task";
|
|
@@ -3913,6 +3924,174 @@ function FlowStateButton({ client, flowId, nodes, history, notify, onClose }) {
|
|
|
3913
3924
|
})
|
|
3914
3925
|
});
|
|
3915
3926
|
}
|
|
3927
|
+
var fieldTable_module_default = {
|
|
3928
|
+
list: "fieldTable_list_14bfd",
|
|
3929
|
+
columns: "fieldTable_columns_14bfd",
|
|
3930
|
+
nameHeading: "fieldTable_nameHeading_14bfd",
|
|
3931
|
+
typeHeading: "fieldTable_typeHeading_14bfd",
|
|
3932
|
+
valueHeading: "fieldTable_valueHeading_14bfd",
|
|
3933
|
+
row: "fieldTable_row_14bfd",
|
|
3934
|
+
nullableControl: "fieldTable_nullableControl_14bfd",
|
|
3935
|
+
nullableHeading: "fieldTable_nullableHeading_14bfd"
|
|
3936
|
+
};
|
|
3937
|
+
var fieldBranch_module_default = { branch: "fieldBranch_branch_a5820" };
|
|
3938
|
+
//#endregion
|
|
3939
|
+
//#region src/form/browser/fieldLayout.tsx
|
|
3940
|
+
var Geometry = createContext({
|
|
3941
|
+
depth: 0,
|
|
3942
|
+
layout: "values"
|
|
3943
|
+
});
|
|
3944
|
+
function FieldLayout({ children, depth = 0, layout = "values", columns, gap }) {
|
|
3945
|
+
return /* @__PURE__ */ jsx(Geometry.Provider, {
|
|
3946
|
+
value: {
|
|
3947
|
+
depth,
|
|
3948
|
+
layout,
|
|
3949
|
+
columns,
|
|
3950
|
+
gap
|
|
3951
|
+
},
|
|
3952
|
+
children
|
|
3953
|
+
});
|
|
3954
|
+
}
|
|
3955
|
+
var FieldRow = forwardRef(({ columns, gap, header, valueOnly, leadingControl, disclosureContent, trailingControl, actions, layout, depth, typeWidth, disclosure, label, sorting, disclosureInvalid, stacking = "editor", children, style, className, ...props }, ref) => {
|
|
3956
|
+
const geometry = useContext(Geometry);
|
|
3957
|
+
const level = depth ?? geometry.depth;
|
|
3958
|
+
const hasHeader = header != null || valueOnly === true;
|
|
3959
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
3960
|
+
...props,
|
|
3961
|
+
ref,
|
|
3962
|
+
className: [valueEditor_module_default.root, className].filter(Boolean).join(" "),
|
|
3963
|
+
"data-stacking": stacking,
|
|
3964
|
+
"data-layout": layout ?? geometry.layout,
|
|
3965
|
+
"data-header": hasHeader || void 0,
|
|
3966
|
+
"data-value-only": valueOnly || void 0,
|
|
3967
|
+
"data-nested-field": level > 0 || void 0,
|
|
3968
|
+
style: {
|
|
3969
|
+
"gridTemplateColumns": columns ?? geometry.columns,
|
|
3970
|
+
"columnGap": gap ?? geometry.gap,
|
|
3971
|
+
"--field-indent": `${level * 16}px`,
|
|
3972
|
+
...typeWidth === "fixed" ? { "--field-type-width": "32px" } : typeWidth === "editable" ? { "--field-type-width": "56px" } : {},
|
|
3973
|
+
...style
|
|
3974
|
+
},
|
|
3975
|
+
children: [
|
|
3976
|
+
hasHeader && /* @__PURE__ */ jsxs("div", {
|
|
3977
|
+
className: valueEditor_module_default.header,
|
|
3978
|
+
children: [
|
|
3979
|
+
leadingControl != null && /* @__PURE__ */ jsx("div", {
|
|
3980
|
+
className: valueEditor_module_default.leadingControl,
|
|
3981
|
+
children: leadingControl
|
|
3982
|
+
}),
|
|
3983
|
+
/* @__PURE__ */ jsxs("div", {
|
|
3984
|
+
className: valueEditor_module_default.toggleControl,
|
|
3985
|
+
children: [disclosure && (!sorting || leadingControl == null) && /* @__PURE__ */ jsx(Button$1, {
|
|
3986
|
+
type: "button",
|
|
3987
|
+
size: "icon-xs",
|
|
3988
|
+
className: "w-[var(--field-toggle-width,24px)]",
|
|
3989
|
+
variant: "disclosure",
|
|
3990
|
+
"aria-label": label,
|
|
3991
|
+
"aria-expanded": disclosure.expanded,
|
|
3992
|
+
"aria-invalid": disclosureInvalid || void 0,
|
|
3993
|
+
"aria-controls": disclosure.controls,
|
|
3994
|
+
onClick: disclosure.onToggle,
|
|
3995
|
+
children: disclosureContent ?? /* @__PURE__ */ jsx("i", {
|
|
3996
|
+
"aria-hidden": "true",
|
|
3997
|
+
className: disclosure.expanded ? "i-lucide-light:chevron-down" : "i-lucide-light:chevron-right"
|
|
3998
|
+
})
|
|
3999
|
+
}), !disclosure && leadingControl == null && disclosureContent]
|
|
4000
|
+
}),
|
|
4001
|
+
!valueOnly && (typeof header === "function" ? header(disclosure) : header)
|
|
4002
|
+
]
|
|
4003
|
+
}),
|
|
4004
|
+
children,
|
|
4005
|
+
trailingControl,
|
|
4006
|
+
actions != null && /* @__PURE__ */ jsx("div", {
|
|
4007
|
+
className: valueEditor_module_default.options,
|
|
4008
|
+
children: actions
|
|
4009
|
+
})
|
|
4010
|
+
]
|
|
4011
|
+
});
|
|
4012
|
+
});
|
|
4013
|
+
/** Expanded values stay in their cell; structural branches establish a child geometry and connector. */
|
|
4014
|
+
function FieldBody({ placement, endpoint = "control", depth, className, children, ...props }) {
|
|
4015
|
+
const geometry = useContext(Geometry);
|
|
4016
|
+
return /* @__PURE__ */ jsx("div", {
|
|
4017
|
+
...props,
|
|
4018
|
+
className: [className, placement === "branch" && fieldBranch_module_default.branch].filter(Boolean).join(" "),
|
|
4019
|
+
"data-field-branch": placement === "branch" || void 0,
|
|
4020
|
+
"data-branch-endpoint": placement === "branch" ? endpoint : void 0,
|
|
4021
|
+
children: /* @__PURE__ */ jsx(FieldLayout, {
|
|
4022
|
+
...geometry,
|
|
4023
|
+
depth: depth ?? geometry.depth + (placement === "branch" ? 1 : 0),
|
|
4024
|
+
children
|
|
4025
|
+
})
|
|
4026
|
+
});
|
|
4027
|
+
}
|
|
4028
|
+
//#endregion
|
|
4029
|
+
//#region src/form/browser/fieldTable.tsx
|
|
4030
|
+
/** Shared field geometry. Callers own definitions, values, actions and persistence. */
|
|
4031
|
+
var FieldTable = forwardRef(({ layout = "definition", fixedTypes, typeColumn = true, columnHeadings = true, output, nullable, empty, actionSlots = 1, standalone, className, children, ...props }, ref) => {
|
|
4032
|
+
const t = useTranslate();
|
|
4033
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
4034
|
+
...props,
|
|
4035
|
+
ref,
|
|
4036
|
+
className: [fieldTable_module_default.list, className].filter(Boolean).join(" "),
|
|
4037
|
+
"data-value-editor-scope": true,
|
|
4038
|
+
"data-layout": layout,
|
|
4039
|
+
"data-type-column": typeColumn || void 0,
|
|
4040
|
+
"data-output": output || void 0,
|
|
4041
|
+
"data-fixed-types": fixedTypes || void 0,
|
|
4042
|
+
"data-nullable": nullable || void 0,
|
|
4043
|
+
"data-empty": empty || void 0,
|
|
4044
|
+
"data-action-slots": actionSlots,
|
|
4045
|
+
"data-standalone": standalone || void 0,
|
|
4046
|
+
children: [columnHeadings && !empty && /* @__PURE__ */ jsxs("div", {
|
|
4047
|
+
className: fieldTable_module_default.columns,
|
|
4048
|
+
"data-layout": layout,
|
|
4049
|
+
"data-output": output || void 0,
|
|
4050
|
+
children: [
|
|
4051
|
+
/* @__PURE__ */ jsx("span", {
|
|
4052
|
+
className: fieldTable_module_default.nameHeading,
|
|
4053
|
+
children: t("valueEditor.columnName")
|
|
4054
|
+
}),
|
|
4055
|
+
typeColumn && /* @__PURE__ */ jsx("span", {
|
|
4056
|
+
className: fieldTable_module_default.typeHeading,
|
|
4057
|
+
children: t("valueEditor.columnType")
|
|
4058
|
+
}),
|
|
4059
|
+
!output && /* @__PURE__ */ jsx("span", {
|
|
4060
|
+
className: fieldTable_module_default.valueHeading,
|
|
4061
|
+
children: t("valueEditor.columnValue")
|
|
4062
|
+
}),
|
|
4063
|
+
nullable && /* @__PURE__ */ jsx("span", {
|
|
4064
|
+
className: fieldTable_module_default.nullableHeading,
|
|
4065
|
+
children: t("valueEditor.nullable")
|
|
4066
|
+
})
|
|
4067
|
+
]
|
|
4068
|
+
}), /* @__PURE__ */ jsx(FieldLayout, {
|
|
4069
|
+
layout,
|
|
4070
|
+
children
|
|
4071
|
+
})]
|
|
4072
|
+
});
|
|
4073
|
+
});
|
|
4074
|
+
function FieldTableRow({ className, ...props }) {
|
|
4075
|
+
return /* @__PURE__ */ jsx("div", {
|
|
4076
|
+
...props,
|
|
4077
|
+
className: [fieldTable_module_default.row, className].filter(Boolean).join(" ")
|
|
4078
|
+
});
|
|
4079
|
+
}
|
|
4080
|
+
function FieldNullable({ name, checked, onChange }) {
|
|
4081
|
+
const t = useTranslate();
|
|
4082
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
4083
|
+
render: /* @__PURE__ */ jsx("span", { className: fieldTable_module_default.nullableControl }),
|
|
4084
|
+
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
4085
|
+
className: "not-data-disabled:cursor-pointer",
|
|
4086
|
+
"aria-label": `${name} ${t("valueEditor.nullable")}`,
|
|
4087
|
+
"aria-checked": checked,
|
|
4088
|
+
checked,
|
|
4089
|
+
indeterminate: !onChange && !checked,
|
|
4090
|
+
disabled: !onChange,
|
|
4091
|
+
onCheckedChange: (next) => onChange?.(next === true)
|
|
4092
|
+
})
|
|
4093
|
+
}), /* @__PURE__ */ jsx(TooltipContent, { children: t(checked ? "valueEditor.nullableDescription" : "valueEditor.notNullableDescription") })] });
|
|
4094
|
+
}
|
|
3916
4095
|
//#endregion
|
|
3917
4096
|
//#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js
|
|
3918
4097
|
var SwitchRootContext = /*#__PURE__*/ React.createContext(void 0);
|
|
@@ -6334,6 +6513,7 @@ function childFields(props) {
|
|
|
6334
6513
|
hideValueTools: props.hideValueTools,
|
|
6335
6514
|
expansionPolicy: props.expansionPolicy,
|
|
6336
6515
|
schema: childSchema,
|
|
6516
|
+
nullable: isUnconstrainedSchema(childSchema),
|
|
6337
6517
|
value: childValue,
|
|
6338
6518
|
onChange: change,
|
|
6339
6519
|
valueEditable,
|
|
@@ -6815,97 +6995,6 @@ function EditableChoices({ options, labels, value, label, disabled, invalid, mul
|
|
|
6815
6995
|
})
|
|
6816
6996
|
});
|
|
6817
6997
|
}
|
|
6818
|
-
var fieldBranch_module_default = { branch: "fieldBranch_branch_a5820" };
|
|
6819
|
-
//#endregion
|
|
6820
|
-
//#region src/form/browser/fieldLayout.tsx
|
|
6821
|
-
var Geometry = createContext({
|
|
6822
|
-
depth: 0,
|
|
6823
|
-
layout: "values"
|
|
6824
|
-
});
|
|
6825
|
-
function FieldLayout({ children, depth = 0, layout = "values", columns, gap }) {
|
|
6826
|
-
return /* @__PURE__ */ jsx(Geometry.Provider, {
|
|
6827
|
-
value: {
|
|
6828
|
-
depth,
|
|
6829
|
-
layout,
|
|
6830
|
-
columns,
|
|
6831
|
-
gap
|
|
6832
|
-
},
|
|
6833
|
-
children
|
|
6834
|
-
});
|
|
6835
|
-
}
|
|
6836
|
-
var FieldRow = forwardRef(({ columns, gap, header, valueOnly, leadingControl, disclosureContent, trailingControl, actions, layout, depth, typeWidth, disclosure, label, sorting, disclosureInvalid, stacking = "editor", children, style, className, ...props }, ref) => {
|
|
6837
|
-
const geometry = useContext(Geometry);
|
|
6838
|
-
const level = depth ?? geometry.depth;
|
|
6839
|
-
const hasHeader = header != null || valueOnly === true;
|
|
6840
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
6841
|
-
...props,
|
|
6842
|
-
ref,
|
|
6843
|
-
className: [valueEditor_module_default.root, className].filter(Boolean).join(" "),
|
|
6844
|
-
"data-stacking": stacking,
|
|
6845
|
-
"data-layout": layout ?? geometry.layout,
|
|
6846
|
-
"data-header": hasHeader || void 0,
|
|
6847
|
-
"data-value-only": valueOnly || void 0,
|
|
6848
|
-
"data-nested-field": level > 0 || void 0,
|
|
6849
|
-
style: {
|
|
6850
|
-
"gridTemplateColumns": columns ?? geometry.columns,
|
|
6851
|
-
"columnGap": gap ?? geometry.gap,
|
|
6852
|
-
"--field-indent": `${level * 16}px`,
|
|
6853
|
-
...typeWidth === "fixed" ? { "--field-type-width": "32px" } : typeWidth === "editable" ? { "--field-type-width": "56px" } : {},
|
|
6854
|
-
...style
|
|
6855
|
-
},
|
|
6856
|
-
children: [
|
|
6857
|
-
hasHeader && /* @__PURE__ */ jsxs("div", {
|
|
6858
|
-
className: valueEditor_module_default.header,
|
|
6859
|
-
children: [
|
|
6860
|
-
leadingControl != null && /* @__PURE__ */ jsx("div", {
|
|
6861
|
-
className: valueEditor_module_default.leadingControl,
|
|
6862
|
-
children: leadingControl
|
|
6863
|
-
}),
|
|
6864
|
-
/* @__PURE__ */ jsxs("div", {
|
|
6865
|
-
className: valueEditor_module_default.toggleControl,
|
|
6866
|
-
children: [disclosure && (!sorting || leadingControl == null) && /* @__PURE__ */ jsx(Button$1, {
|
|
6867
|
-
type: "button",
|
|
6868
|
-
size: "icon-xs",
|
|
6869
|
-
className: "w-[var(--field-toggle-width,24px)]",
|
|
6870
|
-
variant: "disclosure",
|
|
6871
|
-
"aria-label": label,
|
|
6872
|
-
"aria-expanded": disclosure.expanded,
|
|
6873
|
-
"aria-invalid": disclosureInvalid || void 0,
|
|
6874
|
-
"aria-controls": disclosure.controls,
|
|
6875
|
-
onClick: disclosure.onToggle,
|
|
6876
|
-
children: disclosureContent ?? /* @__PURE__ */ jsx("i", {
|
|
6877
|
-
"aria-hidden": "true",
|
|
6878
|
-
className: disclosure.expanded ? "i-lucide-light:chevron-down" : "i-lucide-light:chevron-right"
|
|
6879
|
-
})
|
|
6880
|
-
}), !disclosure && leadingControl == null && disclosureContent]
|
|
6881
|
-
}),
|
|
6882
|
-
!valueOnly && (typeof header === "function" ? header(disclosure) : header)
|
|
6883
|
-
]
|
|
6884
|
-
}),
|
|
6885
|
-
children,
|
|
6886
|
-
trailingControl,
|
|
6887
|
-
actions != null && /* @__PURE__ */ jsx("div", {
|
|
6888
|
-
className: valueEditor_module_default.options,
|
|
6889
|
-
children: actions
|
|
6890
|
-
})
|
|
6891
|
-
]
|
|
6892
|
-
});
|
|
6893
|
-
});
|
|
6894
|
-
/** Expanded values stay in their cell; structural branches establish a child geometry and connector. */
|
|
6895
|
-
function FieldBody({ placement, endpoint = "control", depth, className, children, ...props }) {
|
|
6896
|
-
const geometry = useContext(Geometry);
|
|
6897
|
-
return /* @__PURE__ */ jsx("div", {
|
|
6898
|
-
...props,
|
|
6899
|
-
className: [className, placement === "branch" && fieldBranch_module_default.branch].filter(Boolean).join(" "),
|
|
6900
|
-
"data-field-branch": placement === "branch" || void 0,
|
|
6901
|
-
"data-branch-endpoint": placement === "branch" ? endpoint : void 0,
|
|
6902
|
-
children: /* @__PURE__ */ jsx(FieldLayout, {
|
|
6903
|
-
...geometry,
|
|
6904
|
-
depth: depth ?? geometry.depth + (placement === "branch" ? 1 : 0),
|
|
6905
|
-
children
|
|
6906
|
-
})
|
|
6907
|
-
});
|
|
6908
|
-
}
|
|
6909
6998
|
//#endregion
|
|
6910
6999
|
//#region src/form/browser/fieldTypeAddon.tsx
|
|
6911
7000
|
/** A compact definition control attached to a value, shared by Case and array items. */
|
|
@@ -19250,7 +19339,10 @@ function FieldValueEditor(suppliedProps) {
|
|
|
19250
19339
|
const definitionEditable = props.onDefinitionChange != null && !disabled;
|
|
19251
19340
|
const showDataType = editorComponent(schema) === "json" && !definitionEditable && valueEditable && props.valueSuffix == null && props.editor == null;
|
|
19252
19341
|
const [selectedEditorSchema, setSelectedEditorSchema] = useState();
|
|
19253
|
-
const editorSchema = showDataType ? selectedEditorSchema ?? defaultValueEditorSchema(schema
|
|
19342
|
+
const editorSchema = showDataType ? selectedEditorSchema ?? defaultValueEditorSchema(schema, props.defaultEditor == null ? void 0 : {
|
|
19343
|
+
component: props.defaultEditor,
|
|
19344
|
+
value
|
|
19345
|
+
}) : schema;
|
|
19254
19346
|
const editorProps = {
|
|
19255
19347
|
...props,
|
|
19256
19348
|
schema: editorSchema
|
|
@@ -19380,7 +19472,8 @@ function FieldValueEditor(suppliedProps) {
|
|
|
19380
19472
|
const inlineTools = !props.hideValueTools && (props.layout === "values" || props.layout === "ports") && valueEditable && !disabled && !sorting;
|
|
19381
19473
|
const nullControl = (state.display === "null" || presence === "null") && props.editor === void 0 && !choiceOptions && !enumeration;
|
|
19382
19474
|
const canReset = inlineTools && props.onReset != null && (showUnset || !!nullable && nullControl);
|
|
19383
|
-
const
|
|
19475
|
+
const clearable = state.canClear || props.unset != null && presence === "null";
|
|
19476
|
+
const canClear = inlineTools && clearable;
|
|
19384
19477
|
const canToggleJson = inlineTools && expanded && shape.collection && presence === "value";
|
|
19385
19478
|
const arrayDefinition = !showDataType && hasHeader && source.type === "array" && !Array.isArray(source.items) && !choiceOptions;
|
|
19386
19479
|
const changeValueEditor = (nextSchema) => {
|
|
@@ -19496,7 +19589,7 @@ function FieldValueEditor(suppliedProps) {
|
|
|
19496
19589
|
className: "i-lucide-light:circle-slash"
|
|
19497
19590
|
}), "null"]
|
|
19498
19591
|
}),
|
|
19499
|
-
|
|
19592
|
+
clearable && /* @__PURE__ */ jsxs(Button$1, {
|
|
19500
19593
|
type: "button",
|
|
19501
19594
|
size: "xs",
|
|
19502
19595
|
variant: "ghost",
|
|
@@ -20030,16 +20123,29 @@ function AgentTools(props) {
|
|
|
20030
20123
|
...props.editor
|
|
20031
20124
|
});
|
|
20032
20125
|
if (props.config.tools.length === 0) return null;
|
|
20126
|
+
const summary = actionSummary(props.config.tools, {}, Object.values(props.providers ?? {}));
|
|
20033
20127
|
return /* @__PURE__ */ jsx(ActionSelectionDialog, {
|
|
20034
20128
|
readOnly: true,
|
|
20035
20129
|
title: t("agent.tools"),
|
|
20130
|
+
triggerHint: summary.workflows > 0 ? t("toolPicker.summary", {
|
|
20131
|
+
tools: summary.count,
|
|
20132
|
+
workflows: summary.workflows
|
|
20133
|
+
}) : t("actionPicker.selectionSummary", {
|
|
20134
|
+
actions: summary.count,
|
|
20135
|
+
providers: summary.providers.length
|
|
20136
|
+
}),
|
|
20036
20137
|
entries: props.config.tools,
|
|
20037
20138
|
providers: props.providers,
|
|
20038
20139
|
trigger: /* @__PURE__ */ jsx(Button$1, {
|
|
20039
20140
|
type: "button",
|
|
20040
20141
|
variant: "ghost",
|
|
20041
20142
|
size: "sm",
|
|
20042
|
-
|
|
20143
|
+
className: "gap-1.5 font-normal text-muted-foreground",
|
|
20144
|
+
children: /* @__PURE__ */ jsx(IconStack, {
|
|
20145
|
+
icons: summary.providers,
|
|
20146
|
+
count: summary.count,
|
|
20147
|
+
size: "sm"
|
|
20148
|
+
})
|
|
20043
20149
|
}),
|
|
20044
20150
|
settings: {
|
|
20045
20151
|
title: t("agent.toolSettings"),
|
|
@@ -20271,7 +20377,7 @@ function EditableAgentSettingsProvider({ children, task, nodeId, store, connecto
|
|
|
20271
20377
|
return false;
|
|
20272
20378
|
}
|
|
20273
20379
|
const decoded = decodeRevisionContent({
|
|
20274
|
-
modelVersion:
|
|
20380
|
+
modelVersion: 14,
|
|
20275
20381
|
modules: {},
|
|
20276
20382
|
document: {
|
|
20277
20383
|
bindings: {},
|
|
@@ -20804,7 +20910,10 @@ function CodeEditor({ ariaDescribedBy, ariaLabel, diagnostics, disabled, errorLa
|
|
|
20804
20910
|
}
|
|
20805
20911
|
//#endregion
|
|
20806
20912
|
//#region src/workbench/browser/runtime/editor/codeHttpHosts.tsx
|
|
20807
|
-
function CodeHttpHosts(
|
|
20913
|
+
function CodeHttpHosts(props) {
|
|
20914
|
+
const { hosts } = props;
|
|
20915
|
+
const editor = props.readOnly ? void 0 : props;
|
|
20916
|
+
const disabled = editor?.disabled ?? false;
|
|
20808
20917
|
const t = useTranslate();
|
|
20809
20918
|
const id = useId();
|
|
20810
20919
|
const saved = hosts.join("\n");
|
|
@@ -20818,6 +20927,7 @@ function CodeHttpHosts({ disabled, hosts, onSave }) {
|
|
|
20818
20927
|
setContainer(element?.closest(".open-flow-workbench") ?? element?.closest(".open-flow-theme") ?? null);
|
|
20819
20928
|
}, []);
|
|
20820
20929
|
const commit = async () => {
|
|
20930
|
+
if (editor == null) return;
|
|
20821
20931
|
if (openedHosts !== saved) {
|
|
20822
20932
|
setOpenedHosts(saved);
|
|
20823
20933
|
setDraft(saved);
|
|
@@ -20831,7 +20941,7 @@ function CodeHttpHosts({ disabled, hosts, onSave }) {
|
|
|
20831
20941
|
setError(void 0);
|
|
20832
20942
|
setPending(true);
|
|
20833
20943
|
try {
|
|
20834
|
-
if (dequal$1(next, hosts) || await onSave(next)) setOpen(false);
|
|
20944
|
+
if (dequal$1(next, hosts) || await editor.onSave(next)) setOpen(false);
|
|
20835
20945
|
} finally {
|
|
20836
20946
|
setPending(false);
|
|
20837
20947
|
}
|
|
@@ -20875,25 +20985,26 @@ function CodeHttpHosts({ disabled, hosts, onSave }) {
|
|
|
20875
20985
|
/* @__PURE__ */ jsx(ValueEditorFeedback, {
|
|
20876
20986
|
error,
|
|
20877
20987
|
children: (errorId) => /* @__PURE__ */ jsx(Textarea, {
|
|
20878
|
-
"aria-describedby": [`${id}-hint`, errorId].filter(Boolean).join(" "),
|
|
20988
|
+
"aria-describedby": [editor == null ? void 0 : `${id}-hint`, errorId].filter(Boolean).join(" ") || void 0,
|
|
20879
20989
|
"aria-invalid": error != null || void 0,
|
|
20880
20990
|
className: "min-h-14 font-mono text-xs",
|
|
20881
20991
|
disabled: disabled || pending,
|
|
20882
20992
|
id: `${id}-hosts`,
|
|
20883
|
-
onChange: (event) => setDraft(event.target.value),
|
|
20993
|
+
onChange: editor == null ? void 0 : (event) => setDraft(event.target.value),
|
|
20884
20994
|
placeholder: "api.example.com",
|
|
20995
|
+
readOnly: props.readOnly,
|
|
20885
20996
|
rows: 2,
|
|
20886
20997
|
spellCheck: false,
|
|
20887
|
-
value: draft
|
|
20998
|
+
value: editor == null ? saved : draft
|
|
20888
20999
|
})
|
|
20889
21000
|
}),
|
|
20890
|
-
/* @__PURE__ */ jsx(FieldDescription, {
|
|
21001
|
+
editor != null && /* @__PURE__ */ jsx(FieldDescription, {
|
|
20891
21002
|
id: `${id}-hint`,
|
|
20892
21003
|
children: t("inspector.task.httpHostsHint")
|
|
20893
21004
|
})
|
|
20894
21005
|
]
|
|
20895
21006
|
}),
|
|
20896
|
-
/* @__PURE__ */ jsxs(DialogFooter, { children: [/* @__PURE__ */ jsx(Button$1, {
|
|
21007
|
+
editor != null && /* @__PURE__ */ jsxs(DialogFooter, { children: [/* @__PURE__ */ jsx(Button$1, {
|
|
20897
21008
|
type: "button",
|
|
20898
21009
|
variant: "outline",
|
|
20899
21010
|
disabled: pending,
|
|
@@ -21354,16 +21465,49 @@ function CodeTaskSection(props) {
|
|
|
21354
21465
|
const { selection, theme } = props;
|
|
21355
21466
|
const task = selection.definition;
|
|
21356
21467
|
if (task == null || !("moduleId" in task) || selection.module == null) return null;
|
|
21357
|
-
|
|
21358
|
-
|
|
21359
|
-
|
|
21360
|
-
|
|
21361
|
-
|
|
21362
|
-
|
|
21363
|
-
|
|
21364
|
-
|
|
21365
|
-
|
|
21366
|
-
|
|
21468
|
+
const permission = task.capabilities?.find((capability) => "mode" in capability);
|
|
21469
|
+
const tools = [...permission?.mode == "independent" ? permission.actions : [], ...(task.capabilities ?? []).filter((item) => item.kind == "workflow")];
|
|
21470
|
+
const summary = actionSummary(tools, {}, Object.values(props.providers ?? {}));
|
|
21471
|
+
const httpHosts = task.capabilities?.find((capability) => capability.kind == "http")?.hosts ?? [];
|
|
21472
|
+
return /* @__PURE__ */ jsx(CodeTaskFrame, {
|
|
21473
|
+
actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [httpHosts.length > 0 && /* @__PURE__ */ jsx(CodeHttpHosts, {
|
|
21474
|
+
readOnly: true,
|
|
21475
|
+
hosts: httpHosts
|
|
21476
|
+
}), tools.length > 0 && /* @__PURE__ */ jsx(ActionSelectionDialog, {
|
|
21477
|
+
readOnly: true,
|
|
21478
|
+
title: t("actionPicker.configureActions"),
|
|
21479
|
+
triggerHint: summary.workflows > 0 ? t("toolPicker.summary", {
|
|
21480
|
+
tools: summary.count,
|
|
21481
|
+
workflows: summary.workflows
|
|
21482
|
+
}) : t("actionPicker.selectionSummary", {
|
|
21483
|
+
actions: summary.count,
|
|
21484
|
+
providers: summary.providers.length
|
|
21485
|
+
}),
|
|
21486
|
+
trigger: /* @__PURE__ */ jsx(Button$1, {
|
|
21487
|
+
type: "button",
|
|
21488
|
+
variant: "ghost",
|
|
21489
|
+
size: "sm",
|
|
21490
|
+
className: "gap-1.5 font-normal text-muted-foreground",
|
|
21491
|
+
children: /* @__PURE__ */ jsx(IconStack, {
|
|
21492
|
+
icons: summary.providers,
|
|
21493
|
+
count: summary.count,
|
|
21494
|
+
size: "sm"
|
|
21495
|
+
})
|
|
21496
|
+
}),
|
|
21497
|
+
entries: tools,
|
|
21498
|
+
providers: props.providers
|
|
21499
|
+
})] }),
|
|
21500
|
+
children: /* @__PURE__ */ jsx(CodeEditor, {
|
|
21501
|
+
ariaLabel: t("inspector.task.source"),
|
|
21502
|
+
disabled: true,
|
|
21503
|
+
theme,
|
|
21504
|
+
typing: codeTyping(task, task.capabilities),
|
|
21505
|
+
uri: `publication:modules/${task.moduleId}.js`,
|
|
21506
|
+
value: selection.module.source,
|
|
21507
|
+
loadingLabel: t("inspector.task.editorLoading"),
|
|
21508
|
+
errorLabel: t("inspector.task.editorUnavailable")
|
|
21509
|
+
})
|
|
21510
|
+
});
|
|
21367
21511
|
}
|
|
21368
21512
|
//#endregion
|
|
21369
21513
|
//#region src/workbench/browser/runtime/editor/fieldPanelAnchor.ts
|
|
@@ -22583,7 +22727,7 @@ function SourceValueEditor({ fixed = false, sourceOnly = false, editor: customEd
|
|
|
22583
22727
|
setSourceOpen(true);
|
|
22584
22728
|
if (variables.enabled) variables.onOpen?.();
|
|
22585
22729
|
}
|
|
22586
|
-
} :
|
|
22730
|
+
} : presentation?.unset,
|
|
22587
22731
|
label: fieldLabel,
|
|
22588
22732
|
path: `/${fieldLabel.replaceAll("~", "~0").replaceAll("/", "~1")}`,
|
|
22589
22733
|
disabled,
|
|
@@ -23179,83 +23323,6 @@ function presentConnectorInputs(inputs, t) {
|
|
|
23179
23323
|
...optional
|
|
23180
23324
|
];
|
|
23181
23325
|
}
|
|
23182
|
-
var fieldTable_module_default = {
|
|
23183
|
-
list: "fieldTable_list_14bfd",
|
|
23184
|
-
columns: "fieldTable_columns_14bfd",
|
|
23185
|
-
nameHeading: "fieldTable_nameHeading_14bfd",
|
|
23186
|
-
typeHeading: "fieldTable_typeHeading_14bfd",
|
|
23187
|
-
valueHeading: "fieldTable_valueHeading_14bfd",
|
|
23188
|
-
row: "fieldTable_row_14bfd",
|
|
23189
|
-
nullableControl: "fieldTable_nullableControl_14bfd",
|
|
23190
|
-
nullableHeading: "fieldTable_nullableHeading_14bfd"
|
|
23191
|
-
};
|
|
23192
|
-
//#endregion
|
|
23193
|
-
//#region src/form/browser/fieldTable.tsx
|
|
23194
|
-
/** Shared field geometry. Callers own definitions, values, actions and persistence. */
|
|
23195
|
-
var FieldTable = forwardRef(({ layout = "definition", fixedTypes, typeColumn = true, columnHeadings = true, output, nullable, empty, actionSlots = 1, standalone, className, children, ...props }, ref) => {
|
|
23196
|
-
const t = useTranslate();
|
|
23197
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
23198
|
-
...props,
|
|
23199
|
-
ref,
|
|
23200
|
-
className: [fieldTable_module_default.list, className].filter(Boolean).join(" "),
|
|
23201
|
-
"data-value-editor-scope": true,
|
|
23202
|
-
"data-layout": layout,
|
|
23203
|
-
"data-type-column": typeColumn || void 0,
|
|
23204
|
-
"data-output": output || void 0,
|
|
23205
|
-
"data-fixed-types": fixedTypes || void 0,
|
|
23206
|
-
"data-nullable": nullable || void 0,
|
|
23207
|
-
"data-empty": empty || void 0,
|
|
23208
|
-
"data-action-slots": actionSlots,
|
|
23209
|
-
"data-standalone": standalone || void 0,
|
|
23210
|
-
children: [columnHeadings && !empty && /* @__PURE__ */ jsxs("div", {
|
|
23211
|
-
className: fieldTable_module_default.columns,
|
|
23212
|
-
"data-layout": layout,
|
|
23213
|
-
"data-output": output || void 0,
|
|
23214
|
-
children: [
|
|
23215
|
-
/* @__PURE__ */ jsx("span", {
|
|
23216
|
-
className: fieldTable_module_default.nameHeading,
|
|
23217
|
-
children: t("valueEditor.columnName")
|
|
23218
|
-
}),
|
|
23219
|
-
typeColumn && /* @__PURE__ */ jsx("span", {
|
|
23220
|
-
className: fieldTable_module_default.typeHeading,
|
|
23221
|
-
children: t("valueEditor.columnType")
|
|
23222
|
-
}),
|
|
23223
|
-
!output && /* @__PURE__ */ jsx("span", {
|
|
23224
|
-
className: fieldTable_module_default.valueHeading,
|
|
23225
|
-
children: t("valueEditor.columnValue")
|
|
23226
|
-
}),
|
|
23227
|
-
nullable && /* @__PURE__ */ jsx("span", {
|
|
23228
|
-
className: fieldTable_module_default.nullableHeading,
|
|
23229
|
-
children: t("valueEditor.nullable")
|
|
23230
|
-
})
|
|
23231
|
-
]
|
|
23232
|
-
}), /* @__PURE__ */ jsx(FieldLayout, {
|
|
23233
|
-
layout,
|
|
23234
|
-
children
|
|
23235
|
-
})]
|
|
23236
|
-
});
|
|
23237
|
-
});
|
|
23238
|
-
function FieldTableRow({ className, ...props }) {
|
|
23239
|
-
return /* @__PURE__ */ jsx("div", {
|
|
23240
|
-
...props,
|
|
23241
|
-
className: [fieldTable_module_default.row, className].filter(Boolean).join(" ")
|
|
23242
|
-
});
|
|
23243
|
-
}
|
|
23244
|
-
function FieldNullable({ name, checked, onChange }) {
|
|
23245
|
-
const t = useTranslate();
|
|
23246
|
-
return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
23247
|
-
render: /* @__PURE__ */ jsx("span", { className: fieldTable_module_default.nullableControl }),
|
|
23248
|
-
children: /* @__PURE__ */ jsx(Checkbox, {
|
|
23249
|
-
className: "not-data-disabled:cursor-pointer",
|
|
23250
|
-
"aria-label": `${name} ${t("valueEditor.nullable")}`,
|
|
23251
|
-
"aria-checked": checked,
|
|
23252
|
-
checked,
|
|
23253
|
-
indeterminate: !onChange && !checked,
|
|
23254
|
-
disabled: !onChange,
|
|
23255
|
-
onCheckedChange: (next) => onChange?.(next === true)
|
|
23256
|
-
})
|
|
23257
|
-
}), /* @__PURE__ */ jsx(TooltipContent, { children: t(checked ? "valueEditor.nullableDescription" : "valueEditor.notNullableDescription") })] });
|
|
23258
|
-
}
|
|
23259
23326
|
//#endregion
|
|
23260
23327
|
//#region src/workbench/browser/runtime/editor/inspectorSection.tsx
|
|
23261
23328
|
function InspectorSection({ title, children, className, contentInset = true, ...props }) {
|
|
@@ -23273,6 +23340,115 @@ function InspectorSection({ title, children, className, contentInset = true, ...
|
|
|
23273
23340
|
});
|
|
23274
23341
|
}
|
|
23275
23342
|
//#endregion
|
|
23343
|
+
//#region src/workbench/browser/runtime/editor/connectorProxySection.tsx
|
|
23344
|
+
function ConnectorProxySection({ task, disabled, readOnly = false, hasBody, parameters, input, onSave, onClearBody }) {
|
|
23345
|
+
const t = useTranslate();
|
|
23346
|
+
const id = useId();
|
|
23347
|
+
const taskRef = useRef(task);
|
|
23348
|
+
const saveRef = useRef(onSave);
|
|
23349
|
+
useEffect(() => {
|
|
23350
|
+
taskRef.current = task;
|
|
23351
|
+
saveRef.current = onSave;
|
|
23352
|
+
}, [task, onSave]);
|
|
23353
|
+
const [changes] = useState(() => new TaskExecutorChanges(task.executor, (before, next) => {
|
|
23354
|
+
const current = taskRef.current;
|
|
23355
|
+
if (before.kind !== "connector-proxy" || next.kind !== "connector-proxy" || current.executor.kind !== "connector-proxy") return Promise.resolve(false);
|
|
23356
|
+
const merged = { ...current.executor };
|
|
23357
|
+
if (before.method !== next.method) merged.method = next.method;
|
|
23358
|
+
return saveRef.current(current, connectorProxyTask(merged, current.name, current));
|
|
23359
|
+
}));
|
|
23360
|
+
const [config, setConfig] = useState(changes.value);
|
|
23361
|
+
const [failed, setFailed] = useState(false);
|
|
23362
|
+
useEffect(() => {
|
|
23363
|
+
changes.sync(task.executor);
|
|
23364
|
+
setConfig(changes.value);
|
|
23365
|
+
}, [changes, task.executor]);
|
|
23366
|
+
if (config.kind !== "connector-proxy") return null;
|
|
23367
|
+
const supportsBody = connectorProxySupportsBody(config.method);
|
|
23368
|
+
const bodyError = task.executor.kind === "connector-proxy" && task.executor.method === config.method && connectorProxyIssues(config, hasBody).some((issue) => issue.code === "bodyUnsupported");
|
|
23369
|
+
async function save() {
|
|
23370
|
+
try {
|
|
23371
|
+
setFailed(!await changes.save());
|
|
23372
|
+
} catch {
|
|
23373
|
+
setFailed(true);
|
|
23374
|
+
}
|
|
23375
|
+
}
|
|
23376
|
+
function update(patch) {
|
|
23377
|
+
if (disabled || changes.value.kind !== "connector-proxy") return;
|
|
23378
|
+
changes.value = {
|
|
23379
|
+
...changes.value,
|
|
23380
|
+
...patch
|
|
23381
|
+
};
|
|
23382
|
+
setConfig(changes.value);
|
|
23383
|
+
save();
|
|
23384
|
+
}
|
|
23385
|
+
return /* @__PURE__ */ jsx(InspectorSection, {
|
|
23386
|
+
title: t("connectorProxy.title"),
|
|
23387
|
+
"data-inspector-section": "task",
|
|
23388
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
23389
|
+
className: "node-settings flex flex-col gap-3",
|
|
23390
|
+
"data-value-editor-scope": true,
|
|
23391
|
+
children: [
|
|
23392
|
+
input("endpoint", t("connectorProxy.endpoint")),
|
|
23393
|
+
/* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, {
|
|
23394
|
+
htmlFor: `${id}-method`,
|
|
23395
|
+
children: t("httpRequest.method")
|
|
23396
|
+
}), /* @__PURE__ */ jsx(NativeSelect, {
|
|
23397
|
+
id: `${id}-method`,
|
|
23398
|
+
value: config.method,
|
|
23399
|
+
disabled,
|
|
23400
|
+
className: "w-full",
|
|
23401
|
+
onChange: (event) => update({ method: event.target.value }),
|
|
23402
|
+
children: [
|
|
23403
|
+
"GET",
|
|
23404
|
+
"POST",
|
|
23405
|
+
"PUT",
|
|
23406
|
+
"PATCH",
|
|
23407
|
+
"DELETE"
|
|
23408
|
+
].map((method) => /* @__PURE__ */ jsx(NativeSelectOption, {
|
|
23409
|
+
value: method,
|
|
23410
|
+
children: method
|
|
23411
|
+
}, method))
|
|
23412
|
+
})] }),
|
|
23413
|
+
parameters,
|
|
23414
|
+
supportsBody && input("body", t("httpRequest.body")),
|
|
23415
|
+
bodyError && /* @__PURE__ */ jsxs("div", {
|
|
23416
|
+
className: "flex flex-col gap-2",
|
|
23417
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
23418
|
+
id: `${id}-body-error`,
|
|
23419
|
+
role: "alert",
|
|
23420
|
+
className: "text-xs text-destructive",
|
|
23421
|
+
children: t("connectorProxy.bodyUnsupported")
|
|
23422
|
+
}), !readOnly && /* @__PURE__ */ jsxs(Button$1, {
|
|
23423
|
+
variant: "outline",
|
|
23424
|
+
size: "field",
|
|
23425
|
+
disabled,
|
|
23426
|
+
"aria-describedby": `${id}-body-error`,
|
|
23427
|
+
onClick: () => void onClearBody(),
|
|
23428
|
+
children: [
|
|
23429
|
+
t("valueEditor.clear"),
|
|
23430
|
+
" ",
|
|
23431
|
+
t("httpRequest.body")
|
|
23432
|
+
]
|
|
23433
|
+
})]
|
|
23434
|
+
}),
|
|
23435
|
+
failed && /* @__PURE__ */ jsx(ValueEditorFeedback, {
|
|
23436
|
+
error: t("httpRequest.saveFailed"),
|
|
23437
|
+
children: (errorId) => /* @__PURE__ */ jsx(Button$1, {
|
|
23438
|
+
variant: "outline",
|
|
23439
|
+
size: "field",
|
|
23440
|
+
"aria-invalid": true,
|
|
23441
|
+
"aria-describedby": errorId,
|
|
23442
|
+
disabled,
|
|
23443
|
+
onClick: () => void save(),
|
|
23444
|
+
children: t("httpRequest.retry")
|
|
23445
|
+
})
|
|
23446
|
+
})
|
|
23447
|
+
]
|
|
23448
|
+
})
|
|
23449
|
+
});
|
|
23450
|
+
}
|
|
23451
|
+
//#endregion
|
|
23276
23452
|
//#region src/workbench/browser/runtime/editor/decisionSection.tsx
|
|
23277
23453
|
var textSchema = {
|
|
23278
23454
|
type: "string",
|
|
@@ -24205,30 +24381,33 @@ function CreateEventSourceDialog({ client, sourceKind, notify, teamId, existingN
|
|
|
24205
24381
|
}
|
|
24206
24382
|
//#endregion
|
|
24207
24383
|
//#region src/workbench/browser/runtime/editor/feishuEventFilters.tsx
|
|
24208
|
-
function FeishuEventFilters({ field, config, events, managed, disabled, onChange }) {
|
|
24384
|
+
function FeishuEventFilters({ field, config, events, managed, disabled, readOnly = false, onChange }) {
|
|
24209
24385
|
const t = useTranslate();
|
|
24210
24386
|
const resource = isJsonObject(config.resource) ? config.resource : void 0;
|
|
24211
24387
|
const kind = feishuResourceKind(events);
|
|
24388
|
+
const storedKind = resource?.kind;
|
|
24389
|
+
const displayKind = readOnly && (storedKind == "document" || storedKind == "calendar" || storedKind == "approval") ? storedKind : kind;
|
|
24212
24390
|
const chats = Array.isArray(config.chatIds) ? config.chatIds.filter((item) => typeof item == "string") : [];
|
|
24213
24391
|
const chatSupported = supportsFeishuChatFilter(events);
|
|
24214
|
-
return /* @__PURE__ */ jsxs(Fragment$1, { children: [field !== "resource" && (chatSupported || chats.length > 0) && /* @__PURE__ */
|
|
24392
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [field !== "resource" && (chatSupported || chats.length > 0) && /* @__PURE__ */ jsxs("div", {
|
|
24215
24393
|
className: "flex flex-col gap-2",
|
|
24216
|
-
children: chatSupported
|
|
24394
|
+
children: [(chatSupported || readOnly) && /* @__PURE__ */ jsx(ChatFilter, {
|
|
24217
24395
|
value: chats,
|
|
24218
24396
|
disabled,
|
|
24397
|
+
readOnly,
|
|
24219
24398
|
onChange: (value) => onChange("chatIds", value)
|
|
24220
|
-
}, JSON.stringify(chats))
|
|
24399
|
+
}, JSON.stringify(chats)), !chatSupported && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("p", {
|
|
24221
24400
|
role: "alert",
|
|
24222
24401
|
className: "m-0 text-sm text-destructive",
|
|
24223
24402
|
children: t("eventSources.incompatibleChats")
|
|
24224
|
-
}), /* @__PURE__ */ jsx(Button$1, {
|
|
24403
|
+
}), !readOnly && /* @__PURE__ */ jsx(Button$1, {
|
|
24225
24404
|
variant: "outline",
|
|
24226
24405
|
size: "sm",
|
|
24227
24406
|
className: "self-start",
|
|
24228
24407
|
disabled,
|
|
24229
24408
|
onClick: () => onChange("chatIds", void 0),
|
|
24230
24409
|
children: t("eventSources.removeFilter")
|
|
24231
|
-
})] })
|
|
24410
|
+
})] })]
|
|
24232
24411
|
}), field !== "chatIds" && (kind != null || resource != null) && /* @__PURE__ */ jsxs("div", {
|
|
24233
24412
|
className: "flex flex-col gap-3",
|
|
24234
24413
|
children: [
|
|
@@ -24236,7 +24415,7 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24236
24415
|
className: "flex items-center gap-2",
|
|
24237
24416
|
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
24238
24417
|
checked: resource != null,
|
|
24239
|
-
disabled: disabled || resource == null && (!managed || kind == null),
|
|
24418
|
+
disabled: readOnly || disabled || resource == null && (!managed || kind == null),
|
|
24240
24419
|
onCheckedChange: (checked) => onChange("resource", checked ? {
|
|
24241
24420
|
kind,
|
|
24242
24421
|
id: "",
|
|
@@ -24248,7 +24427,7 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24248
24427
|
className: "m-0 text-xs leading-5 text-muted-foreground",
|
|
24249
24428
|
children: t("eventSources.subscribeResourceHint")
|
|
24250
24429
|
}),
|
|
24251
|
-
!managed && /* @__PURE__ */ jsx("p", {
|
|
24430
|
+
!readOnly && !managed && /* @__PURE__ */ jsx("p", {
|
|
24252
24431
|
className: "m-0 text-xs leading-5 text-muted-foreground",
|
|
24253
24432
|
children: t("eventSources.managementRequired")
|
|
24254
24433
|
}),
|
|
@@ -24257,8 +24436,8 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24257
24436
|
className: "m-0 text-sm text-destructive",
|
|
24258
24437
|
children: t("eventSources.incompatibleResource")
|
|
24259
24438
|
}),
|
|
24260
|
-
resource != null &&
|
|
24261
|
-
|
|
24439
|
+
resource != null && displayKind != null && resource.kind == displayKind && /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
24440
|
+
displayKind == "document" && /* @__PURE__ */ jsx(SourceSelect, {
|
|
24262
24441
|
label: t("eventSources.documentType"),
|
|
24263
24442
|
value: typeof resource.documentType == "string" ? resource.documentType : "",
|
|
24264
24443
|
options: [
|
|
@@ -24272,7 +24451,7 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24272
24451
|
value,
|
|
24273
24452
|
label: t(`eventSources.documentTypes.${value}`)
|
|
24274
24453
|
})),
|
|
24275
|
-
disabled: disabled || !managed,
|
|
24454
|
+
disabled: readOnly || disabled || !managed,
|
|
24276
24455
|
onChange: (value) => onChange("resource", {
|
|
24277
24456
|
...resource,
|
|
24278
24457
|
documentType: value
|
|
@@ -24280,9 +24459,10 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24280
24459
|
}),
|
|
24281
24460
|
/* @__PURE__ */ jsxs(Label, {
|
|
24282
24461
|
className: "flex flex-col items-stretch gap-2",
|
|
24283
|
-
children: [t(`eventSources.resourceIds.${
|
|
24462
|
+
children: [t(`eventSources.resourceIds.${displayKind}`), /* @__PURE__ */ jsx(Input, {
|
|
24284
24463
|
value: typeof resource.id == "string" ? resource.id : "",
|
|
24285
|
-
disabled: disabled || !managed,
|
|
24464
|
+
disabled: !readOnly && (disabled || !managed),
|
|
24465
|
+
readOnly,
|
|
24286
24466
|
required: true,
|
|
24287
24467
|
onChange: (event) => onChange("resource", {
|
|
24288
24468
|
...resource,
|
|
@@ -24292,23 +24472,25 @@ function FeishuEventFilters({ field, config, events, managed, disabled, onChange
|
|
|
24292
24472
|
}),
|
|
24293
24473
|
/* @__PURE__ */ jsx("p", {
|
|
24294
24474
|
className: "m-0 text-xs leading-5 text-muted-foreground",
|
|
24295
|
-
children: t(`eventSources.resourceHints.${
|
|
24475
|
+
children: t(`eventSources.resourceHints.${displayKind}`)
|
|
24296
24476
|
})
|
|
24297
24477
|
] })
|
|
24298
24478
|
]
|
|
24299
24479
|
})] });
|
|
24300
24480
|
}
|
|
24301
|
-
function ChatFilter({ value, disabled, onChange }) {
|
|
24481
|
+
function ChatFilter({ value, disabled, readOnly = false, onChange }) {
|
|
24302
24482
|
const t = useTranslate();
|
|
24303
24483
|
const [text, setText] = useState(value.join("\n"));
|
|
24304
24484
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(Label, {
|
|
24305
24485
|
className: "flex flex-col items-stretch gap-2",
|
|
24306
24486
|
children: [t("eventSources.specifiedChats"), /* @__PURE__ */ jsx(Textarea, {
|
|
24307
24487
|
value: text,
|
|
24308
|
-
disabled,
|
|
24488
|
+
disabled: disabled && !readOnly,
|
|
24489
|
+
readOnly,
|
|
24309
24490
|
rows: 3,
|
|
24310
24491
|
onChange: (event) => setText(event.target.value),
|
|
24311
24492
|
onBlur: () => {
|
|
24493
|
+
if (readOnly || disabled) return;
|
|
24312
24494
|
const ids = [...new Set(text.split("\n").map((item) => item.trim()).filter(Boolean))];
|
|
24313
24495
|
if (JSON.stringify(ids) != JSON.stringify(value)) onChange(ids.length == 0 ? void 0 : ids);
|
|
24314
24496
|
}
|
|
@@ -25384,15 +25566,18 @@ function EventSourceSelect({ label, value, options, disabled, onChange, onOpen }
|
|
|
25384
25566
|
})
|
|
25385
25567
|
});
|
|
25386
25568
|
}
|
|
25387
|
-
function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLabels, config: assignments, nodeId, connectionId, disabled, store }) {
|
|
25569
|
+
function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLabels, config: assignments, nodeId, connectionId, disabled: temporarilyDisabled, readOnly = false, store }) {
|
|
25570
|
+
const disabled = temporarilyDisabled || readOnly;
|
|
25571
|
+
const editor = readOnly ? void 0 : store;
|
|
25388
25572
|
const config = triggerConfigValues(inputs, assignments);
|
|
25389
25573
|
const t = useTranslate();
|
|
25390
25574
|
const [attempt, setAttempt] = useState(0);
|
|
25391
25575
|
const sourceId = typeof config.sourceId == "string" ? config.sourceId : "";
|
|
25392
|
-
const flowId =
|
|
25576
|
+
const flowId = editor?.$.flowId.value;
|
|
25393
25577
|
const key = JSON.stringify([flowId, nodeId]);
|
|
25394
25578
|
const [state, setState] = useState();
|
|
25395
25579
|
useEffect(() => {
|
|
25580
|
+
if (editor == null) return;
|
|
25396
25581
|
const controller = new AbortController();
|
|
25397
25582
|
setState((current) => current?.key == key ? {
|
|
25398
25583
|
...current,
|
|
@@ -25402,7 +25587,7 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25402
25587
|
key,
|
|
25403
25588
|
loading: true
|
|
25404
25589
|
});
|
|
25405
|
-
|
|
25590
|
+
editor.loadEventSources(controller.signal).then((result) => {
|
|
25406
25591
|
if (!controller.signal.aborted) setState({
|
|
25407
25592
|
key,
|
|
25408
25593
|
...result,
|
|
@@ -25421,24 +25606,24 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25421
25606
|
});
|
|
25422
25607
|
return () => controller.abort();
|
|
25423
25608
|
}, [
|
|
25424
|
-
|
|
25609
|
+
editor,
|
|
25425
25610
|
key,
|
|
25426
25611
|
attempt
|
|
25427
25612
|
]);
|
|
25428
25613
|
const sources = state?.key == key ? state.sources : void 0;
|
|
25429
25614
|
const matchingSources = sources?.filter((source) => source.provider == provider && source.connectionId == connectionId);
|
|
25430
|
-
const options =
|
|
25615
|
+
const options = readOnly ? sourceId ? [{
|
|
25616
|
+
value: sourceId,
|
|
25617
|
+
label: sourceId
|
|
25618
|
+
}] : [] : matchingSources?.map((source) => ({
|
|
25431
25619
|
value: source.sourceId,
|
|
25432
25620
|
label: source.name
|
|
25433
25621
|
}));
|
|
25434
25622
|
const failed = state?.key == key && state.failed;
|
|
25435
25623
|
const loading = state?.key != key || state.loading == true;
|
|
25436
25624
|
const selectedSource = matchingSources?.find((source) => source.sourceId == sourceId);
|
|
25437
|
-
const eventOptions = selectedSource?.eventTypes.map((type) => ({
|
|
25438
|
-
value: type,
|
|
25439
|
-
label: type
|
|
25440
|
-
}));
|
|
25441
25625
|
const selectedEvents = Array.isArray(config.eventTypes) ? config.eventTypes.filter((value) => typeof value == "string") : [];
|
|
25626
|
+
const eventOptions = readOnly ? selectedEvents : selectedSource?.eventTypes;
|
|
25442
25627
|
const visibleInputs = inputs.filter((input) => {
|
|
25443
25628
|
if ("group" in input || input.handle === "sourceId" || input.handle === "eventTypes") return true;
|
|
25444
25629
|
if (!sourceId) return false;
|
|
@@ -25447,22 +25632,23 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25447
25632
|
return true;
|
|
25448
25633
|
});
|
|
25449
25634
|
return /* @__PURE__ */ jsx(TriggerConfigEditor, {
|
|
25635
|
+
readOnly,
|
|
25450
25636
|
onReset: () => {
|
|
25451
|
-
return
|
|
25637
|
+
return editor?.nodes.resetTriggerConfig(nodeId);
|
|
25452
25638
|
},
|
|
25453
|
-
onResetValue: (name) => void
|
|
25639
|
+
onResetValue: (name) => void editor?.nodes.resetTriggerConfig(nodeId, [name]),
|
|
25454
25640
|
inputs: visibleInputs,
|
|
25455
25641
|
fieldLabels,
|
|
25456
25642
|
config: assignments,
|
|
25457
25643
|
disabled,
|
|
25458
|
-
onChange: (name, value) => void
|
|
25644
|
+
onChange: (name, value) => void editor?.nodes.saveTriggerConfig(nodeId, name, value),
|
|
25459
25645
|
renderEditor: (input) => input.handle === "sourceId" ? /* @__PURE__ */ jsxs("div", {
|
|
25460
25646
|
className: "flex min-w-0 flex-col gap-2",
|
|
25461
25647
|
children: [
|
|
25462
25648
|
options == null ? /* @__PURE__ */ jsx("div", {
|
|
25463
25649
|
className: "flex h-[30px] w-full items-center rounded-[var(--ui-control-radius,var(--ui-radius))] border border-input bg-[var(--ui-control-background,var(--ui-muted))] px-2 text-xs text-muted-foreground",
|
|
25464
25650
|
children: t("eventSources.loading")
|
|
25465
|
-
}) : options.length > 0 ? /* @__PURE__ */ jsx(EventSourceSelect, {
|
|
25651
|
+
}) : readOnly || options.length > 0 ? /* @__PURE__ */ jsx(EventSourceSelect, {
|
|
25466
25652
|
label: fieldLabels?.sourceId ?? t("eventSources.source"),
|
|
25467
25653
|
value: sourceId,
|
|
25468
25654
|
options,
|
|
@@ -25470,12 +25656,12 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25470
25656
|
onOpen: () => setAttempt((value) => value + 1),
|
|
25471
25657
|
onChange: (value) => {
|
|
25472
25658
|
const source = matchingSources?.find((item) => item.sourceId == value);
|
|
25473
|
-
if (source != null)
|
|
25659
|
+
if (source != null) editor?.nodes.setTriggerEventSource(nodeId, source);
|
|
25474
25660
|
}
|
|
25475
|
-
}) : /* @__PURE__ */ jsxs("div", {
|
|
25661
|
+
}) : editor != null ? /* @__PURE__ */ jsxs("div", {
|
|
25476
25662
|
className: "flex h-[30px] w-full items-center overflow-hidden rounded-[var(--ui-control-radius,var(--ui-radius))] border border-input bg-[var(--ui-control-background,var(--ui-muted))]",
|
|
25477
25663
|
children: [/* @__PURE__ */ jsx(CreateEventSourceDialog, {
|
|
25478
|
-
notify:
|
|
25664
|
+
notify: editor.notify,
|
|
25479
25665
|
className: "min-w-0 flex-1",
|
|
25480
25666
|
trigger: /* @__PURE__ */ jsx(Button$1, {
|
|
25481
25667
|
type: "button",
|
|
@@ -25484,7 +25670,7 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25484
25670
|
className: "h-full w-full justify-start rounded-none border-0 bg-transparent px-2"
|
|
25485
25671
|
}),
|
|
25486
25672
|
sourceKind: eventSourceKind(provider),
|
|
25487
|
-
client:
|
|
25673
|
+
client: editor.eventSourceClient,
|
|
25488
25674
|
teamId: state?.key == key ? state.teamId ?? null : null,
|
|
25489
25675
|
existingNames: sources?.map((source) => source.name) ?? [],
|
|
25490
25676
|
disabled: disabled || state?.key != key || state.teamId === void 0,
|
|
@@ -25492,8 +25678,8 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25492
25678
|
...current,
|
|
25493
25679
|
sources: [...current.sources ?? [], source]
|
|
25494
25680
|
} : current),
|
|
25495
|
-
onSelect: async (source) =>
|
|
25496
|
-
}, JSON.stringify([
|
|
25681
|
+
onSelect: async (source) => editor.$.flowId.value == flowId && await editor.nodes.setTriggerEventSource(nodeId, source)
|
|
25682
|
+
}, JSON.stringify([editor.$.flowId.value, nodeId])), /* @__PURE__ */ jsx(Button$1, {
|
|
25497
25683
|
type: "button",
|
|
25498
25684
|
size: "icon-xs",
|
|
25499
25685
|
variant: "ghost",
|
|
@@ -25507,7 +25693,7 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25507
25693
|
className: `i-lucide-light:refresh-cw ${loading ? "animate-spin motion-reduce:animate-none" : ""}`
|
|
25508
25694
|
})
|
|
25509
25695
|
})]
|
|
25510
|
-
}),
|
|
25696
|
+
}) : null,
|
|
25511
25697
|
sourceId && options != null && !options.some((option) => option.value == sourceId) && /* @__PURE__ */ jsx("p", {
|
|
25512
25698
|
role: "alert",
|
|
25513
25699
|
className: "text-sm text-destructive",
|
|
@@ -25519,14 +25705,15 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25519
25705
|
children: t("eventSources.loadFailed")
|
|
25520
25706
|
})
|
|
25521
25707
|
]
|
|
25522
|
-
}) : input.handle === "eventTypes" && provider === "feishu_app_bot" ? sourceId ? /* @__PURE__ */ jsxs("div", {
|
|
25708
|
+
}) : input.handle === "eventTypes" && provider === "feishu_app_bot" ? sourceId || readOnly ? /* @__PURE__ */ jsxs("div", {
|
|
25523
25709
|
className: "flex flex-col gap-2",
|
|
25524
25710
|
children: [/* @__PURE__ */ jsx(FeishuEventPicker, {
|
|
25711
|
+
readOnly,
|
|
25525
25712
|
value: selectedEvents,
|
|
25526
|
-
allowedEvents:
|
|
25713
|
+
allowedEvents: eventOptions ?? [],
|
|
25527
25714
|
disabled: disabled || eventOptions == null,
|
|
25528
|
-
onChange: (value) => void
|
|
25529
|
-
}), /* @__PURE__ */ jsx("p", {
|
|
25715
|
+
onChange: (value) => void editor?.nodes.saveTriggerConfig(nodeId, "eventTypes", value)
|
|
25716
|
+
}), !readOnly && /* @__PURE__ */ jsx("p", {
|
|
25530
25717
|
className: "m-0 text-xs text-muted-foreground",
|
|
25531
25718
|
children: t("eventSources.sourceEventsHint")
|
|
25532
25719
|
})]
|
|
@@ -25534,12 +25721,13 @@ function EventSourceTriggerConfig({ inputs, provider = "feishu_app_bot", fieldLa
|
|
|
25534
25721
|
className: "flex h-[30px] items-center rounded-[var(--ui-control-radius,var(--ui-radius))] border border-input bg-[var(--ui-control-background,var(--ui-muted))] px-2 text-xs text-muted-foreground",
|
|
25535
25722
|
children: t("eventSources.selectSourceFirst")
|
|
25536
25723
|
}) : input.handle === "chatIds" || input.handle === "resource" ? /* @__PURE__ */ jsx(FeishuEventFilters, {
|
|
25724
|
+
readOnly,
|
|
25537
25725
|
field: input.handle,
|
|
25538
25726
|
config,
|
|
25539
25727
|
events: selectedEvents,
|
|
25540
25728
|
managed: selectedSource?.manageSubscriptions ?? false,
|
|
25541
25729
|
disabled: disabled || selectedSource == null,
|
|
25542
|
-
onChange: (name, value) => void
|
|
25730
|
+
onChange: (name, value) => void editor?.nodes.saveTriggerConfig(nodeId, name, value)
|
|
25543
25731
|
}) : void 0
|
|
25544
25732
|
});
|
|
25545
25733
|
}
|
|
@@ -25822,109 +26010,6 @@ function GeneralSettings({ title, children, disabled = false, readOnly = false,
|
|
|
25822
26010
|
}, nodeId);
|
|
25823
26011
|
}
|
|
25824
26012
|
//#endregion
|
|
25825
|
-
//#region src/workbench/browser/runtime/editor/httpParameterEditor.tsx
|
|
25826
|
-
var expanded$2 = () => true;
|
|
25827
|
-
var object = (value) => value != null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
25828
|
-
function HttpParameterEditor({ group, task, entries, disabled, readOnly, variables, renderSource, onEdit }) {
|
|
25829
|
-
const t = useTranslate();
|
|
25830
|
-
if (task.executor.kind !== "http-request") return null;
|
|
25831
|
-
const parameters = task.executor[group];
|
|
25832
|
-
const root = parameters.mode === "object" ? entries[group] : void 0;
|
|
25833
|
-
const label = t(`httpRequest.${group}`);
|
|
25834
|
-
const schema = group === "query" ? httpQuerySchema : httpHeaderSchema;
|
|
25835
|
-
const handle = (name) => `${group === "query" ? "query" : "header"}.${name}`;
|
|
25836
|
-
const values = parameters.mode === "fields" ? Object.fromEntries(parameters.names.map((name) => {
|
|
25837
|
-
const value = entries[handle(name)]?.value;
|
|
25838
|
-
return [name, value === void 0 ? "" : value];
|
|
25839
|
-
})) : object(root?.value);
|
|
25840
|
-
const input = (port, entry, name) => {
|
|
25841
|
-
const upstream = renderSource(port.handle, port);
|
|
25842
|
-
return {
|
|
25843
|
-
embedded: true,
|
|
25844
|
-
definition: port,
|
|
25845
|
-
variables,
|
|
25846
|
-
disabled,
|
|
25847
|
-
readOnly,
|
|
25848
|
-
variableName: entry?.variableName,
|
|
25849
|
-
connected: entry?.connected ?? false,
|
|
25850
|
-
upstream: upstream == null ? void 0 : {
|
|
25851
|
-
...upstream,
|
|
25852
|
-
onChange: (source) => onEdit({
|
|
25853
|
-
kind: "source",
|
|
25854
|
-
source: {
|
|
25855
|
-
kind: "node",
|
|
25856
|
-
...source
|
|
25857
|
-
},
|
|
25858
|
-
field: name,
|
|
25859
|
-
fields: values
|
|
25860
|
-
})
|
|
25861
|
-
},
|
|
25862
|
-
onVariable: (next) => {
|
|
25863
|
-
if (next == null) onEdit({
|
|
25864
|
-
kind: "fields",
|
|
25865
|
-
value: name == null ? {} : {
|
|
25866
|
-
...values,
|
|
25867
|
-
[name]: ""
|
|
25868
|
-
},
|
|
25869
|
-
field: name
|
|
25870
|
-
});
|
|
25871
|
-
else onEdit({
|
|
25872
|
-
kind: "variable",
|
|
25873
|
-
name: next,
|
|
25874
|
-
field: name,
|
|
25875
|
-
fields: values
|
|
25876
|
-
});
|
|
25877
|
-
}
|
|
25878
|
-
};
|
|
25879
|
-
};
|
|
25880
|
-
return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(FieldTable, {
|
|
25881
|
-
standalone: true,
|
|
25882
|
-
layout: "values",
|
|
25883
|
-
typeColumn: false,
|
|
25884
|
-
columnHeadings: false,
|
|
25885
|
-
actionSlots: 2,
|
|
25886
|
-
children: /* @__PURE__ */ jsx(NodeInputValue, {
|
|
25887
|
-
...input({
|
|
25888
|
-
handle: group,
|
|
25889
|
-
jsonSchema: schema,
|
|
25890
|
-
nullable: true
|
|
25891
|
-
}, root),
|
|
25892
|
-
label,
|
|
25893
|
-
value: values,
|
|
25894
|
-
onValue: (next) => onEdit({
|
|
25895
|
-
kind: "fields",
|
|
25896
|
-
value: object(next)
|
|
25897
|
-
}),
|
|
25898
|
-
presentation: {
|
|
25899
|
-
valueOnly: true,
|
|
25900
|
-
hideOptions: true,
|
|
25901
|
-
hideValueTools: true,
|
|
25902
|
-
hideChildTypes: true,
|
|
25903
|
-
expansionPolicy: expanded$2,
|
|
25904
|
-
validateObjectFieldName: (name, current) => group === "query" ? !!name.trim() && (name === current || !Object.hasOwn(values, name)) : httpHeaderNameIssue(name, Object.keys(values).filter((key) => key !== current)) == null,
|
|
25905
|
-
renderObjectField: (name, props) => /* @__PURE__ */ jsx(NodeInputValue, {
|
|
25906
|
-
...input({
|
|
25907
|
-
handle: handle(name),
|
|
25908
|
-
jsonSchema: props.schema,
|
|
25909
|
-
nullable: true
|
|
25910
|
-
}, parameters.mode === "fields" ? entries[handle(name)] : void 0, name),
|
|
25911
|
-
label: props.label,
|
|
25912
|
-
value: parameters.mode === "fields" ? entries[handle(name)]?.value : values[name],
|
|
25913
|
-
presentation: props,
|
|
25914
|
-
onValue: (value) => onEdit({
|
|
25915
|
-
kind: "fields",
|
|
25916
|
-
value: {
|
|
25917
|
-
...values,
|
|
25918
|
-
[name]: value ?? null
|
|
25919
|
-
},
|
|
25920
|
-
field: name
|
|
25921
|
-
})
|
|
25922
|
-
})
|
|
25923
|
-
}
|
|
25924
|
-
})
|
|
25925
|
-
})] });
|
|
25926
|
-
}
|
|
25927
|
-
//#endregion
|
|
25928
26013
|
//#region src/workbench/browser/runtime/editor/httpRequestSection.tsx
|
|
25929
26014
|
function HttpRequestSection({ task, disabled, onSave, parameters, input }) {
|
|
25930
26015
|
const t = useTranslate();
|
|
@@ -26095,7 +26180,8 @@ function HttpRequestSection({ task, disabled, onSave, parameters, input }) {
|
|
|
26095
26180
|
}
|
|
26096
26181
|
//#endregion
|
|
26097
26182
|
//#region src/workbench/browser/runtime/editor/useTriggerConfigOptions.ts
|
|
26098
|
-
function useTriggerConfigOptions(store, nodeId, field, scope,
|
|
26183
|
+
function useTriggerConfigOptions(store, nodeId, field, scope, requested) {
|
|
26184
|
+
const enabled = store != null && requested;
|
|
26099
26185
|
const [attempt, setAttempt] = useState(0);
|
|
26100
26186
|
const key = JSON.stringify([
|
|
26101
26187
|
nodeId,
|
|
@@ -26104,7 +26190,7 @@ function useTriggerConfigOptions(store, nodeId, field, scope, enabled) {
|
|
|
26104
26190
|
]);
|
|
26105
26191
|
const [state, setState] = useState();
|
|
26106
26192
|
useEffect(() => {
|
|
26107
|
-
if (!enabled) return;
|
|
26193
|
+
if (!enabled || store == null) return;
|
|
26108
26194
|
const controller = new AbortController();
|
|
26109
26195
|
setState((current) => ({
|
|
26110
26196
|
failed: false,
|
|
@@ -26220,12 +26306,15 @@ function TeamSelect({ disabled, missing, options, value, onChange }) {
|
|
|
26220
26306
|
})]
|
|
26221
26307
|
});
|
|
26222
26308
|
}
|
|
26223
|
-
function StatusSelect({ disabled, missing, options, selected, teamSelected, onChange }) {
|
|
26309
|
+
function StatusSelect({ disabled, readOnly = false, missing, options, selected, teamSelected, onChange }) {
|
|
26224
26310
|
const t = useTranslate();
|
|
26225
26311
|
const descriptionId = useId();
|
|
26226
26312
|
const errorId = useId();
|
|
26227
26313
|
const [container, setContainer] = useState(null);
|
|
26228
|
-
const choices =
|
|
26314
|
+
const choices = readOnly ? selected.map((value) => options.options?.find((item) => item.value == value) ?? {
|
|
26315
|
+
label: value,
|
|
26316
|
+
value
|
|
26317
|
+
}) : [...options.options ?? [], ...missing.map((value) => ({
|
|
26229
26318
|
label: t("linearTrigger.unavailableStatus", { id: value }),
|
|
26230
26319
|
value
|
|
26231
26320
|
}))];
|
|
@@ -26247,7 +26336,7 @@ function StatusSelect({ disabled, missing, options, selected, teamSelected, onCh
|
|
|
26247
26336
|
}),
|
|
26248
26337
|
/* @__PURE__ */ jsxs(DropdownMenu, {
|
|
26249
26338
|
onOpenChange: (open) => {
|
|
26250
|
-
if (open) options.refresh();
|
|
26339
|
+
if (open && !readOnly) options.refresh();
|
|
26251
26340
|
},
|
|
26252
26341
|
children: [/* @__PURE__ */ jsxs(DropdownMenuTrigger, {
|
|
26253
26342
|
render: /* @__PURE__ */ jsx(Button$1, {
|
|
@@ -26257,7 +26346,7 @@ function StatusSelect({ disabled, missing, options, selected, teamSelected, onCh
|
|
|
26257
26346
|
className: "w-full min-w-0 justify-between",
|
|
26258
26347
|
"data-field-control": true,
|
|
26259
26348
|
"data-field-prompt": missing.length > 0 || void 0,
|
|
26260
|
-
disabled,
|
|
26349
|
+
disabled: disabled && !readOnly,
|
|
26261
26350
|
size: "field",
|
|
26262
26351
|
title: missing.length > 0 ? t("linearTrigger.missingStatuses") : t("linearTrigger.statusHint"),
|
|
26263
26352
|
type: "button",
|
|
@@ -26287,6 +26376,7 @@ function StatusSelect({ disabled, missing, options, selected, teamSelected, onCh
|
|
|
26287
26376
|
const unavailable = missing.includes(item.value);
|
|
26288
26377
|
return /* @__PURE__ */ jsxs(DropdownMenuCheckboxItem, {
|
|
26289
26378
|
checked,
|
|
26379
|
+
disabled: readOnly,
|
|
26290
26380
|
className: `mt-1 first-of-type:mt-0 min-h-7 rounded-[var(--ui-control-radius,var(--ui-radius))] py-1 text-xs leading-5 font-normal ${unavailable ? "text-destructive" : ""}`,
|
|
26291
26381
|
onCheckedChange: (next) => onChange(next ? [...selected, item.value] : selected.filter((value) => value != item.value)),
|
|
26292
26382
|
children: ["color" in item && item.color != null && /* @__PURE__ */ jsx("span", {
|
|
@@ -26325,33 +26415,37 @@ function StatusSelect({ disabled, missing, options, selected, teamSelected, onCh
|
|
|
26325
26415
|
]
|
|
26326
26416
|
});
|
|
26327
26417
|
}
|
|
26328
|
-
function LinearTriggerConfig({ inputs, fieldLabels, config: assignments, nodeId, connectionId, disabled, store }) {
|
|
26418
|
+
function LinearTriggerConfig({ inputs, fieldLabels, config: assignments, nodeId, connectionId, disabled: temporarilyDisabled, readOnly = false, store }) {
|
|
26419
|
+
const disabled = readOnly || temporarilyDisabled;
|
|
26420
|
+
const editor = readOnly ? void 0 : store;
|
|
26329
26421
|
const config = triggerConfigValues(inputs, assignments);
|
|
26330
26422
|
const teamId = typeof config.teamId == "string" ? config.teamId : void 0;
|
|
26331
26423
|
const selected = Array.isArray(config.stateIds) ? config.stateIds.filter((id) => typeof id == "string") : [];
|
|
26332
|
-
const scope = JSON.stringify([
|
|
26333
|
-
const teams = useTriggerConfigOptions(
|
|
26334
|
-
const states = useTriggerConfigOptions(
|
|
26424
|
+
const scope = JSON.stringify([editor?.$.flowId.value, connectionId]);
|
|
26425
|
+
const teams = useTriggerConfigOptions(editor, nodeId, "teamId", scope, connectionId != null);
|
|
26426
|
+
const states = useTriggerConfigOptions(editor, nodeId, "stateIds", JSON.stringify([scope, teamId]), connectionId != null && teamId != null);
|
|
26335
26427
|
const missingTeam = teamId != null && teams.options != null && !teams.options.some((item) => item.value == teamId);
|
|
26336
26428
|
const missingStates = states.options == null ? [] : selected.filter((id) => !states.options.some((item) => item.value == id));
|
|
26337
26429
|
return /* @__PURE__ */ jsx(TriggerConfigEditor, {
|
|
26338
|
-
|
|
26339
|
-
|
|
26430
|
+
readOnly,
|
|
26431
|
+
onReset: () => editor?.nodes.resetTriggerConfig(nodeId),
|
|
26432
|
+
onResetValue: (name) => void editor?.nodes.resetTriggerConfig(nodeId, [name]),
|
|
26340
26433
|
inputs,
|
|
26341
26434
|
fieldLabels,
|
|
26342
26435
|
config: assignments,
|
|
26343
26436
|
disabled,
|
|
26344
|
-
onChange: (name, value) => void
|
|
26437
|
+
onChange: (name, value) => void editor?.nodes.saveTriggerConfig(nodeId, name, value),
|
|
26345
26438
|
renderEditor: (input) => input.handle === "teamId" ? /* @__PURE__ */ jsx(TeamSelect, {
|
|
26346
26439
|
disabled: disabled || connectionId == null,
|
|
26347
26440
|
missing: missingTeam,
|
|
26348
|
-
onChange: (value) => void
|
|
26441
|
+
onChange: (value) => void editor?.nodes.saveTriggerConfig(nodeId, "teamId", value),
|
|
26349
26442
|
options: teams,
|
|
26350
26443
|
value: teamId
|
|
26351
26444
|
}) : input.handle === "stateIds" ? /* @__PURE__ */ jsx(StatusSelect, {
|
|
26445
|
+
readOnly,
|
|
26352
26446
|
disabled: disabled || connectionId == null || teamId == null || missingTeam,
|
|
26353
26447
|
missing: missingStates,
|
|
26354
|
-
onChange: (value) => void
|
|
26448
|
+
onChange: (value) => void editor?.nodes.saveTriggerConfig(nodeId, "stateIds", value),
|
|
26355
26449
|
options: states,
|
|
26356
26450
|
selected,
|
|
26357
26451
|
teamSelected: teamId != null
|
|
@@ -26972,6 +27066,106 @@ function presentProviderOutputDescription(node, output, description, display) {
|
|
|
26972
27066
|
return display?.outputs[output] ?? description;
|
|
26973
27067
|
}
|
|
26974
27068
|
//#endregion
|
|
27069
|
+
//#region src/workbench/browser/runtime/editor/requestParameterEditor.tsx
|
|
27070
|
+
var expanded$2 = () => true;
|
|
27071
|
+
var object = (value) => value != null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
27072
|
+
function RequestParameterEditor({ group, parameters, schema, entries, disabled, readOnly, variables, renderSource, onEdit }) {
|
|
27073
|
+
const t = useTranslate();
|
|
27074
|
+
const root = parameters.mode === "object" ? entries[group] : void 0;
|
|
27075
|
+
const label = t(`httpRequest.${group}`);
|
|
27076
|
+
const handle = (name) => `${group === "query" ? "query" : "header"}.${name}`;
|
|
27077
|
+
const values = parameters.mode === "fields" ? Object.fromEntries(parameters.names.map((name) => {
|
|
27078
|
+
const value = entries[handle(name)]?.value;
|
|
27079
|
+
return [name, value === void 0 ? "" : value];
|
|
27080
|
+
})) : object(root?.value);
|
|
27081
|
+
const input = (port, entry, name) => {
|
|
27082
|
+
const upstream = renderSource(port.handle, port);
|
|
27083
|
+
return {
|
|
27084
|
+
embedded: true,
|
|
27085
|
+
definition: port,
|
|
27086
|
+
variables,
|
|
27087
|
+
disabled,
|
|
27088
|
+
readOnly,
|
|
27089
|
+
variableName: entry?.variableName,
|
|
27090
|
+
connected: entry?.connected ?? false,
|
|
27091
|
+
upstream: upstream == null ? void 0 : {
|
|
27092
|
+
...upstream,
|
|
27093
|
+
onChange: (source) => onEdit({
|
|
27094
|
+
kind: "source",
|
|
27095
|
+
source: {
|
|
27096
|
+
kind: "node",
|
|
27097
|
+
...source
|
|
27098
|
+
},
|
|
27099
|
+
field: name,
|
|
27100
|
+
fields: values
|
|
27101
|
+
})
|
|
27102
|
+
},
|
|
27103
|
+
onVariable: (next) => {
|
|
27104
|
+
if (next == null) onEdit({
|
|
27105
|
+
kind: "fields",
|
|
27106
|
+
value: name == null ? {} : {
|
|
27107
|
+
...values,
|
|
27108
|
+
[name]: ""
|
|
27109
|
+
},
|
|
27110
|
+
field: name
|
|
27111
|
+
});
|
|
27112
|
+
else onEdit({
|
|
27113
|
+
kind: "variable",
|
|
27114
|
+
name: next,
|
|
27115
|
+
field: name,
|
|
27116
|
+
fields: values
|
|
27117
|
+
});
|
|
27118
|
+
}
|
|
27119
|
+
};
|
|
27120
|
+
};
|
|
27121
|
+
return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(FieldTable, {
|
|
27122
|
+
standalone: true,
|
|
27123
|
+
layout: "values",
|
|
27124
|
+
typeColumn: false,
|
|
27125
|
+
columnHeadings: false,
|
|
27126
|
+
actionSlots: 2,
|
|
27127
|
+
children: /* @__PURE__ */ jsx(NodeInputValue, {
|
|
27128
|
+
...input({
|
|
27129
|
+
handle: group,
|
|
27130
|
+
jsonSchema: schema,
|
|
27131
|
+
nullable: true
|
|
27132
|
+
}, root),
|
|
27133
|
+
label,
|
|
27134
|
+
value: values,
|
|
27135
|
+
onValue: (next) => onEdit({
|
|
27136
|
+
kind: "fields",
|
|
27137
|
+
value: object(next)
|
|
27138
|
+
}),
|
|
27139
|
+
presentation: {
|
|
27140
|
+
valueOnly: true,
|
|
27141
|
+
hideOptions: true,
|
|
27142
|
+
hideValueTools: true,
|
|
27143
|
+
hideChildTypes: true,
|
|
27144
|
+
expansionPolicy: expanded$2,
|
|
27145
|
+
validateObjectFieldName: (name, current) => group === "query" ? !!name.trim() && (name === current || !Object.hasOwn(values, name)) : httpHeaderNameIssue(name, Object.keys(values).filter((key) => key !== current)) == null,
|
|
27146
|
+
renderObjectField: (name, props) => /* @__PURE__ */ jsx(NodeInputValue, {
|
|
27147
|
+
...input({
|
|
27148
|
+
handle: handle(name),
|
|
27149
|
+
jsonSchema: props.schema,
|
|
27150
|
+
nullable: true
|
|
27151
|
+
}, parameters.mode === "fields" ? entries[handle(name)] : void 0, name),
|
|
27152
|
+
label: props.label,
|
|
27153
|
+
value: parameters.mode === "fields" ? entries[handle(name)]?.value : values[name],
|
|
27154
|
+
presentation: props,
|
|
27155
|
+
onValue: (value) => onEdit({
|
|
27156
|
+
kind: "fields",
|
|
27157
|
+
value: {
|
|
27158
|
+
...values,
|
|
27159
|
+
[name]: value ?? null
|
|
27160
|
+
},
|
|
27161
|
+
field: name
|
|
27162
|
+
})
|
|
27163
|
+
})
|
|
27164
|
+
}
|
|
27165
|
+
})
|
|
27166
|
+
})] });
|
|
27167
|
+
}
|
|
27168
|
+
//#endregion
|
|
26975
27169
|
//#region src/workbench/browser/runtime/editor/timeZoneSelect.tsx
|
|
26976
27170
|
function TimeZoneSelect({ id, value, disabled, label, onChange, at = /* @__PURE__ */ new Date() }) {
|
|
26977
27171
|
const t = useTranslate();
|
|
@@ -27406,24 +27600,27 @@ function SkipDuplicatesSection({ task, disabled, onSave, history }) {
|
|
|
27406
27600
|
}
|
|
27407
27601
|
//#endregion
|
|
27408
27602
|
//#region src/workbench/browser/runtime/editor/tallyTriggerConfig.tsx
|
|
27409
|
-
function TallyTriggerConfig({ inputs, fieldLabels, config, nodeId, connectionId, disabled, store }) {
|
|
27603
|
+
function TallyTriggerConfig({ inputs, fieldLabels, config, nodeId, connectionId, disabled: temporarilyDisabled, readOnly = false, store }) {
|
|
27604
|
+
const disabled = readOnly || temporarilyDisabled;
|
|
27605
|
+
const editor = readOnly ? void 0 : store;
|
|
27410
27606
|
const t = useTranslate();
|
|
27411
27607
|
const values = triggerConfigValues(inputs, config);
|
|
27412
27608
|
const formId = typeof values.formId == "string" ? values.formId : void 0;
|
|
27413
|
-
const forms = useTriggerConfigOptions(
|
|
27609
|
+
const forms = useTriggerConfigOptions(editor, nodeId, "formId", JSON.stringify([editor?.$.flowId.value, connectionId]), connectionId != null);
|
|
27414
27610
|
const missing = formId != null && forms.options != null && !forms.options.some((item) => item.value == formId);
|
|
27415
27611
|
const items = [...forms.options ?? [], ...formId != null && !forms.options?.some((item) => item.value == formId) ? [{
|
|
27416
27612
|
value: formId,
|
|
27417
27613
|
label: formId
|
|
27418
27614
|
}] : []];
|
|
27419
27615
|
return /* @__PURE__ */ jsx(TriggerConfigEditor, {
|
|
27616
|
+
readOnly,
|
|
27420
27617
|
inputs,
|
|
27421
27618
|
fieldLabels,
|
|
27422
27619
|
config,
|
|
27423
27620
|
disabled,
|
|
27424
|
-
onChange: (name, value) => void
|
|
27425
|
-
onReset: () =>
|
|
27426
|
-
onResetValue: (name) => void
|
|
27621
|
+
onChange: (name, value) => void editor?.nodes.saveTriggerConfig(nodeId, name, value),
|
|
27622
|
+
onReset: () => editor?.nodes.resetTriggerConfig(nodeId),
|
|
27623
|
+
onResetValue: (name) => void editor?.nodes.resetTriggerConfig(nodeId, [name]),
|
|
27427
27624
|
renderEditor: (input) => input.handle == "formId" ? /* @__PURE__ */ jsxs("div", {
|
|
27428
27625
|
className: "min-w-0",
|
|
27429
27626
|
children: [
|
|
@@ -27435,7 +27632,7 @@ function TallyTriggerConfig({ inputs, fieldLabels, config, nodeId, connectionId,
|
|
|
27435
27632
|
if (open) forms.refresh();
|
|
27436
27633
|
},
|
|
27437
27634
|
onValueChange: (value) => {
|
|
27438
|
-
if (typeof value == "string")
|
|
27635
|
+
if (typeof value == "string") editor?.nodes.saveTriggerConfig(nodeId, "formId", value);
|
|
27439
27636
|
},
|
|
27440
27637
|
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
27441
27638
|
"aria-label": t("tallyTrigger.form"),
|
|
@@ -28677,7 +28874,7 @@ function inspectorIcon(node) {
|
|
|
28677
28874
|
if (node.definition.executor.kind == "decision") return "decision";
|
|
28678
28875
|
if (node.definition.executor.kind == "workflow") return "flow";
|
|
28679
28876
|
if (node.definition.executor.kind == "openapi" || node.definition.executor.kind == "http-request" || node.definition.executor.kind == "skip-duplicates") return "task";
|
|
28680
|
-
return node.definition.executor.kind == "connector" ? "connection" : "llm";
|
|
28877
|
+
return node.definition.executor.kind == "connector" || node.definition.executor.kind === "connector-proxy" ? "connection" : "llm";
|
|
28681
28878
|
}
|
|
28682
28879
|
return "task";
|
|
28683
28880
|
}
|
|
@@ -28711,6 +28908,7 @@ function nodePurposePlaceholder(selection, t, action, displays) {
|
|
|
28711
28908
|
case "workflow": return t("workflow.description");
|
|
28712
28909
|
case "skip-duplicates": return;
|
|
28713
28910
|
case "http-request": return t("httpRequest.description");
|
|
28911
|
+
case "connector-proxy": return t("connectorProxy.description");
|
|
28714
28912
|
case "openapi": return t("openapi.description");
|
|
28715
28913
|
case "connector": return action?.description;
|
|
28716
28914
|
case "llm": return t(definition.executor.mode == "json" ? "addNode.llmStructuredDescription" : "addNode.llmChatDescription");
|
|
@@ -28762,7 +28960,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28762
28960
|
loading: false,
|
|
28763
28961
|
names: [],
|
|
28764
28962
|
onOpen: void 0
|
|
28765
|
-
}, readOnly = false, connectorAction, connectorActionError, connectorAccessError, connectorAuthorizationPending = false, connectorConnection, connectorConnectionError, activeConnectorConnections, connectorProviders, connectors: liveConnectors, connectorAccess, connectorCandidates, onConfigureConnectorAccess, prepareConnectorAction, connectorLoading = false, disabled: temporarilyDisabled = false, diagnostics, focus, revision, selection, sourceNodeIcons, store: writableStore, theme, triggerActiveConnections, triggerAuthorizationPending = false, triggerConnection, triggerConnectionError, triggerConnectionLoading = false, triggerDisplays, triggers: liveTriggers }) {
|
|
28963
|
+
}, readOnly = false, connectorAction, connectorProvider, connectorActionError, connectorAccessError, connectorAuthorizationPending = false, connectorConnection, connectorConnectionError, activeConnectorConnections, connectorProviders, connectors: liveConnectors, connectorAccess, connectorCandidates, onConfigureConnectorAccess, prepareConnectorAction, connectorLoading = false, disabled: temporarilyDisabled = false, diagnostics, focus, revision, selection, sourceNodeIcons, store: writableStore, theme, triggerActiveConnections, triggerAuthorizationPending = false, triggerConnection, triggerConnectionError, triggerConnectionLoading = false, triggerDisplays, triggers: liveTriggers }) {
|
|
28766
28964
|
const store = readOnly ? void 0 : writableStore;
|
|
28767
28965
|
const connectors = readOnly ? void 0 : liveConnectors;
|
|
28768
28966
|
const triggers = readOnly ? void 0 : liveTriggers;
|
|
@@ -28784,6 +28982,8 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28784
28982
|
const isAgent = task != null && "executor" in task && task.executor.kind == "agent";
|
|
28785
28983
|
const isDecision = task != null && "executor" in task && task.executor.kind == "decision";
|
|
28786
28984
|
const isHttpRequest = task != null && "executor" in task && task.executor.kind == "http-request";
|
|
28985
|
+
const proxy = task != null && "executor" in task && task.executor.kind === "connector-proxy" ? task.executor : void 0;
|
|
28986
|
+
const proxyProvider = proxy == null ? void 0 : connectorProvider ?? connectorProviders?.[proxy.providerId];
|
|
28787
28987
|
const isOpenApi = task != null && "executor" in task && task.executor.kind == "openapi";
|
|
28788
28988
|
const unconfiguredWorkflow = task != null && "executor" in task && task.executor.kind == "workflow" && !task.executor.flowId;
|
|
28789
28989
|
const unconfiguredOpenApi = task != null && "executor" in task && task.executor.kind == "openapi" && !task.executor.path;
|
|
@@ -28826,6 +29026,98 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28826
29026
|
selection?.id,
|
|
28827
29027
|
selection?.kind
|
|
28828
29028
|
]);
|
|
29029
|
+
const requestInput = (handle, label) => {
|
|
29030
|
+
if (selection?.kind !== "task" || task == null) return null;
|
|
29031
|
+
const proxyBody = proxy != null && handle === "body";
|
|
29032
|
+
const definition = task.inputs.find((port) => "handle" in port && port.handle === handle) ?? (proxyBody ? connectorProxyBodyInput : void 0);
|
|
29033
|
+
if (definition == null) return null;
|
|
29034
|
+
const mapping = revision.inputMappings(selection.node)[handle];
|
|
29035
|
+
const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
29036
|
+
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
29037
|
+
const input = /* @__PURE__ */ jsx(NodeInputValue, {
|
|
29038
|
+
embedded: true,
|
|
29039
|
+
definition,
|
|
29040
|
+
label,
|
|
29041
|
+
presentation: {
|
|
29042
|
+
compact: !proxyBody,
|
|
29043
|
+
hideOptions: true,
|
|
29044
|
+
...proxyBody ? {
|
|
29045
|
+
layout: "values",
|
|
29046
|
+
valueOnly: true,
|
|
29047
|
+
hideChildTypes: true,
|
|
29048
|
+
defaultEditor: "object",
|
|
29049
|
+
expansionPolicy: () => true,
|
|
29050
|
+
unset: {
|
|
29051
|
+
label: t(readOnly ? "valueEditor.unset" : "valueEditor.setValue"),
|
|
29052
|
+
required: false
|
|
29053
|
+
}
|
|
29054
|
+
} : {}
|
|
29055
|
+
},
|
|
29056
|
+
sourceOnly: handle.startsWith("auth."),
|
|
29057
|
+
readOnly,
|
|
29058
|
+
disabled,
|
|
29059
|
+
value: inputValue(mapping, definition.value),
|
|
29060
|
+
connected: mapping?.kind === "sources" && binding?.kind !== "variable",
|
|
29061
|
+
variableName: binding?.kind === "variable" ? binding.target : void 0,
|
|
29062
|
+
upstream: inputUpstreamSources({
|
|
29063
|
+
revision,
|
|
29064
|
+
sourceNodeIcons,
|
|
29065
|
+
selection,
|
|
29066
|
+
store,
|
|
29067
|
+
handleName: handle,
|
|
29068
|
+
port: definition,
|
|
29069
|
+
t,
|
|
29070
|
+
triggerDisplays
|
|
29071
|
+
}),
|
|
29072
|
+
variables,
|
|
29073
|
+
onValue: (value, deletion) => {
|
|
29074
|
+
store?.nodes.setInputValue(selection.id, handle, value, deletion);
|
|
29075
|
+
},
|
|
29076
|
+
onVariable: (name) => {
|
|
29077
|
+
store?.nodes.setInputVariable(selection.id, handle, name);
|
|
29078
|
+
},
|
|
29079
|
+
onReset: proxyBody && definition.value !== void 0 ? () => void store?.nodes.resetInputs(selection.id, [handle]) : void 0
|
|
29080
|
+
});
|
|
29081
|
+
return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), proxyBody ? /* @__PURE__ */ jsx(FieldTable, {
|
|
29082
|
+
standalone: true,
|
|
29083
|
+
layout: "values",
|
|
29084
|
+
typeColumn: false,
|
|
29085
|
+
columnHeadings: false,
|
|
29086
|
+
actionSlots: 2,
|
|
29087
|
+
children: input
|
|
29088
|
+
}) : input] }, handle);
|
|
29089
|
+
};
|
|
29090
|
+
const requestExecutor = task != null && "executor" in task && (task.executor.kind === "http-request" || task.executor.kind === "connector-proxy") ? task.executor : void 0;
|
|
29091
|
+
const requestParameters = requestExecutor != null && selection?.kind === "task" && ["query", "headers"].map((group) => /* @__PURE__ */ jsx(RequestParameterEditor, {
|
|
29092
|
+
group,
|
|
29093
|
+
parameters: requestExecutor[group],
|
|
29094
|
+
schema: proxy != null ? group === "query" ? connectorProxyQuerySchema : connectorProxyHeaderSchema : group === "query" ? httpQuerySchema : httpHeaderSchema,
|
|
29095
|
+
entries: Object.fromEntries(Object.entries(revision.inputMappings(selection.node)).map(([handle, mapping]) => {
|
|
29096
|
+
const source = mapping.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
29097
|
+
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
29098
|
+
return [handle, {
|
|
29099
|
+
value: inputValue(mapping, void 0),
|
|
29100
|
+
connected: mapping.kind === "sources" && binding?.kind !== "variable",
|
|
29101
|
+
variableName: binding?.kind === "variable" ? binding.target : void 0
|
|
29102
|
+
}];
|
|
29103
|
+
})),
|
|
29104
|
+
variables,
|
|
29105
|
+
disabled,
|
|
29106
|
+
readOnly,
|
|
29107
|
+
renderSource: (handleName, port) => inputUpstreamSources({
|
|
29108
|
+
revision,
|
|
29109
|
+
sourceNodeIcons,
|
|
29110
|
+
selection,
|
|
29111
|
+
store,
|
|
29112
|
+
handleName,
|
|
29113
|
+
port,
|
|
29114
|
+
t,
|
|
29115
|
+
triggerDisplays
|
|
29116
|
+
}),
|
|
29117
|
+
onEdit: (edit) => {
|
|
29118
|
+
store?.nodes.saveRequestParameters(selection.id, group, edit);
|
|
29119
|
+
}
|
|
29120
|
+
}, group));
|
|
28829
29121
|
const panel = /* @__PURE__ */ jsx(ScrollArea, {
|
|
28830
29122
|
className: "inspector-scroll",
|
|
28831
29123
|
tabIndex: -1,
|
|
@@ -28835,13 +29127,14 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28835
29127
|
children: [
|
|
28836
29128
|
selection?.kind === "trigger" && selection.trigger.kind === "webhook" && webhookDeployment != null && /* @__PURE__ */ jsx(WebhookDeployment, { ...webhookDeployment }, selection.id),
|
|
28837
29129
|
readOnly && connector != null && /* @__PURE__ */ jsx(SavedConnectionReference, {
|
|
28838
|
-
|
|
28839
|
-
connectionId: connector
|
|
29130
|
+
noSetup: connectorAction?.authenticated === false || connectorProviders?.[connector.action.split(".")[0]]?.noSetup,
|
|
29131
|
+
connectionId: proxy?.connectionId ?? connector?.connectionId
|
|
28840
29132
|
}),
|
|
28841
|
-
readOnly &&
|
|
28842
|
-
|
|
28843
|
-
connectionId:
|
|
29133
|
+
readOnly && proxy != null && /* @__PURE__ */ jsx(SavedConnectionReference, {
|
|
29134
|
+
noSetup: proxyProvider?.noSetup,
|
|
29135
|
+
connectionId: proxy.connectionId
|
|
28844
29136
|
}),
|
|
29137
|
+
readOnly && selection?.kind === "trigger" && (selection.trigger.kind === "poll" || selection.trigger.kind === "integration") && /* @__PURE__ */ jsx(SavedConnectionReference, { connectionId: selection.trigger.connectionId }),
|
|
28845
29138
|
!readOnly && triggers != null && selection?.kind == "trigger" && /* @__PURE__ */ jsx(TriggerConnection, {
|
|
28846
29139
|
activeConnections: triggerActiveConnections,
|
|
28847
29140
|
authorizationPending: triggerAuthorizationPending,
|
|
@@ -28853,17 +29146,17 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28853
29146
|
triggers,
|
|
28854
29147
|
onConfigureAccess: (providerId) => void triggers.connect(providerId)
|
|
28855
29148
|
}),
|
|
28856
|
-
!readOnly && connectors != null && connector != null && nodeId != null && connectorAction?.authenticated !== false && /* @__PURE__ */ jsx(ConnectorAccount, {
|
|
28857
|
-
|
|
29149
|
+
!readOnly && connectors != null && (connector != null || proxy != null) && nodeId != null && (proxy != null ? proxyProvider?.noSetup !== true : connectorAction?.authenticated !== false) && /* @__PURE__ */ jsx(ConnectorAccount, {
|
|
29150
|
+
resource: proxy != null ? proxyProvider : connectorAction,
|
|
28858
29151
|
actionError: connectorActionError,
|
|
28859
29152
|
accessError: connectorAccessError,
|
|
28860
|
-
actionId: connector.action,
|
|
28861
|
-
onConfigureAccess: () => void connectors.connect(connectorAction?.serviceId ?? connector.action.split(".")[0]),
|
|
29153
|
+
actionId: proxy?.providerId ?? connector.action,
|
|
29154
|
+
onConfigureAccess: () => void connectors.connect(proxy?.providerId ?? connectorAction?.serviceId ?? connector.action.split(".")[0]),
|
|
28862
29155
|
activeConnections: activeConnectorConnections,
|
|
28863
29156
|
authorizationPending: connectorAuthorizationPending,
|
|
28864
29157
|
connection: connectorConnection,
|
|
28865
29158
|
connectionError: connectorConnectionError,
|
|
28866
|
-
connectionId: connector
|
|
29159
|
+
connectionId: proxy?.connectionId ?? connector?.connectionId,
|
|
28867
29160
|
connectors,
|
|
28868
29161
|
disabled,
|
|
28869
29162
|
fieldIdPrefix: `task-${selection?.id}`,
|
|
@@ -28888,6 +29181,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28888
29181
|
isAgent && /* @__PURE__ */ jsx(AgentPrompt, {}),
|
|
28889
29182
|
selection?.kind === "task" && selection.module != null && /* @__PURE__ */ jsx(CodeTaskSection, {
|
|
28890
29183
|
readOnly,
|
|
29184
|
+
providers: connectorProviders,
|
|
28891
29185
|
connectorAccess,
|
|
28892
29186
|
connectorCandidates,
|
|
28893
29187
|
onConfigureAccess: onConfigureConnectorAccess == null ? void 0 : () => onConfigureConnectorAccess(),
|
|
@@ -28900,7 +29194,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28900
29194
|
store,
|
|
28901
29195
|
theme
|
|
28902
29196
|
}),
|
|
28903
|
-
selection?.kind === "trigger" && (selection.trigger.kind === "integration" || selection.trigger.kind === "poll") && (
|
|
29197
|
+
selection?.kind === "trigger" && (selection.trigger.kind === "integration" || selection.trigger.kind === "poll") && ([
|
|
28904
29198
|
"feishu.on_event",
|
|
28905
29199
|
"feishu_app_bot.on_event",
|
|
28906
29200
|
"slackbot.on_event",
|
|
@@ -28910,6 +29204,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28910
29204
|
"fireflies.on_meeting_ready",
|
|
28911
29205
|
"jira.on_issue_event"
|
|
28912
29206
|
].includes(selection.trigger.definition.key) ? /* @__PURE__ */ jsx(EventSourceTriggerConfig, {
|
|
29207
|
+
readOnly,
|
|
28913
29208
|
provider: selection.trigger.definition.provider === "slackbot" ? "slackbot" : selection.trigger.definition.provider === "intercom" ? "intercom" : selection.trigger.definition.provider === "sentry" ? "sentry" : selection.trigger.definition.provider === "zoom" ? "zoom" : selection.trigger.definition.provider === "fireflies" ? "fireflies" : selection.trigger.definition.provider === "jira" ? "jira" : "feishu_app_bot",
|
|
28914
29209
|
inputs: providerConfigInputs,
|
|
28915
29210
|
fieldLabels: providerDisplay?.configInputLabels,
|
|
@@ -28918,7 +29213,8 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28918
29213
|
connectionId: selection.trigger.connectionId,
|
|
28919
29214
|
disabled,
|
|
28920
29215
|
store
|
|
28921
|
-
}) :
|
|
29216
|
+
}) : selection.trigger.definition.key === "linear.on_issue_changed" ? /* @__PURE__ */ jsx(LinearTriggerConfig, {
|
|
29217
|
+
readOnly,
|
|
28922
29218
|
inputs: providerConfigInputs,
|
|
28923
29219
|
fieldLabels: providerDisplay?.configInputLabels,
|
|
28924
29220
|
config: selection.trigger.config,
|
|
@@ -28926,7 +29222,8 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
28926
29222
|
connectionId: selection.trigger.connectionId,
|
|
28927
29223
|
disabled,
|
|
28928
29224
|
store
|
|
28929
|
-
}) :
|
|
29225
|
+
}) : selection.trigger.definition.key === "tally.on_form_response" ? /* @__PURE__ */ jsx(TallyTriggerConfig, {
|
|
29226
|
+
readOnly,
|
|
28930
29227
|
inputs: providerConfigInputs,
|
|
28931
29228
|
fieldLabels: providerDisplay?.configInputLabels,
|
|
28932
29229
|
config: selection.trigger.config,
|
|
@@ -29061,74 +29358,8 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
29061
29358
|
isHttpRequest && task != null && "executor" in task && /* @__PURE__ */ jsx(HttpRequestSection, {
|
|
29062
29359
|
task,
|
|
29063
29360
|
disabled,
|
|
29064
|
-
input:
|
|
29065
|
-
|
|
29066
|
-
const definition = task.inputs.find((port) => "handle" in port && port.handle === handle);
|
|
29067
|
-
if (definition == null) return null;
|
|
29068
|
-
const mapping = revision.inputMappings(selection.node)[handle];
|
|
29069
|
-
const source = mapping?.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
29070
|
-
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
29071
|
-
return /* @__PURE__ */ jsxs(Field, { children: [/* @__PURE__ */ jsx(FieldLabel, { children: label }), /* @__PURE__ */ jsx(NodeInputValue, {
|
|
29072
|
-
embedded: true,
|
|
29073
|
-
definition,
|
|
29074
|
-
label,
|
|
29075
|
-
presentation: {
|
|
29076
|
-
compact: true,
|
|
29077
|
-
hideOptions: true
|
|
29078
|
-
},
|
|
29079
|
-
sourceOnly: handle.startsWith("auth."),
|
|
29080
|
-
readOnly,
|
|
29081
|
-
disabled,
|
|
29082
|
-
value: inputValue(mapping, definition.value),
|
|
29083
|
-
connected: mapping?.kind === "sources" && binding?.kind !== "variable",
|
|
29084
|
-
variableName: binding?.kind === "variable" ? binding.target : void 0,
|
|
29085
|
-
upstream: inputUpstreamSources({
|
|
29086
|
-
revision,
|
|
29087
|
-
sourceNodeIcons,
|
|
29088
|
-
selection,
|
|
29089
|
-
store,
|
|
29090
|
-
handleName: handle,
|
|
29091
|
-
t,
|
|
29092
|
-
triggerDisplays
|
|
29093
|
-
}),
|
|
29094
|
-
variables,
|
|
29095
|
-
onValue: (value, deletion) => {
|
|
29096
|
-
store?.nodes.setInputValue(selection.id, handle, value, deletion);
|
|
29097
|
-
},
|
|
29098
|
-
onVariable: (name) => {
|
|
29099
|
-
store?.nodes.setInputVariable(selection.id, handle, name);
|
|
29100
|
-
}
|
|
29101
|
-
})] }, handle);
|
|
29102
|
-
},
|
|
29103
|
-
parameters: selection?.kind === "task" && ["query", "headers"].map((group) => /* @__PURE__ */ jsx(HttpParameterEditor, {
|
|
29104
|
-
group,
|
|
29105
|
-
task,
|
|
29106
|
-
entries: Object.fromEntries(Object.entries(revision.inputMappings(selection.node)).map(([handle, mapping]) => {
|
|
29107
|
-
const source = mapping.kind === "sources" ? mapping.sources.find((item) => item.kind === "binding") : void 0;
|
|
29108
|
-
const binding = source?.kind === "binding" ? revision.binding(source.bindingId) : void 0;
|
|
29109
|
-
return [handle, {
|
|
29110
|
-
value: inputValue(mapping, void 0),
|
|
29111
|
-
connected: mapping.kind === "sources" && binding?.kind !== "variable",
|
|
29112
|
-
variableName: binding?.kind === "variable" ? binding.target : void 0
|
|
29113
|
-
}];
|
|
29114
|
-
})),
|
|
29115
|
-
variables,
|
|
29116
|
-
disabled,
|
|
29117
|
-
readOnly,
|
|
29118
|
-
renderSource: (handleName, port) => inputUpstreamSources({
|
|
29119
|
-
revision,
|
|
29120
|
-
sourceNodeIcons,
|
|
29121
|
-
selection,
|
|
29122
|
-
store,
|
|
29123
|
-
handleName,
|
|
29124
|
-
port,
|
|
29125
|
-
t,
|
|
29126
|
-
triggerDisplays
|
|
29127
|
-
}),
|
|
29128
|
-
onEdit: (edit) => {
|
|
29129
|
-
store?.nodes.saveHttpParameters(selection.id, group, edit);
|
|
29130
|
-
}
|
|
29131
|
-
}, group)),
|
|
29361
|
+
input: requestInput,
|
|
29362
|
+
parameters: requestParameters,
|
|
29132
29363
|
onSave: (before, value) => store?.nodes.saveTaskSettings(selection.id, {
|
|
29133
29364
|
kind: "http-request",
|
|
29134
29365
|
name: task.name,
|
|
@@ -29136,6 +29367,21 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
29136
29367
|
task: value
|
|
29137
29368
|
}) ?? Promise.resolve(false)
|
|
29138
29369
|
}, `http:${selection?.id}`),
|
|
29370
|
+
proxy != null && task != null && "executor" in task && /* @__PURE__ */ jsx(ConnectorProxySection, {
|
|
29371
|
+
task,
|
|
29372
|
+
disabled,
|
|
29373
|
+
readOnly,
|
|
29374
|
+
hasBody: selection?.kind === "task" && connectorProxyHasBody(revision.inputMappings(selection.node).body, task.inputs.find((port) => "handle" in port && port.handle === "body")?.value),
|
|
29375
|
+
input: requestInput,
|
|
29376
|
+
parameters: requestParameters,
|
|
29377
|
+
onClearBody: () => store?.nodes.setInputValue(selection.id, "body", void 0) ?? Promise.resolve(false),
|
|
29378
|
+
onSave: (before, value) => store?.nodes.saveTaskSettings(selection.id, {
|
|
29379
|
+
kind: "connector-proxy",
|
|
29380
|
+
name: task.name,
|
|
29381
|
+
before,
|
|
29382
|
+
task: value
|
|
29383
|
+
}) ?? Promise.resolve(false)
|
|
29384
|
+
}, `proxy:${selection?.id}`),
|
|
29139
29385
|
isOpenApi && task != null && "executor" in task && /* @__PURE__ */ jsx(OpenApiSection, {
|
|
29140
29386
|
task,
|
|
29141
29387
|
credentials: (onInvalidChange) => selection?.kind === "task" && task.inputs.filter((port) => "handle" in port && port.handle.startsWith("auth.")).map((definition) => {
|
|
@@ -29184,7 +29430,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
29184
29430
|
task: value
|
|
29185
29431
|
}) ?? Promise.resolve(false)
|
|
29186
29432
|
}, `openapi:${selection?.id}`),
|
|
29187
|
-
!isHttpRequest && !unconfiguredOpenApi && !unconfiguredWorkflow && (selection?.kind === "outputs" || selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
|
|
29433
|
+
!isHttpRequest && proxy == null && !unconfiguredOpenApi && !unconfiguredWorkflow && (selection?.kind === "outputs" || selection?.kind === "approval" || selection?.kind === "wait" || selection?.kind === "task") && (() => {
|
|
29188
29434
|
const definitions = selection.kind === "outputs" ? [...selection.node.outputDefs] : selection.kind === "task" ? [...selection.definition?.inputs ?? []] : [...selection.node.inputDefinitions];
|
|
29189
29435
|
const handles = new Set(definitions.flatMap((definition) => "handle" in definition ? [definition.handle] : []));
|
|
29190
29436
|
for (const handle of Object.keys(revision.inputMappings(selection.node))) if (!handles.has(handle) && !(selection.kind === "task" && selection.node.additionalInputs?.some((port) => port.handle === handle))) definitions.push({
|
|
@@ -29349,7 +29595,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
|
|
|
29349
29595
|
readOnly,
|
|
29350
29596
|
groups: true,
|
|
29351
29597
|
layout: "ports",
|
|
29352
|
-
title: t(isHttpRequest ? "httpRequest.responseOutputs" : "inspector.ports.outputsTitle"),
|
|
29598
|
+
title: t(isHttpRequest || proxy != null ? "httpRequest.responseOutputs" : "inspector.ports.outputsTitle"),
|
|
29353
29599
|
output: true,
|
|
29354
29600
|
values: presentDecisionOutputs(selection.definition, t),
|
|
29355
29601
|
disabled: disabled || !("moduleId" in selection.node.task || isAgent),
|
|
@@ -30453,6 +30699,882 @@ function PublicationActor({ actorId, store }) {
|
|
|
30453
30699
|
});
|
|
30454
30700
|
}
|
|
30455
30701
|
//#endregion
|
|
30702
|
+
//#region src/trigger/providers/fieldDescriptions.ts
|
|
30703
|
+
var driveChangesConfig = {
|
|
30704
|
+
driveId: "Shared drive ID. Leave empty to monitor the connected account.",
|
|
30705
|
+
includeCorpusRemovals: "Include the accessible file resource when an item leaves the change corpus.",
|
|
30706
|
+
includeItemsFromAllDrives: "Include items from My Drive and shared drives.",
|
|
30707
|
+
includeRemoved: "Include changes caused by deletion or loss of access.",
|
|
30708
|
+
pageSize: "Maximum number of changes read per page.",
|
|
30709
|
+
restrictToMyDrive: "Restrict changes to the My Drive hierarchy."
|
|
30710
|
+
};
|
|
30711
|
+
var englishTriggerFieldDescriptions = {
|
|
30712
|
+
"jira.on_issue_event": {
|
|
30713
|
+
configInputs: {
|
|
30714
|
+
sourceId: "Event source",
|
|
30715
|
+
eventTypes: "Events"
|
|
30716
|
+
},
|
|
30717
|
+
outputs: {
|
|
30718
|
+
event: "Event type",
|
|
30719
|
+
deliveryId: "Notification ID",
|
|
30720
|
+
cloudId: "Cloud site ID",
|
|
30721
|
+
issueId: "Issue ID",
|
|
30722
|
+
body: "Original event"
|
|
30723
|
+
}
|
|
30724
|
+
},
|
|
30725
|
+
"fireflies.on_meeting_ready": {
|
|
30726
|
+
configInputs: {
|
|
30727
|
+
sourceId: "Event source",
|
|
30728
|
+
eventTypes: "Events"
|
|
30729
|
+
},
|
|
30730
|
+
outputs: {
|
|
30731
|
+
event: "Event type",
|
|
30732
|
+
deliveryId: "Notification ID",
|
|
30733
|
+
accountId: "Account ID",
|
|
30734
|
+
meetingId: "Meeting / transcript ID",
|
|
30735
|
+
body: "Original object"
|
|
30736
|
+
}
|
|
30737
|
+
},
|
|
30738
|
+
"zoom.on_recording_ready": {
|
|
30739
|
+
configInputs: {
|
|
30740
|
+
sourceId: "Event source",
|
|
30741
|
+
eventTypes: "Events"
|
|
30742
|
+
},
|
|
30743
|
+
outputs: {
|
|
30744
|
+
event: "Event type",
|
|
30745
|
+
deliveryId: "Notification ID",
|
|
30746
|
+
accountId: "Zoom account ID",
|
|
30747
|
+
meetingUuid: "Meeting instance UUID",
|
|
30748
|
+
body: "Original object"
|
|
30749
|
+
}
|
|
30750
|
+
},
|
|
30751
|
+
"sentry.on_issue_alert": {
|
|
30752
|
+
configInputs: {
|
|
30753
|
+
sourceId: "Event source",
|
|
30754
|
+
eventTypes: "Events",
|
|
30755
|
+
projectIds: "Project IDs; empty includes all projects in the installation.",
|
|
30756
|
+
ruleNames: "Exact alert rule labels; empty includes all rules."
|
|
30757
|
+
},
|
|
30758
|
+
outputs: {
|
|
30759
|
+
event: "Event type",
|
|
30760
|
+
deliveryId: "Notification ID",
|
|
30761
|
+
organizationId: "Organization ID",
|
|
30762
|
+
issueId: "Issue ID",
|
|
30763
|
+
body: "Original object"
|
|
30764
|
+
}
|
|
30765
|
+
},
|
|
30766
|
+
"intercom.on_conversation_event": {
|
|
30767
|
+
configInputs: {
|
|
30768
|
+
sourceId: "Event source",
|
|
30769
|
+
eventTypes: "Events"
|
|
30770
|
+
},
|
|
30771
|
+
outputs: {
|
|
30772
|
+
event: "Event type",
|
|
30773
|
+
deliveryId: "Notification ID",
|
|
30774
|
+
workspaceId: "Workspace ID",
|
|
30775
|
+
objectId: "Conversation or ticket ID",
|
|
30776
|
+
body: "Original object"
|
|
30777
|
+
}
|
|
30778
|
+
},
|
|
30779
|
+
"slackbot.on_event": {
|
|
30780
|
+
configInputs: {
|
|
30781
|
+
sourceId: "Event source",
|
|
30782
|
+
eventTypes: "Events",
|
|
30783
|
+
channelIds: "Channel IDs; empty means all source channels."
|
|
30784
|
+
},
|
|
30785
|
+
outputs: {
|
|
30786
|
+
event: "Event type",
|
|
30787
|
+
deliveryId: "Event ID",
|
|
30788
|
+
appId: "Slack app ID",
|
|
30789
|
+
teamId: "Workspace ID",
|
|
30790
|
+
channel: "Conversation ID",
|
|
30791
|
+
user: "User ID",
|
|
30792
|
+
text: "Message text",
|
|
30793
|
+
ts: "Message timestamp",
|
|
30794
|
+
threadTs: "Parent thread timestamp, when present.",
|
|
30795
|
+
body: "Original Slack event"
|
|
30796
|
+
}
|
|
30797
|
+
},
|
|
30798
|
+
"asana.on_task_event": {
|
|
30799
|
+
configInputs: {
|
|
30800
|
+
projectId: "Project ID",
|
|
30801
|
+
eventTypes: "Events",
|
|
30802
|
+
customFieldId: "Custom field ID"
|
|
30803
|
+
},
|
|
30804
|
+
outputs: {
|
|
30805
|
+
projectId: "Project ID",
|
|
30806
|
+
events: "Matching events in this delivery."
|
|
30807
|
+
}
|
|
30808
|
+
},
|
|
30809
|
+
"calendly.on_booking_event": {
|
|
30810
|
+
configInputs: {
|
|
30811
|
+
scope: "Scope",
|
|
30812
|
+
eventTypes: "Events"
|
|
30813
|
+
},
|
|
30814
|
+
outputs: {
|
|
30815
|
+
event: "Business event type.",
|
|
30816
|
+
inviteeUri: "Invitee URI",
|
|
30817
|
+
createdAt: "Event timestamp.",
|
|
30818
|
+
body: "Original event data."
|
|
30819
|
+
}
|
|
30820
|
+
},
|
|
30821
|
+
"clickup.on_task_event": {
|
|
30822
|
+
configInputs: {
|
|
30823
|
+
workspaceId: "Workspace ID",
|
|
30824
|
+
listId: "List ID",
|
|
30825
|
+
eventTypes: "Events"
|
|
30826
|
+
},
|
|
30827
|
+
outputs: {
|
|
30828
|
+
event: "Business event type.",
|
|
30829
|
+
taskId: "Task ID",
|
|
30830
|
+
body: "Original event data."
|
|
30831
|
+
}
|
|
30832
|
+
},
|
|
30833
|
+
"pandadoc.on_document_event": {
|
|
30834
|
+
configInputs: { completedOnly: "Completed documents only" },
|
|
30835
|
+
outputs: { events: "Matching events in this delivery." }
|
|
30836
|
+
},
|
|
30837
|
+
"pipedrive.on_crm_event": {
|
|
30838
|
+
configInputs: { eventType: "Event" },
|
|
30839
|
+
outputs: {
|
|
30840
|
+
event: "Business event type.",
|
|
30841
|
+
deliveryId: "Delivery ID",
|
|
30842
|
+
objectId: "Object ID",
|
|
30843
|
+
body: "Original event data."
|
|
30844
|
+
}
|
|
30845
|
+
},
|
|
30846
|
+
"resend.on_email_event": {
|
|
30847
|
+
configInputs: { eventTypes: "Events" },
|
|
30848
|
+
outputs: {
|
|
30849
|
+
event: "Business event type.",
|
|
30850
|
+
deliveryId: "Delivery ID",
|
|
30851
|
+
emailId: "Email ID",
|
|
30852
|
+
createdAt: "Event timestamp.",
|
|
30853
|
+
body: "Original event data."
|
|
30854
|
+
}
|
|
30855
|
+
},
|
|
30856
|
+
"typeform.on_form_response": {
|
|
30857
|
+
configInputs: { formId: "Form ID" },
|
|
30858
|
+
outputs: { response: "Submission identity, time and original answers with stable field identifiers." }
|
|
30859
|
+
},
|
|
30860
|
+
"vercel.on_deployment_event": {
|
|
30861
|
+
configInputs: {
|
|
30862
|
+
teamId: "Team ID",
|
|
30863
|
+
projectId: "Project ID",
|
|
30864
|
+
environment: "Environment"
|
|
30865
|
+
},
|
|
30866
|
+
outputs: {
|
|
30867
|
+
event: "Business event type.",
|
|
30868
|
+
deliveryId: "Delivery ID",
|
|
30869
|
+
deploymentId: "Deployment ID",
|
|
30870
|
+
projectId: "Project ID",
|
|
30871
|
+
body: "Original event data."
|
|
30872
|
+
}
|
|
30873
|
+
},
|
|
30874
|
+
"tally.on_form_response": {
|
|
30875
|
+
configInputs: { formId: "Select a form accessible to this connection." },
|
|
30876
|
+
outputs: { response: "Submission identity, time, and fields, preserving field keys, types, values, options, and file metadata." }
|
|
30877
|
+
},
|
|
30878
|
+
"feishu_app_bot.on_event": {
|
|
30879
|
+
configInputs: {
|
|
30880
|
+
sourceId: "Event source that receives events for this trigger.",
|
|
30881
|
+
eventTypes: "Feishu event types that trigger a Run.",
|
|
30882
|
+
chatIds: "Chat IDs to receive events from. Leave empty to receive events from every chat available to the source.",
|
|
30883
|
+
resource: "Optional document, calendar, or approval resource to subscribe to."
|
|
30884
|
+
},
|
|
30885
|
+
outputs: {
|
|
30886
|
+
event: "Feishu event type.",
|
|
30887
|
+
deliveryId: "Unique delivery ID for this event.",
|
|
30888
|
+
appId: "ID of the Feishu application that received the event.",
|
|
30889
|
+
tenantKey: "Key of the Feishu tenant that produced the event.",
|
|
30890
|
+
occurredAt: "Time when the event occurred, when supplied by Feishu.",
|
|
30891
|
+
body: "Original Feishu event payload."
|
|
30892
|
+
}
|
|
30893
|
+
},
|
|
30894
|
+
"airtable.on_record_changed": {
|
|
30895
|
+
configInputs: {
|
|
30896
|
+
baseId: "ID of the Airtable base to monitor.",
|
|
30897
|
+
fields: "Fields to include in each returned record. Leave empty to include every field.",
|
|
30898
|
+
formula: "Airtable formula used to filter records. Leave empty to include every record.",
|
|
30899
|
+
maxRecordsPerPoll: "Maximum number of records processed per poll.",
|
|
30900
|
+
tableIdOrName: "ID or name of the Airtable table to monitor.",
|
|
30901
|
+
triggerField: "Date or time field used to detect created or updated records.",
|
|
30902
|
+
view: "Airtable view used to filter and order records. Leave empty to use the table default."
|
|
30903
|
+
},
|
|
30904
|
+
outputs: { events: "Records created or updated since the previous poll." }
|
|
30905
|
+
},
|
|
30906
|
+
"gmail.on_message_received": {
|
|
30907
|
+
configInputs: {
|
|
30908
|
+
includeDrafts: "Also trigger on draft messages.",
|
|
30909
|
+
includeSpamAndTrash: "Also trigger on messages in Spam and Trash.",
|
|
30910
|
+
labelNamesOrIds: "Only trigger on messages carrying all of these labels, referenced by name or ID.",
|
|
30911
|
+
maxMessagesPerPoll: "Maximum number of messages processed per poll.",
|
|
30912
|
+
readStatus: "Only trigger on read messages, unread messages, or both.",
|
|
30913
|
+
search: "Gmail search query that each message must match.",
|
|
30914
|
+
sender: "Only trigger on messages whose sender matches this address or name."
|
|
30915
|
+
},
|
|
30916
|
+
outputs: { events: "Messages received since the previous poll." }
|
|
30917
|
+
},
|
|
30918
|
+
"github.on_repo_event": {
|
|
30919
|
+
configInputs: {
|
|
30920
|
+
events: "GitHub webhook events that trigger a Run.",
|
|
30921
|
+
insecureSsl: "Allow GitHub to deliver webhooks without SSL certificate verification.",
|
|
30922
|
+
owner: "Owner of the GitHub repository.",
|
|
30923
|
+
repo: "Name of the GitHub repository."
|
|
30924
|
+
},
|
|
30925
|
+
outputs: {
|
|
30926
|
+
body: "Original GitHub webhook payload.",
|
|
30927
|
+
deliveryId: "Unique GitHub webhook delivery ID.",
|
|
30928
|
+
event: "GitHub webhook event name."
|
|
30929
|
+
}
|
|
30930
|
+
},
|
|
30931
|
+
"github.watch_pull_request": {
|
|
30932
|
+
configInputs: {
|
|
30933
|
+
owner: "Owner of the GitHub repository.",
|
|
30934
|
+
repo: "Name of the GitHub repository.",
|
|
30935
|
+
number: "Number of the pull request to watch."
|
|
30936
|
+
},
|
|
30937
|
+
outputs: {
|
|
30938
|
+
pullRequest: "Current pull request details after an observed change.",
|
|
30939
|
+
version: "Stable identifier for the observed pull request version."
|
|
30940
|
+
}
|
|
30941
|
+
},
|
|
30942
|
+
"gitlab.on_project_event": {
|
|
30943
|
+
configInputs: {
|
|
30944
|
+
events: "GitLab project events that trigger a Run.",
|
|
30945
|
+
insecureSsl: "Allow GitLab to deliver webhooks without SSL certificate verification.",
|
|
30946
|
+
project: "Numeric project ID or URL-encoded project path.",
|
|
30947
|
+
pushBranchFilter: "Branch or wildcard pattern used to filter push events. Leave empty to include every branch."
|
|
30948
|
+
},
|
|
30949
|
+
outputs: {
|
|
30950
|
+
body: "Original GitLab webhook payload.",
|
|
30951
|
+
deliveryId: "Unique ID generated for this webhook delivery.",
|
|
30952
|
+
event: "Normalized GitLab event name.",
|
|
30953
|
+
gitlabEvent: "Original GitLab event header value."
|
|
30954
|
+
}
|
|
30955
|
+
},
|
|
30956
|
+
"googlecalendar.on_event_changed": {
|
|
30957
|
+
configInputs: {
|
|
30958
|
+
calendarId: "ID of the Google Calendar to monitor.",
|
|
30959
|
+
changes: "Calendar event changes that trigger a Run.",
|
|
30960
|
+
matchTerm: "Text that must appear in the event summary, description, location, or attendees. Leave empty to match every event.",
|
|
30961
|
+
maxEventsPerPoll: "Maximum number of calendar events processed per poll."
|
|
30962
|
+
},
|
|
30963
|
+
outputs: { events: "Calendar events created, updated, or cancelled since the previous poll." }
|
|
30964
|
+
},
|
|
30965
|
+
"googledrive.changes_detected": {
|
|
30966
|
+
configInputs: driveChangesConfig,
|
|
30967
|
+
outputs: { events: "Google Drive changes available when the notification was received." }
|
|
30968
|
+
},
|
|
30969
|
+
"googledrive.watch_changes": {
|
|
30970
|
+
configInputs: driveChangesConfig,
|
|
30971
|
+
outputs: { events: "Google Drive changes observed by notifications or periodic scans." }
|
|
30972
|
+
},
|
|
30973
|
+
"googledrive.on_file_change": {
|
|
30974
|
+
configInputs: {
|
|
30975
|
+
changeType: "Whether created or updated items trigger a Run.",
|
|
30976
|
+
driveId: "Shared drive ID. Leave empty to use My Drive.",
|
|
30977
|
+
folderId: "ID of the Google Drive folder to monitor.",
|
|
30978
|
+
itemTypes: "Whether to monitor files, folders, or both.",
|
|
30979
|
+
maxFilesPerPoll: "Maximum number of changed items processed per poll.",
|
|
30980
|
+
mimeTypes: "Only trigger on these MIME types. Leave empty to include every MIME type.",
|
|
30981
|
+
namePrefix: "Only trigger on items whose names start with this text. Leave empty to include every name."
|
|
30982
|
+
},
|
|
30983
|
+
outputs: { events: "Files or folders created or updated since the previous poll." }
|
|
30984
|
+
},
|
|
30985
|
+
"googlesheets.on_row_added": {
|
|
30986
|
+
configInputs: {
|
|
30987
|
+
columnRange: "A1 column range to read, such as A:Z.",
|
|
30988
|
+
dateTimeRender: "How date and time values are returned.",
|
|
30989
|
+
firstDataRow: "First row containing data below the header.",
|
|
30990
|
+
headerRow: "Row whose cells become output field names.",
|
|
30991
|
+
maxRowsPerPoll: "Maximum number of new rows processed per poll.",
|
|
30992
|
+
sheet: "Name of the worksheet to monitor.",
|
|
30993
|
+
spreadsheetId: "ID of the Google Sheets spreadsheet.",
|
|
30994
|
+
valueRender: "How cell values are returned."
|
|
30995
|
+
},
|
|
30996
|
+
outputs: { events: "Rows appended since the previous poll." }
|
|
30997
|
+
},
|
|
30998
|
+
"linear.on_issue_changed": {
|
|
30999
|
+
configInputs: {
|
|
31000
|
+
teamId: "Linear Team UUID. Use Copy model UUID in Linear to find it.",
|
|
31001
|
+
stateIds: "Statuses from the selected Team. Leave empty for every status. Matches current status, not every transition into it."
|
|
31002
|
+
},
|
|
31003
|
+
outputs: { events: "Linear issues created or updated since the previous poll." }
|
|
31004
|
+
},
|
|
31005
|
+
"notion.on_database_page_event": {
|
|
31006
|
+
configInputs: {
|
|
31007
|
+
dataSourceId: "Data source ID within the database. Leave empty to use the primary data source.",
|
|
31008
|
+
databaseId: "ID of the Notion database to monitor.",
|
|
31009
|
+
events: "Page changes that trigger a Run.",
|
|
31010
|
+
includeProperties: "Include page properties in each output event.",
|
|
31011
|
+
maxItemsPerPoll: "Maximum number of changed pages processed per poll."
|
|
31012
|
+
},
|
|
31013
|
+
outputs: { events: "Database pages added or updated since the previous poll." }
|
|
31014
|
+
},
|
|
31015
|
+
"one_drive.on_item_changed": {
|
|
31016
|
+
configInputs: {
|
|
31017
|
+
events: "OneDrive item changes that trigger a Run.",
|
|
31018
|
+
itemId: "Only monitor this file or folder ID. Leave empty to monitor multiple items.",
|
|
31019
|
+
itemTypes: "Whether to monitor files, folders, or both.",
|
|
31020
|
+
maxItemsPerPoll: "Maximum number of changed items processed per poll.",
|
|
31021
|
+
parentFolderId: "Only monitor items in this parent folder. Leave empty to monitor the whole drive."
|
|
31022
|
+
},
|
|
31023
|
+
outputs: { events: "OneDrive items created, updated, or deleted since the previous poll." }
|
|
31024
|
+
},
|
|
31025
|
+
"outlook.on_message_received": {
|
|
31026
|
+
configInputs: {
|
|
31027
|
+
folder: "Well-known mail folder name, folder ID, or an empty value for the whole mailbox.",
|
|
31028
|
+
includeDrafts: "Also trigger on draft messages.",
|
|
31029
|
+
maxMessagesPerPoll: "Maximum number of messages processed per poll.",
|
|
31030
|
+
readStatus: "Only trigger on read messages, unread messages, or both.",
|
|
31031
|
+
senderAddress: "Exact sender address. Leave empty to allow any sender.",
|
|
31032
|
+
subjectContains: "Case-insensitive text that must appear in the message subject.",
|
|
31033
|
+
withAttachmentsOnly: "Only trigger on messages that have attachments."
|
|
31034
|
+
},
|
|
31035
|
+
outputs: { events: "Outlook messages received since the previous poll." }
|
|
31036
|
+
},
|
|
31037
|
+
"shopify.on_shop_event": {
|
|
31038
|
+
configInputs: { topics: "Shopify webhook topics that trigger a Run." },
|
|
31039
|
+
outputs: {
|
|
31040
|
+
apiVersion: "Shopify API version used for the webhook.",
|
|
31041
|
+
body: "Original Shopify webhook payload.",
|
|
31042
|
+
eventId: "Unique Shopify event ID.",
|
|
31043
|
+
shopDomain: "Domain of the Shopify shop that produced the event.",
|
|
31044
|
+
topic: "Shopify webhook topic.",
|
|
31045
|
+
triggeredAt: "Time when Shopify triggered the webhook.",
|
|
31046
|
+
webhookId: "ID of the Shopify webhook subscription."
|
|
31047
|
+
}
|
|
31048
|
+
},
|
|
31049
|
+
"slack.on_message_posted": {
|
|
31050
|
+
configInputs: {
|
|
31051
|
+
channelId: "Slack conversation ID to watch, such as C0122KQ70S7E.",
|
|
31052
|
+
fromUserIds: "Only trigger on messages from these Slack user IDs. Leave empty to allow any author.",
|
|
31053
|
+
ignoreUserIds: "Never trigger on messages from these Slack user IDs.",
|
|
31054
|
+
includeBotMessages: "Also trigger on messages posted by bots and apps.",
|
|
31055
|
+
includeSystemMessages: "Also trigger on Slack system notices.",
|
|
31056
|
+
maxMessagesPerPoll: "Maximum number of messages processed per poll.",
|
|
31057
|
+
textContains: "Only trigger when message text contains this string, ignoring case."
|
|
31058
|
+
},
|
|
31059
|
+
outputs: { events: "Slack messages posted since the previous poll." }
|
|
31060
|
+
},
|
|
31061
|
+
"stripe.on_event": {
|
|
31062
|
+
configInputs: {
|
|
31063
|
+
apiVersion: "Stripe API version used for webhook events. Leave empty to use the account default.",
|
|
31064
|
+
events: "Stripe event types that trigger a Run.",
|
|
31065
|
+
includeConnectedAccounts: "Also receive events from connected Stripe accounts."
|
|
31066
|
+
},
|
|
31067
|
+
outputs: {
|
|
31068
|
+
body: "Original Stripe event payload.",
|
|
31069
|
+
event: "Stripe event type.",
|
|
31070
|
+
eventId: "Unique Stripe event ID.",
|
|
31071
|
+
livemode: "Whether the event was created in live mode."
|
|
31072
|
+
}
|
|
31073
|
+
},
|
|
31074
|
+
"telegram.on_update": {
|
|
31075
|
+
configInputs: {
|
|
31076
|
+
chatIds: "Only accept updates from these numeric Telegram chat IDs. Leave empty to allow every chat.",
|
|
31077
|
+
dropPendingUpdates: "Discard updates queued before the webhook is created or resumed.",
|
|
31078
|
+
updates: "Telegram update types that trigger a Run. Use * for the Telegram default set.",
|
|
31079
|
+
userIds: "Only accept updates from these numeric Telegram user IDs. Leave empty to allow every user."
|
|
31080
|
+
},
|
|
31081
|
+
outputs: {
|
|
31082
|
+
body: "Original Telegram update payload.",
|
|
31083
|
+
deliveryId: "Unique ID generated for this Telegram update.",
|
|
31084
|
+
event: "Telegram update type."
|
|
31085
|
+
}
|
|
31086
|
+
},
|
|
31087
|
+
"woocommerce.on_store_event": {
|
|
31088
|
+
configInputs: {
|
|
31089
|
+
events: "WooCommerce store events that trigger a Run.",
|
|
31090
|
+
webhookName: "Name shown for the webhook in WooCommerce."
|
|
31091
|
+
},
|
|
31092
|
+
outputs: {
|
|
31093
|
+
body: "Original WooCommerce webhook payload.",
|
|
31094
|
+
deliveryId: "Unique WooCommerce webhook delivery ID.",
|
|
31095
|
+
event: "WooCommerce event action.",
|
|
31096
|
+
resource: "WooCommerce resource type.",
|
|
31097
|
+
source: "URL of the WooCommerce store that produced the event.",
|
|
31098
|
+
topic: "Full WooCommerce webhook topic.",
|
|
31099
|
+
webhookId: "ID of the WooCommerce webhook subscription."
|
|
31100
|
+
}
|
|
31101
|
+
},
|
|
31102
|
+
"zendesk.on_event": {
|
|
31103
|
+
configInputs: { events: "Zendesk event types that trigger a Run." },
|
|
31104
|
+
outputs: {
|
|
31105
|
+
body: "Original Zendesk event payload.",
|
|
31106
|
+
deliveryId: "Unique ID generated for this Zendesk event delivery.",
|
|
31107
|
+
event: "Zendesk event type.",
|
|
31108
|
+
subject: "Zendesk subject associated with the event."
|
|
31109
|
+
}
|
|
31110
|
+
}
|
|
31111
|
+
};
|
|
31112
|
+
//#endregion
|
|
31113
|
+
//#region src/trigger/providers/fieldLabels.ts
|
|
31114
|
+
var triggerConfigFieldLabels = {
|
|
31115
|
+
"en": {
|
|
31116
|
+
"jira.on_issue_event": { sourceId: "Event source" },
|
|
31117
|
+
"fireflies.on_meeting_ready": { sourceId: "Event source" },
|
|
31118
|
+
"zoom.on_recording_ready": { sourceId: "Event source" },
|
|
31119
|
+
"sentry.on_issue_alert": { sourceId: "Event source" },
|
|
31120
|
+
"intercom.on_conversation_event": { sourceId: "Event source" },
|
|
31121
|
+
"slackbot.on_event": { sourceId: "Event source" },
|
|
31122
|
+
"asana.on_task_event": { projectId: "Project ID" },
|
|
31123
|
+
"calendly.on_booking_event": {},
|
|
31124
|
+
"clickup.on_task_event": { workspaceId: "Workspace ID" },
|
|
31125
|
+
"pandadoc.on_document_event": {},
|
|
31126
|
+
"pipedrive.on_crm_event": {},
|
|
31127
|
+
"resend.on_email_event": {},
|
|
31128
|
+
"typeform.on_form_response": { formId: "Form ID" },
|
|
31129
|
+
"vercel.on_deployment_event": {
|
|
31130
|
+
teamId: "Team ID",
|
|
31131
|
+
projectId: "Project ID"
|
|
31132
|
+
},
|
|
31133
|
+
"tally.on_form_response": { formId: "Form" },
|
|
31134
|
+
"feishu_app_bot.on_event": {
|
|
31135
|
+
sourceId: "Event source",
|
|
31136
|
+
eventTypes: "Events to receive"
|
|
31137
|
+
},
|
|
31138
|
+
"airtable.on_record_changed": {
|
|
31139
|
+
baseId: "Base",
|
|
31140
|
+
tableIdOrName: "Table",
|
|
31141
|
+
triggerField: "Trigger field"
|
|
31142
|
+
},
|
|
31143
|
+
"github.on_repo_event": {
|
|
31144
|
+
events: "Events",
|
|
31145
|
+
owner: "Repository owner",
|
|
31146
|
+
repo: "Repository"
|
|
31147
|
+
},
|
|
31148
|
+
"github.watch_pull_request": {
|
|
31149
|
+
owner: "Repository owner",
|
|
31150
|
+
repo: "Repository",
|
|
31151
|
+
number: "Pull request number"
|
|
31152
|
+
},
|
|
31153
|
+
"gitlab.on_project_event": {
|
|
31154
|
+
events: "Events",
|
|
31155
|
+
project: "Project"
|
|
31156
|
+
},
|
|
31157
|
+
"googlecalendar.on_event_changed": { calendarId: "Calendar" },
|
|
31158
|
+
"googledrive.on_file_change": {
|
|
31159
|
+
changeType: "Change type",
|
|
31160
|
+
folderId: "Folder"
|
|
31161
|
+
},
|
|
31162
|
+
"googlesheets.on_row_added": {
|
|
31163
|
+
sheet: "Worksheet",
|
|
31164
|
+
spreadsheetId: "Spreadsheet"
|
|
31165
|
+
},
|
|
31166
|
+
"linear.on_issue_changed": { teamId: "Team" },
|
|
31167
|
+
"notion.on_database_page_event": { databaseId: "Database" },
|
|
31168
|
+
"shopify.on_shop_event": { topics: "Topics" },
|
|
31169
|
+
"slack.on_message_posted": { channelId: "Channel" },
|
|
31170
|
+
"stripe.on_event": { events: "Events" },
|
|
31171
|
+
"telegram.on_update": { updates: "Updates" },
|
|
31172
|
+
"woocommerce.on_store_event": { events: "Events" },
|
|
31173
|
+
"zendesk.on_event": { events: "Events" }
|
|
31174
|
+
},
|
|
31175
|
+
"zh-CN": {
|
|
31176
|
+
"jira.on_issue_event": { sourceId: "事件源" },
|
|
31177
|
+
"fireflies.on_meeting_ready": { sourceId: "事件源" },
|
|
31178
|
+
"zoom.on_recording_ready": { sourceId: "事件源" },
|
|
31179
|
+
"sentry.on_issue_alert": { sourceId: "事件源" },
|
|
31180
|
+
"intercom.on_conversation_event": { sourceId: "事件源" },
|
|
31181
|
+
"slackbot.on_event": { sourceId: "事件源" },
|
|
31182
|
+
"asana.on_task_event": { projectId: "项目 ID" },
|
|
31183
|
+
"calendly.on_booking_event": {},
|
|
31184
|
+
"clickup.on_task_event": { workspaceId: "工作区 ID" },
|
|
31185
|
+
"pandadoc.on_document_event": {},
|
|
31186
|
+
"pipedrive.on_crm_event": {},
|
|
31187
|
+
"resend.on_email_event": {},
|
|
31188
|
+
"typeform.on_form_response": { formId: "表单 ID" },
|
|
31189
|
+
"vercel.on_deployment_event": {
|
|
31190
|
+
teamId: "团队 ID",
|
|
31191
|
+
projectId: "项目 ID"
|
|
31192
|
+
},
|
|
31193
|
+
"tally.on_form_response": { formId: "表单" },
|
|
31194
|
+
"feishu_app_bot.on_event": {
|
|
31195
|
+
sourceId: "事件源",
|
|
31196
|
+
eventTypes: "接收的事件"
|
|
31197
|
+
},
|
|
31198
|
+
"airtable.on_record_changed": {
|
|
31199
|
+
baseId: "Base",
|
|
31200
|
+
tableIdOrName: "数据表",
|
|
31201
|
+
triggerField: "触发字段"
|
|
31202
|
+
},
|
|
31203
|
+
"github.on_repo_event": {
|
|
31204
|
+
events: "事件",
|
|
31205
|
+
owner: "仓库所有者",
|
|
31206
|
+
repo: "仓库"
|
|
31207
|
+
},
|
|
31208
|
+
"github.watch_pull_request": {
|
|
31209
|
+
owner: "仓库所有者",
|
|
31210
|
+
repo: "仓库",
|
|
31211
|
+
number: "拉取请求编号"
|
|
31212
|
+
},
|
|
31213
|
+
"gitlab.on_project_event": {
|
|
31214
|
+
events: "事件",
|
|
31215
|
+
project: "项目"
|
|
31216
|
+
},
|
|
31217
|
+
"googlecalendar.on_event_changed": { calendarId: "日历" },
|
|
31218
|
+
"googledrive.on_file_change": {
|
|
31219
|
+
changeType: "变更类型",
|
|
31220
|
+
folderId: "文件夹"
|
|
31221
|
+
},
|
|
31222
|
+
"googlesheets.on_row_added": {
|
|
31223
|
+
sheet: "工作表",
|
|
31224
|
+
spreadsheetId: "电子表格"
|
|
31225
|
+
},
|
|
31226
|
+
"linear.on_issue_changed": { teamId: "团队" },
|
|
31227
|
+
"notion.on_database_page_event": { databaseId: "数据库" },
|
|
31228
|
+
"shopify.on_shop_event": { topics: "主题" },
|
|
31229
|
+
"slack.on_message_posted": { channelId: "频道" },
|
|
31230
|
+
"stripe.on_event": { events: "事件" },
|
|
31231
|
+
"telegram.on_update": { updates: "更新类型" },
|
|
31232
|
+
"woocommerce.on_store_event": { events: "事件" },
|
|
31233
|
+
"zendesk.on_event": { events: "事件" }
|
|
31234
|
+
},
|
|
31235
|
+
"zh-TW": {
|
|
31236
|
+
"jira.on_issue_event": { sourceId: "事件源" },
|
|
31237
|
+
"fireflies.on_meeting_ready": { sourceId: "事件源" },
|
|
31238
|
+
"zoom.on_recording_ready": { sourceId: "事件源" },
|
|
31239
|
+
"sentry.on_issue_alert": { sourceId: "事件源" },
|
|
31240
|
+
"intercom.on_conversation_event": { sourceId: "事件源" },
|
|
31241
|
+
"slackbot.on_event": { sourceId: "事件源" },
|
|
31242
|
+
"asana.on_task_event": { projectId: "專案 ID" },
|
|
31243
|
+
"calendly.on_booking_event": {},
|
|
31244
|
+
"clickup.on_task_event": { workspaceId: "工作區 ID" },
|
|
31245
|
+
"pandadoc.on_document_event": {},
|
|
31246
|
+
"pipedrive.on_crm_event": {},
|
|
31247
|
+
"resend.on_email_event": {},
|
|
31248
|
+
"typeform.on_form_response": { formId: "表單 ID" },
|
|
31249
|
+
"vercel.on_deployment_event": {
|
|
31250
|
+
teamId: "團隊 ID",
|
|
31251
|
+
projectId: "專案 ID"
|
|
31252
|
+
},
|
|
31253
|
+
"tally.on_form_response": { formId: "表單" },
|
|
31254
|
+
"feishu_app_bot.on_event": {
|
|
31255
|
+
sourceId: "事件來源",
|
|
31256
|
+
eventTypes: "接收的事件"
|
|
31257
|
+
},
|
|
31258
|
+
"airtable.on_record_changed": {
|
|
31259
|
+
baseId: "Base",
|
|
31260
|
+
tableIdOrName: "資料表",
|
|
31261
|
+
triggerField: "觸發欄位"
|
|
31262
|
+
},
|
|
31263
|
+
"github.on_repo_event": {
|
|
31264
|
+
events: "事件",
|
|
31265
|
+
owner: "儲存庫擁有者",
|
|
31266
|
+
repo: "儲存庫"
|
|
31267
|
+
},
|
|
31268
|
+
"github.watch_pull_request": {
|
|
31269
|
+
owner: "儲存庫擁有者",
|
|
31270
|
+
repo: "儲存庫",
|
|
31271
|
+
number: "提取要求編號"
|
|
31272
|
+
},
|
|
31273
|
+
"gitlab.on_project_event": {
|
|
31274
|
+
events: "事件",
|
|
31275
|
+
project: "專案"
|
|
31276
|
+
},
|
|
31277
|
+
"googlecalendar.on_event_changed": { calendarId: "日曆" },
|
|
31278
|
+
"googledrive.on_file_change": {
|
|
31279
|
+
changeType: "變更類型",
|
|
31280
|
+
folderId: "資料夾"
|
|
31281
|
+
},
|
|
31282
|
+
"googlesheets.on_row_added": {
|
|
31283
|
+
sheet: "工作表",
|
|
31284
|
+
spreadsheetId: "試算表"
|
|
31285
|
+
},
|
|
31286
|
+
"linear.on_issue_changed": { teamId: "團隊" },
|
|
31287
|
+
"notion.on_database_page_event": { databaseId: "資料庫" },
|
|
31288
|
+
"shopify.on_shop_event": { topics: "主題" },
|
|
31289
|
+
"slack.on_message_posted": { channelId: "頻道" },
|
|
31290
|
+
"stripe.on_event": { events: "事件" },
|
|
31291
|
+
"telegram.on_update": { updates: "更新類型" },
|
|
31292
|
+
"woocommerce.on_store_event": { events: "事件" },
|
|
31293
|
+
"zendesk.on_event": { events: "事件" }
|
|
31294
|
+
},
|
|
31295
|
+
"ja": {
|
|
31296
|
+
"jira.on_issue_event": { sourceId: "イベントソース" },
|
|
31297
|
+
"fireflies.on_meeting_ready": { sourceId: "イベントソース" },
|
|
31298
|
+
"zoom.on_recording_ready": { sourceId: "イベントソース" },
|
|
31299
|
+
"sentry.on_issue_alert": { sourceId: "イベントソース" },
|
|
31300
|
+
"intercom.on_conversation_event": { sourceId: "イベントソース" },
|
|
31301
|
+
"slackbot.on_event": { sourceId: "イベントソース" },
|
|
31302
|
+
"asana.on_task_event": { projectId: "プロジェクト ID" },
|
|
31303
|
+
"calendly.on_booking_event": {},
|
|
31304
|
+
"clickup.on_task_event": { workspaceId: "ワークスペース ID" },
|
|
31305
|
+
"pandadoc.on_document_event": {},
|
|
31306
|
+
"pipedrive.on_crm_event": {},
|
|
31307
|
+
"resend.on_email_event": {},
|
|
31308
|
+
"typeform.on_form_response": { formId: "フォーム ID" },
|
|
31309
|
+
"vercel.on_deployment_event": {
|
|
31310
|
+
teamId: "チーム ID",
|
|
31311
|
+
projectId: "プロジェクト ID"
|
|
31312
|
+
},
|
|
31313
|
+
"tally.on_form_response": { formId: "フォーム" },
|
|
31314
|
+
"feishu_app_bot.on_event": {
|
|
31315
|
+
sourceId: "イベントソース",
|
|
31316
|
+
eventTypes: "受信するイベント"
|
|
31317
|
+
},
|
|
31318
|
+
"airtable.on_record_changed": {
|
|
31319
|
+
baseId: "ベース",
|
|
31320
|
+
tableIdOrName: "テーブル",
|
|
31321
|
+
triggerField: "トリガーフィールド"
|
|
31322
|
+
},
|
|
31323
|
+
"github.on_repo_event": {
|
|
31324
|
+
events: "イベント",
|
|
31325
|
+
owner: "リポジトリの所有者",
|
|
31326
|
+
repo: "リポジトリ"
|
|
31327
|
+
},
|
|
31328
|
+
"github.watch_pull_request": {
|
|
31329
|
+
owner: "リポジトリの所有者",
|
|
31330
|
+
repo: "リポジトリ",
|
|
31331
|
+
number: "プルリクエスト番号"
|
|
31332
|
+
},
|
|
31333
|
+
"gitlab.on_project_event": {
|
|
31334
|
+
events: "イベント",
|
|
31335
|
+
project: "プロジェクト"
|
|
31336
|
+
},
|
|
31337
|
+
"googlecalendar.on_event_changed": { calendarId: "カレンダー" },
|
|
31338
|
+
"googledrive.on_file_change": {
|
|
31339
|
+
changeType: "変更の種類",
|
|
31340
|
+
folderId: "フォルダー"
|
|
31341
|
+
},
|
|
31342
|
+
"googlesheets.on_row_added": {
|
|
31343
|
+
sheet: "シート",
|
|
31344
|
+
spreadsheetId: "スプレッドシート"
|
|
31345
|
+
},
|
|
31346
|
+
"linear.on_issue_changed": { teamId: "チーム" },
|
|
31347
|
+
"notion.on_database_page_event": { databaseId: "データベース" },
|
|
31348
|
+
"shopify.on_shop_event": { topics: "トピック" },
|
|
31349
|
+
"slack.on_message_posted": { channelId: "チャンネル" },
|
|
31350
|
+
"stripe.on_event": { events: "イベント" },
|
|
31351
|
+
"telegram.on_update": { updates: "更新の種類" },
|
|
31352
|
+
"woocommerce.on_store_event": { events: "イベント" },
|
|
31353
|
+
"zendesk.on_event": { events: "イベント" }
|
|
31354
|
+
},
|
|
31355
|
+
"ko": {
|
|
31356
|
+
"jira.on_issue_event": { sourceId: "이벤트 소스" },
|
|
31357
|
+
"fireflies.on_meeting_ready": { sourceId: "이벤트 소스" },
|
|
31358
|
+
"zoom.on_recording_ready": { sourceId: "이벤트 소스" },
|
|
31359
|
+
"sentry.on_issue_alert": { sourceId: "이벤트 소스" },
|
|
31360
|
+
"intercom.on_conversation_event": { sourceId: "이벤트 소스" },
|
|
31361
|
+
"slackbot.on_event": { sourceId: "이벤트 소스" },
|
|
31362
|
+
"asana.on_task_event": { projectId: "프로젝트 ID" },
|
|
31363
|
+
"calendly.on_booking_event": {},
|
|
31364
|
+
"clickup.on_task_event": { workspaceId: "워크스페이스 ID" },
|
|
31365
|
+
"pandadoc.on_document_event": {},
|
|
31366
|
+
"pipedrive.on_crm_event": {},
|
|
31367
|
+
"resend.on_email_event": {},
|
|
31368
|
+
"typeform.on_form_response": { formId: "양식 ID" },
|
|
31369
|
+
"vercel.on_deployment_event": {
|
|
31370
|
+
teamId: "팀 ID",
|
|
31371
|
+
projectId: "프로젝트 ID"
|
|
31372
|
+
},
|
|
31373
|
+
"tally.on_form_response": { formId: "양식" },
|
|
31374
|
+
"feishu_app_bot.on_event": {
|
|
31375
|
+
sourceId: "이벤트 소스",
|
|
31376
|
+
eventTypes: "수신할 이벤트"
|
|
31377
|
+
},
|
|
31378
|
+
"airtable.on_record_changed": {
|
|
31379
|
+
baseId: "베이스",
|
|
31380
|
+
tableIdOrName: "테이블",
|
|
31381
|
+
triggerField: "트리거 필드"
|
|
31382
|
+
},
|
|
31383
|
+
"github.on_repo_event": {
|
|
31384
|
+
events: "이벤트",
|
|
31385
|
+
owner: "저장소 소유자",
|
|
31386
|
+
repo: "저장소"
|
|
31387
|
+
},
|
|
31388
|
+
"github.watch_pull_request": {
|
|
31389
|
+
owner: "저장소 소유자",
|
|
31390
|
+
repo: "저장소",
|
|
31391
|
+
number: "풀 리퀘스트 번호"
|
|
31392
|
+
},
|
|
31393
|
+
"gitlab.on_project_event": {
|
|
31394
|
+
events: "이벤트",
|
|
31395
|
+
project: "프로젝트"
|
|
31396
|
+
},
|
|
31397
|
+
"googlecalendar.on_event_changed": { calendarId: "캘린더" },
|
|
31398
|
+
"googledrive.on_file_change": {
|
|
31399
|
+
changeType: "변경 유형",
|
|
31400
|
+
folderId: "폴더"
|
|
31401
|
+
},
|
|
31402
|
+
"googlesheets.on_row_added": {
|
|
31403
|
+
sheet: "시트",
|
|
31404
|
+
spreadsheetId: "스프레드시트"
|
|
31405
|
+
},
|
|
31406
|
+
"linear.on_issue_changed": { teamId: "팀" },
|
|
31407
|
+
"notion.on_database_page_event": { databaseId: "데이터베이스" },
|
|
31408
|
+
"shopify.on_shop_event": { topics: "주제" },
|
|
31409
|
+
"slack.on_message_posted": { channelId: "채널" },
|
|
31410
|
+
"stripe.on_event": { events: "이벤트" },
|
|
31411
|
+
"telegram.on_update": { updates: "업데이트 유형" },
|
|
31412
|
+
"woocommerce.on_store_event": { events: "이벤트" },
|
|
31413
|
+
"zendesk.on_event": { events: "이벤트" }
|
|
31414
|
+
},
|
|
31415
|
+
"ru": {
|
|
31416
|
+
"jira.on_issue_event": { sourceId: "Источник событий" },
|
|
31417
|
+
"fireflies.on_meeting_ready": { sourceId: "Источник событий" },
|
|
31418
|
+
"zoom.on_recording_ready": { sourceId: "Источник событий" },
|
|
31419
|
+
"sentry.on_issue_alert": { sourceId: "Источник событий" },
|
|
31420
|
+
"intercom.on_conversation_event": { sourceId: "Источник событий" },
|
|
31421
|
+
"slackbot.on_event": { sourceId: "Источник событий" },
|
|
31422
|
+
"asana.on_task_event": { projectId: "ID проекта" },
|
|
31423
|
+
"calendly.on_booking_event": {},
|
|
31424
|
+
"clickup.on_task_event": { workspaceId: "ID рабочего пространства" },
|
|
31425
|
+
"pandadoc.on_document_event": {},
|
|
31426
|
+
"pipedrive.on_crm_event": {},
|
|
31427
|
+
"resend.on_email_event": {},
|
|
31428
|
+
"typeform.on_form_response": { formId: "ID формы" },
|
|
31429
|
+
"vercel.on_deployment_event": {
|
|
31430
|
+
teamId: "ID команды",
|
|
31431
|
+
projectId: "ID проекта"
|
|
31432
|
+
},
|
|
31433
|
+
"tally.on_form_response": { formId: "Форма" },
|
|
31434
|
+
"feishu_app_bot.on_event": {
|
|
31435
|
+
sourceId: "Источник событий",
|
|
31436
|
+
eventTypes: "Принимаемые события"
|
|
31437
|
+
},
|
|
31438
|
+
"airtable.on_record_changed": {
|
|
31439
|
+
baseId: "База",
|
|
31440
|
+
tableIdOrName: "Таблица",
|
|
31441
|
+
triggerField: "Поле триггера"
|
|
31442
|
+
},
|
|
31443
|
+
"github.on_repo_event": {
|
|
31444
|
+
events: "События",
|
|
31445
|
+
owner: "Владелец репозитория",
|
|
31446
|
+
repo: "Репозиторий"
|
|
31447
|
+
},
|
|
31448
|
+
"github.watch_pull_request": {
|
|
31449
|
+
owner: "Владелец репозитория",
|
|
31450
|
+
repo: "Репозиторий",
|
|
31451
|
+
number: "Номер запроса на слияние"
|
|
31452
|
+
},
|
|
31453
|
+
"gitlab.on_project_event": {
|
|
31454
|
+
events: "События",
|
|
31455
|
+
project: "Проект"
|
|
31456
|
+
},
|
|
31457
|
+
"googlecalendar.on_event_changed": { calendarId: "Календарь" },
|
|
31458
|
+
"googledrive.on_file_change": {
|
|
31459
|
+
changeType: "Тип изменения",
|
|
31460
|
+
folderId: "Папка"
|
|
31461
|
+
},
|
|
31462
|
+
"googlesheets.on_row_added": {
|
|
31463
|
+
sheet: "Лист",
|
|
31464
|
+
spreadsheetId: "Таблица"
|
|
31465
|
+
},
|
|
31466
|
+
"linear.on_issue_changed": { teamId: "Команда" },
|
|
31467
|
+
"notion.on_database_page_event": { databaseId: "База данных" },
|
|
31468
|
+
"shopify.on_shop_event": { topics: "Темы" },
|
|
31469
|
+
"slack.on_message_posted": { channelId: "Канал" },
|
|
31470
|
+
"stripe.on_event": { events: "События" },
|
|
31471
|
+
"telegram.on_update": { updates: "Типы обновлений" },
|
|
31472
|
+
"woocommerce.on_store_event": { events: "События" },
|
|
31473
|
+
"zendesk.on_event": { events: "События" }
|
|
31474
|
+
},
|
|
31475
|
+
"fr": {
|
|
31476
|
+
"jira.on_issue_event": { sourceId: "Source d’événements" },
|
|
31477
|
+
"fireflies.on_meeting_ready": { sourceId: "Source d’événements" },
|
|
31478
|
+
"zoom.on_recording_ready": { sourceId: "Source d’événements" },
|
|
31479
|
+
"sentry.on_issue_alert": { sourceId: "Source d’événements" },
|
|
31480
|
+
"intercom.on_conversation_event": { sourceId: "Source d’événements" },
|
|
31481
|
+
"slackbot.on_event": { sourceId: "Source d’événements" },
|
|
31482
|
+
"asana.on_task_event": { projectId: "ID du projet" },
|
|
31483
|
+
"calendly.on_booking_event": {},
|
|
31484
|
+
"clickup.on_task_event": { workspaceId: "ID de l’espace de travail" },
|
|
31485
|
+
"pandadoc.on_document_event": {},
|
|
31486
|
+
"pipedrive.on_crm_event": {},
|
|
31487
|
+
"resend.on_email_event": {},
|
|
31488
|
+
"typeform.on_form_response": { formId: "ID du formulaire" },
|
|
31489
|
+
"vercel.on_deployment_event": {
|
|
31490
|
+
teamId: "ID de l’équipe",
|
|
31491
|
+
projectId: "ID du projet"
|
|
31492
|
+
},
|
|
31493
|
+
"tally.on_form_response": { formId: "Formulaire" },
|
|
31494
|
+
"feishu_app_bot.on_event": {
|
|
31495
|
+
sourceId: "Source d’événements",
|
|
31496
|
+
eventTypes: "Événements à recevoir"
|
|
31497
|
+
},
|
|
31498
|
+
"airtable.on_record_changed": {
|
|
31499
|
+
baseId: "Base",
|
|
31500
|
+
tableIdOrName: "Table",
|
|
31501
|
+
triggerField: "Champ déclencheur"
|
|
31502
|
+
},
|
|
31503
|
+
"github.on_repo_event": {
|
|
31504
|
+
events: "Événements",
|
|
31505
|
+
owner: "Propriétaire du dépôt",
|
|
31506
|
+
repo: "Dépôt"
|
|
31507
|
+
},
|
|
31508
|
+
"github.watch_pull_request": {
|
|
31509
|
+
owner: "Propriétaire du dépôt",
|
|
31510
|
+
repo: "Dépôt",
|
|
31511
|
+
number: "Numéro de la demande de tirage"
|
|
31512
|
+
},
|
|
31513
|
+
"gitlab.on_project_event": {
|
|
31514
|
+
events: "Événements",
|
|
31515
|
+
project: "Projet"
|
|
31516
|
+
},
|
|
31517
|
+
"googlecalendar.on_event_changed": { calendarId: "Agenda" },
|
|
31518
|
+
"googledrive.on_file_change": {
|
|
31519
|
+
changeType: "Type de modification",
|
|
31520
|
+
folderId: "Dossier"
|
|
31521
|
+
},
|
|
31522
|
+
"googlesheets.on_row_added": {
|
|
31523
|
+
sheet: "Feuille",
|
|
31524
|
+
spreadsheetId: "Feuille de calcul"
|
|
31525
|
+
},
|
|
31526
|
+
"linear.on_issue_changed": { teamId: "Équipe" },
|
|
31527
|
+
"notion.on_database_page_event": { databaseId: "Base de données" },
|
|
31528
|
+
"shopify.on_shop_event": { topics: "Sujets" },
|
|
31529
|
+
"slack.on_message_posted": { channelId: "Canal" },
|
|
31530
|
+
"stripe.on_event": { events: "Événements" },
|
|
31531
|
+
"telegram.on_update": { updates: "Types de mise à jour" },
|
|
31532
|
+
"woocommerce.on_store_event": { events: "Événements" },
|
|
31533
|
+
"zendesk.on_event": { events: "Événements" }
|
|
31534
|
+
}
|
|
31535
|
+
};
|
|
31536
|
+
//#endregion
|
|
31537
|
+
//#region src/trigger/providers/localization.ts
|
|
31538
|
+
var loaders = {
|
|
31539
|
+
"zh-CN": () => import("./zh-CN-Dg_xSGde.js"),
|
|
31540
|
+
"zh-TW": () => import("./zh-TW-oxuLwsV0.js"),
|
|
31541
|
+
"ja": () => import("./ja-CxQBHr2J.js"),
|
|
31542
|
+
"ko": () => import("./ko-D1Exiv1h.js"),
|
|
31543
|
+
"ru": () => import("./ru-BzLZv0B7.js"),
|
|
31544
|
+
"fr": () => import("./fr-CNTSedYU.js")
|
|
31545
|
+
};
|
|
31546
|
+
var cached = /* @__PURE__ */ new Map();
|
|
31547
|
+
var english = Promise.resolve({});
|
|
31548
|
+
function loadTriggerTranslations(locale) {
|
|
31549
|
+
if (locale == "en") return english;
|
|
31550
|
+
const existing = cached.get(locale);
|
|
31551
|
+
if (existing != null) return existing;
|
|
31552
|
+
const request = loaders[locale]().then((module) => module.default);
|
|
31553
|
+
cached.set(locale, request);
|
|
31554
|
+
request.catch(() => {
|
|
31555
|
+
if (cached.get(locale) == request) cached.delete(locale);
|
|
31556
|
+
});
|
|
31557
|
+
return request;
|
|
31558
|
+
}
|
|
31559
|
+
async function localizeTrigger(definition, locale) {
|
|
31560
|
+
const copy = (await loadTriggerTranslations(locale))[definition.key];
|
|
31561
|
+
const englishFields = englishTriggerFieldDescriptions[definition.key];
|
|
31562
|
+
return {
|
|
31563
|
+
configInputs: fieldDescriptions(definition.configInputs, copy?.configInputs, englishFields?.configInputs),
|
|
31564
|
+
configInputLabels: triggerConfigFieldLabels[locale][definition.key] ?? {},
|
|
31565
|
+
displayName: copy?.displayName ?? definition.displayName,
|
|
31566
|
+
description: copy?.description ?? definition.description,
|
|
31567
|
+
outputs: fieldDescriptions(definition.outputs, copy?.outputs, englishFields?.outputs)
|
|
31568
|
+
};
|
|
31569
|
+
}
|
|
31570
|
+
function fieldDescriptions(fields, translations, fallback) {
|
|
31571
|
+
return Object.fromEntries(fields.flatMap((field) => {
|
|
31572
|
+
if (!("handle" in field)) return [];
|
|
31573
|
+
const description = translations?.[field.handle] ?? fallback?.[field.handle] ?? field.description;
|
|
31574
|
+
return description == null ? [] : [[field.handle, description]];
|
|
31575
|
+
}));
|
|
31576
|
+
}
|
|
31577
|
+
//#endregion
|
|
30456
31578
|
//#region src/workbench/browser/runtime/editor/revisionCanvasSession.ts
|
|
30457
31579
|
/** Layout restoration deliberately preserves the current viewport and other graphs. */
|
|
30458
31580
|
function changeRevisionCanvasSession(session, graphId, change) {
|
|
@@ -30501,13 +31623,32 @@ function changeRevisionCanvasSession(session, graphId, change) {
|
|
|
30501
31623
|
function RevisionCanvas({ draft, presentation, theme, interactiveMode$, defaultInteractiveMode, defaultDirection, defaultMiniMapExpanded, defaultInspectorOpen = false, defaultSelectedNodeIds, nodesDraggable = true, layoutMotion, label, background = "striped", showHeader = true }) {
|
|
30502
31624
|
const root = useRef(null);
|
|
30503
31625
|
const t = useTranslate();
|
|
30504
|
-
const language = useLang();
|
|
31626
|
+
const language = resolveUiLanguage([useLang()]);
|
|
30505
31627
|
const revision = useMemo(() => revisionView(draft), [draft]);
|
|
30506
31628
|
const graphId = "flow";
|
|
30507
31629
|
const [sessions, setSessions] = useState({});
|
|
30508
31630
|
const [inspectorOpen, setInspectorOpen] = useState(defaultInspectorOpen);
|
|
30509
31631
|
const [focus, setFocus] = useState();
|
|
30510
31632
|
const [catalog, setCatalog] = useState();
|
|
31633
|
+
const [triggerCopy, setTriggerCopy] = useState();
|
|
31634
|
+
useEffect(() => {
|
|
31635
|
+
const definitions = Object.values(revision.graph().nodes).flatMap((node) => node.kind == "integration" || node.kind == "poll" ? [node.definition] : []);
|
|
31636
|
+
if (definitions.length === 0) return;
|
|
31637
|
+
let active = true;
|
|
31638
|
+
Promise.all(definitions.map(async (definition) => [definition.key, await localizeTrigger(definition, language)])).then((entries) => {
|
|
31639
|
+
if (active) setTriggerCopy({
|
|
31640
|
+
revision,
|
|
31641
|
+
language,
|
|
31642
|
+
display: Object.fromEntries(entries)
|
|
31643
|
+
});
|
|
31644
|
+
}, (error) => {
|
|
31645
|
+
if (active) console.warn("Could not load Preview Trigger translations.", error);
|
|
31646
|
+
});
|
|
31647
|
+
return () => {
|
|
31648
|
+
active = false;
|
|
31649
|
+
};
|
|
31650
|
+
}, [revision, language]);
|
|
31651
|
+
const triggerDisplays = triggerCopy?.revision === revision && triggerCopy.language === language ? triggerCopy.display : void 0;
|
|
30511
31652
|
const needsProviders = revision.connectorProviderIds.size > 0;
|
|
30512
31653
|
useEffect(() => {
|
|
30513
31654
|
if (!needsProviders) return;
|
|
@@ -30655,7 +31796,8 @@ function RevisionCanvas({ draft, presentation, theme, interactiveMode$, defaultI
|
|
|
30655
31796
|
revision,
|
|
30656
31797
|
selection,
|
|
30657
31798
|
theme,
|
|
30658
|
-
connectorProviders: providerMetadata
|
|
31799
|
+
connectorProviders: providerMetadata,
|
|
31800
|
+
triggerDisplays
|
|
30659
31801
|
}, `${graphId}:${selection.id}`) : comment?.kind === "comment" ? /* @__PURE__ */ jsx(CommentInspector, {
|
|
30660
31802
|
title: comment.title,
|
|
30661
31803
|
content: comment.content ?? "",
|
|
@@ -34862,9 +36004,10 @@ var NodeInspectorContainer = memo(function NodeInspectorContainer({ onAddWorkflo
|
|
|
34862
36004
|
const variableNamesLoading = useVal(store.$.variableNamesLoading);
|
|
34863
36005
|
const connectorSetupPending = useVal(store.$.connectorSetupPending);
|
|
34864
36006
|
const connectorAction = useVal(store.connectors.$.selectedAction);
|
|
36007
|
+
const connectorProvider = useVal(store.connectors.$.selectedProvider);
|
|
34865
36008
|
const accessState = useVal(store.connectorAccess.$);
|
|
34866
36009
|
const connectorAccess = accessState.access;
|
|
34867
|
-
const providerId = connectorAction?.authenticated ? connectorAction.serviceId : void 0;
|
|
36010
|
+
const providerId = connectorProvider != null && !connectorProvider.noSetup ? connectorProvider.serviceId : connectorAction?.authenticated ? connectorAction.serviceId : void 0;
|
|
34868
36011
|
const triggerId = selection?.kind == "trigger" && (selection.trigger.kind == "poll" || selection.trigger.kind == "integration") ? selection.trigger.definition.key : void 0;
|
|
34869
36012
|
const triggerProviderId = selection?.kind == "trigger" && (selection.trigger.kind == "poll" || selection.trigger.kind == "integration") ? selection.trigger.definition.provider : void 0;
|
|
34870
36013
|
useEffect(() => {
|
|
@@ -34884,7 +36027,7 @@ var NodeInspectorContainer = memo(function NodeInspectorContainer({ onAddWorkflo
|
|
|
34884
36027
|
store
|
|
34885
36028
|
]);
|
|
34886
36029
|
const triggerCandidates = triggerProviderId == null ? void 0 : store.connectorAccess.allowedTriggerCandidates(triggerProviderId, triggerId);
|
|
34887
|
-
const allowedCandidates = (providerId == null ? void 0 : accessState.candidates[providerId]?.candidates)?.filter((candidate) => candidate.permissions == null || candidate.permissions.allActions || candidate.permissions.actionIds.includes(connectorAction.actionId));
|
|
36030
|
+
const allowedCandidates = (providerId == null ? void 0 : accessState.candidates[providerId]?.candidates)?.filter((candidate) => candidate.permissions == null || (connectorProvider != null ? candidate.permissions.proxy : candidate.permissions.allActions || candidate.permissions.actionIds.includes(connectorAction.actionId)));
|
|
34888
36031
|
const connectorActionError = useVal(store.connectors.$.selectedActionError);
|
|
34889
36032
|
const connectorActionLoading = useVal(store.connectors.$.actionLoading);
|
|
34890
36033
|
const connectorAuthorizationPending = useVal(store.connectors.$.selectedAuthorizationPending);
|
|
@@ -34927,6 +36070,7 @@ var NodeInspectorContainer = memo(function NodeInspectorContainer({ onAddWorkflo
|
|
|
34927
36070
|
}
|
|
34928
36071
|
},
|
|
34929
36072
|
connectorAction,
|
|
36073
|
+
connectorProvider,
|
|
34930
36074
|
connectorAccess,
|
|
34931
36075
|
connectorCandidates: accessState.candidates,
|
|
34932
36076
|
connectorAccessError: accessError,
|
|
@@ -34992,7 +36136,7 @@ function FlowEditor({ portalRoot, navigationIsland, onRun, onRunStarted, onClose
|
|
|
34992
36136
|
const { ignoredNodeIds, onIgnoreNodes } = useIgnoredNodes(flowId ?? "");
|
|
34993
36137
|
const renderPng = useCallback(async (options) => {
|
|
34994
36138
|
const model = store.$.designer.value;
|
|
34995
|
-
const { flowToPng } = await import("./exportPng-
|
|
36139
|
+
const { flowToPng } = await import("./exportPng-CLZKdNzR.js");
|
|
34996
36140
|
return flowToPng(model, language, {
|
|
34997
36141
|
...options,
|
|
34998
36142
|
ignoredNodeIds
|