@oomol-lab/open-flow 0.1.0-beta.52 → 0.1.0-beta.53

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.
@@ -590,14 +590,19 @@ function accessPermissions(value) {
590
590
  exact(source, [
591
591
  "actionIds",
592
592
  "allActions",
593
+ "triggerIds",
594
+ "allTriggers",
593
595
  "configured",
594
596
  "proxy"
595
597
  ]);
596
- if (!Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
598
+ if (!Array.isArray(source.triggerIds) || typeof source.allTriggers != "boolean" || !Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
597
599
  const actionIds = source.actionIds.map(string);
598
- if (new Set(actionIds).size != actionIds.length || source.allActions != (actionIds.length == 0) || source.proxy != (source.allActions && !source.configured)) return invalidResponse();
600
+ const triggerIds = source.triggerIds.map(string);
601
+ if (new Set(actionIds).size != actionIds.length || source.allActions && actionIds.length != 0 || new Set(triggerIds).size != triggerIds.length || source.allTriggers && triggerIds.length != 0 || source.proxy && (!source.allActions || !source.allTriggers || source.configured)) return invalidResponse();
599
602
  return {
600
603
  actionIds,
604
+ triggerIds,
605
+ allTriggers: source.allTriggers,
601
606
  allActions: source.allActions,
602
607
  configured: source.configured,
603
608
  proxy: source.proxy
@@ -13456,7 +13461,9 @@ var resources$1 = {
13456
13461
  "dynamicCodeReferences": "All Code nodes in this Flow, including Subflows, share these connections. Node connection selections do not grant Code access.",
13457
13462
  "noAccountSelected": "No account selected",
13458
13463
  "removeAuthorization": "Remove authorization",
13459
- "saving": "Saving…"
13464
+ "saving": "Saving…",
13465
+ "permissionAllTriggers": "All Triggers",
13466
+ "permissionTriggers": "Triggers: {{triggers}}"
13460
13467
  },
13461
13468
  common: {
13462
13469
  "cancel": "Cancel",
@@ -14861,7 +14868,9 @@ var resources$1 = {
14861
14868
  "dynamicCodeReferences": "此工作流中的所有 Code 节点(包括子流程)共享这些连接。其他节点选择连接不会自动允许 Code 使用。",
14862
14869
  "noAccountSelected": "未选择账号",
14863
14870
  "removeAuthorization": "移除授权",
14864
- "saving": "保存中…"
14871
+ "saving": "保存中…",
14872
+ "permissionAllTriggers": "全部触发器",
14873
+ "permissionTriggers": "触发器:{{triggers}}"
14865
14874
  },
14866
14875
  common: {
14867
14876
  "cancel": "取消",
@@ -16266,7 +16275,9 @@ var resources$1 = {
16266
16275
  "dynamicCodeReferences": "此 Flow 中的所有 Code 節點(包括子流程)共用這些連線。其他節點選擇連線不會自動允許 Code 使用。",
16267
16276
  "noAccountSelected": "未選擇帳號",
16268
16277
  "removeAuthorization": "移除授權",
16269
- "saving": "儲存中…"
16278
+ "saving": "儲存中…",
16279
+ "permissionAllTriggers": "全部觸發器",
16280
+ "permissionTriggers": "觸發器:{{triggers}}"
16270
16281
  },
16271
16282
  common: {
16272
16283
  "cancel": "取消",
@@ -17671,7 +17682,9 @@ var resources$1 = {
17671
17682
  "dynamicCodeReferences": "サブフローを含む、この Flow のすべての Code ノードで接続を共有します。他のノードで選択した接続は、Code に自動で許可されません。",
17672
17683
  "noAccountSelected": "アカウント未選択",
17673
17684
  "removeAuthorization": "承認を削除",
17674
- "saving": "保存中…"
17685
+ "saving": "保存中…",
17686
+ "permissionAllTriggers": "すべてのトリガー",
17687
+ "permissionTriggers": "トリガー: {{triggers}}"
17675
17688
  },
17676
17689
  common: {
17677
17690
  "cancel": "キャンセル",
@@ -18864,7 +18877,9 @@ var resources$1 = {
18864
18877
  "dynamicCodeReferences": "하위 흐름을 포함한 이 Flow의 모든 Code 노드가 이 연결을 공유합니다. 다른 노드에서 연결을 선택해도 Code 사용이 허용되지는 않습니다.",
18865
18878
  "noAccountSelected": "선택한 계정 없음",
18866
18879
  "removeAuthorization": "권한 제거",
18867
- "saving": "저장 중…"
18880
+ "saving": "저장 중…",
18881
+ "permissionAllTriggers": "모든 트리거",
18882
+ "permissionTriggers": "트리거: {{triggers}}"
18868
18883
  },
18869
18884
  common: {
18870
18885
  "cancel": "취소",
@@ -20057,7 +20072,9 @@ var resources$1 = {
20057
20072
  "dynamicCodeReferences": "Все узлы Code этого Flow, включая подпотоки, используют общий список подключений. Выбор подключения в другом узле не даёт Code доступ к нему.",
20058
20073
  "noAccountSelected": "Аккаунт не выбран",
20059
20074
  "removeAuthorization": "Удалить авторизацию",
20060
- "saving": "Сохранение…"
20075
+ "saving": "Сохранение…",
20076
+ "permissionAllTriggers": "Все триггеры",
20077
+ "permissionTriggers": "Триггеры: {{triggers}}"
20061
20078
  },
20062
20079
  common: {
20063
20080
  "cancel": "Отмена",
@@ -21109,7 +21126,9 @@ var resources$1 = {
21109
21126
  "dynamicCodeReferences": "Tous les nœuds Code de ce Flow, y compris les sous-flux, partagent ces connexions. Les connexions sélectionnées par les autres nœuds ne donnent pas accès au Code.",
21110
21127
  "noAccountSelected": "Aucun compte sélectionné",
21111
21128
  "removeAuthorization": "Retirer l’autorisation",
21112
- "saving": "Enregistrement…"
21129
+ "saving": "Enregistrement…",
21130
+ "permissionAllTriggers": "Tous les déclencheurs",
21131
+ "permissionTriggers": "Déclencheurs : {{triggers}}"
21113
21132
  },
21114
21133
  common: {
21115
21134
  "cancel": "Annuler",
@@ -27767,6 +27786,7 @@ function connectionUsage(document) {
27767
27786
  };
27768
27787
  if (node.kind == "poll" || node.kind == "integration") uses.push({
27769
27788
  kind: "trigger",
27789
+ triggerId: node.definition.key,
27770
27790
  providerId: node.definition.provider,
27771
27791
  connectionId: node.connectionId,
27772
27792
  nodeId,
@@ -1,5 +1,5 @@
1
1
  import { i as __require, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
2
- import { $ as useIconifyCollectionLoader, $t as InputGroup, A as calendarDate, An as resolutionOutputPorts, B as mapSource, Bn as inputValue, Bt as followWorkbenchLink, C as editorGroups, Cn as EventSourceSetup, D as isUnconstrainedSchema, E as getDefaultValue, Fn as triggerConfigValue, Ft as securityOptions, G as resourceValue, Gt as PopoverPanelContent, Ht as Popover, I as indexAddNodeOptions, In as triggerConfigValues, It as selectOperation, J as triggerNodeIcon, Jn as Checkbox, Jt as NativeScrollArea, K as designerGraph, Kt as PopoverTitle, L as feishuResourceKind, Ln as variableInputCompatible, Lt as serverAddress, M as datePickerValue, Mt as object, N as isDateFormat, Nn as triggerOutputDefinitions, Nt as openApiFieldIssues, O as typeOfSchema, On as decodeResultList, Pn as isJsonObject, Pt as openApiTask, Q as IconifyProvider, Qt as useTriggerFocusGuards, R as supportsFeishuChatFilter, Rt as servers, S as editorComponent, Sn as FeishuEventPicker, T as valueForEditor, U as observeResource, Ut as PopoverContent, Vt as Switch, W as resourceData, Wt as PopoverDescription, X as providerIcon, Xt as VirtualScrollArea, Y as actionSummary, Yn as IconThemeContext, Yt as ScrollArea, Z as ContentIcon, Zt as Z$2, _n as ko_default$1, an as EmptyHeader, bn as en_default$1, ct as diagnosticMessage, dn as createI18n$1, en as InputGroupAddon, et as useIconifyData, fn as uiLocales, ft as connectionCatalog, gn as ru_default$1, hn as zh_CN_default$1, in as EmptyDescription, it as revisionView, j as datePickerChange, jn as sourceOutputLabel, jt as listOperations, k as calendarChange, ln as SourceForm, lt as diagnosticNodeId, mn as zh_TW_default$1, n as agentTool, nn as Empty, nt as canCancelRun, on as EmptyMedia, pn as waitBranchDescription, q as semanticNodeIcon, qn as controlErrorCode, qt as PopoverTrigger, rn as EmptyContent, rt as hasRunFilter, sn as EmptyTitle, tn as InputGroupInput, un as SourceSelect, ut as schemaMismatchMessage, vn as ja_default$1, w as schemaForEditor, wn as errorNotice, x as defaultValueEditorSchema, xn as I18n, yn as fr_default$1, zt as IdTooltip } from "./flowChanges-DtraMpva.js";
2
+ import { $ as useIconifyCollectionLoader, $t as InputGroup, A as calendarDate, An as resolutionOutputPorts, B as mapSource, Bn as inputValue, Bt as followWorkbenchLink, C as editorGroups, Cn as EventSourceSetup, D as isUnconstrainedSchema, E as getDefaultValue, Fn as triggerConfigValue, Ft as securityOptions, G as resourceValue, Gt as PopoverPanelContent, Ht as Popover, I as indexAddNodeOptions, In as triggerConfigValues, It as selectOperation, J as triggerNodeIcon, Jn as Checkbox, Jt as NativeScrollArea, K as designerGraph, Kt as PopoverTitle, L as feishuResourceKind, Ln as variableInputCompatible, Lt as serverAddress, M as datePickerValue, Mt as object, N as isDateFormat, Nn as triggerOutputDefinitions, Nt as openApiFieldIssues, O as typeOfSchema, On as decodeResultList, Pn as isJsonObject, Pt as openApiTask, Q as IconifyProvider, Qt as useTriggerFocusGuards, R as supportsFeishuChatFilter, Rt as servers, S as editorComponent, Sn as FeishuEventPicker, T as valueForEditor, U as observeResource, Ut as PopoverContent, Vt as Switch, W as resourceData, Wt as PopoverDescription, X as providerIcon, Xt as VirtualScrollArea, Y as actionSummary, Yn as IconThemeContext, Yt as ScrollArea, Z as ContentIcon, Zt as Z$2, _n as ko_default$1, an as EmptyHeader, bn as en_default$1, ct as diagnosticMessage, dn as createI18n$1, en as InputGroupAddon, et as useIconifyData, fn as uiLocales, ft as connectionCatalog, gn as ru_default$1, hn as zh_CN_default$1, in as EmptyDescription, it as revisionView, j as datePickerChange, jn as sourceOutputLabel, jt as listOperations, k as calendarChange, ln as SourceForm, lt as diagnosticNodeId, mn as zh_TW_default$1, n as agentTool, nn as Empty, nt as canCancelRun, on as EmptyMedia, pn as waitBranchDescription, q as semanticNodeIcon, qn as controlErrorCode, qt as PopoverTrigger, rn as EmptyContent, rt as hasRunFilter, sn as EmptyTitle, tn as InputGroupInput, un as SourceSelect, ut as schemaMismatchMessage, vn as ja_default$1, w as schemaForEditor, wn as errorNotice, x as defaultValueEditorSchema, xn as I18n, yn as fr_default$1, zt as IdTooltip } from "./flowChanges-CcscgZsW.js";
3
3
  import { a as derive, c as strictEqual, i as compute, l as val, n as attachSetter, r as combine, s as readonlyVal } from "./dist-bO8nvHFH.js";
4
4
  import { a as useVal, i as useTranslate, n as useI18n, r as useLang, t as I18nProvider } from "./main-BPABKzwN.js";
5
5
  import { $r as useRefWithInit, $t as useFocus$1, A as nodeNameIssue, An as Label, At as scrollIntoViewIfNeeded, Bn as getGridCellIndexOfCorner, Br as EMPTY_ARRAY$1, Bt as inertValue, C as FieldError, Cn as ReactStore, Cr as triggerPress, Dn as require_builtin_esm_external_require_react, Dt as VERTICAL_KEYS, En as require_with_selector, Et as MODIFIER_KEYS, Fr as buttonVariants, Ft as InternalBackdrop, G as webhookSupportsBody, Gn as isIndexOutOfListBounds, Gr as useButton, Gt as useOpenInteractionType, H as valueType, Hn as getGridNavigatedIndex, Ht as popupStateMapping, Ir as cn$1, It as useAnchorPositioning, Jn as activeElement, Jr as formatErrorMessage, Jt as useRole, K as dequal, Kn as isListIndexDisabled, Kr as CompositeRootContext, Kt as safePolygon, L as nodeInputMappings, Lr as cva, Lt as adaptiveOrigin, Mt as useAnchoredPopupScrollLock, Nn as useTimeout, Nr as useControlled, Nt as usePositioner, On as createSelector, Or as useBaseUiId, Ot as VERTICAL_KEYS_WITH_EXTRA_KEYS, P as comparisonIssue, Pr as Button$1, Pt as getDisabledMountTransitionStyles, Qn as ownerDocument, Qr as useStableCallback, Qt as useHoverFloatingInteraction, R as operandHandle, Rn as createGridCellMap, Rr as clsx, Rt as useDirection, S as FieldDescription, Sn as addEventListener, St as COMPOSITE_KEYS, T as FieldLabel, Tn as fastComponentRef, Tt as HORIZONTAL_KEYS_WITH_EXTRA_KEYS, U as decodeRevisionContent, Un as getMaxListIndex, Ur as warn, Ut as pressableTriggerOpenStateMapping, V as unaryOperator, Vn as getGridCellIndices, Vr as EMPTY_OBJECT, Vt as getPseudoElementBounds, W as webhookMethods, Wn as getMinListIndex, Wr as useMergedRefs, Wt as triggerOpenStateMapping, Xn as getTarget, Xr as useIsoLayoutEffect, Xt as useInteractions, Yn as contains, Yr as mergeProps, Yt as useListNavigation, Zn as isMac$1, Zr as SafeReact, Zt as useHoverReferenceInteraction, _ as TooltipPortal, _n as FloatingPortal, _t as ARROW_DOWN, a as DialogDescription, an as useOpenStateTransitions, ar as useAnimationsFinished, b as Spinner, bn as POPUP_COLLISION_AVOIDANCE, br as siblingOpen, bt as ARROW_RIGHT, c as DialogTitle, cn as useDismiss, ct as SelectContent, d as TooltipContent, dn as FloatingNode, dr as cancelOpen, dt as SelectSeparator, ei as getParentNode, en as useSyncedFloatingRootContext, er as ChevronDown, f as TooltipProvider, fn as FloatingTree, ft as SelectTrigger, g as TooltipPositioner, gn as FloatingTreeStore, gr as itemPress, gt as ALL_KEYS, h as TooltipPopup, hn as useFloatingTree, hr as imperativeAction, ht as useCompositeListItem, i as DialogContent, in as useImplicitActiveTrigger, ir as useOpenChangeComplete, it as string, jn as Input$1, jt as useToolbarRootContext, kn as useOnFirstRender, kr as useId$1, kt as isNativeInput, l as DialogTrigger, ln as useClick, lt as SelectGroup, m as TooltipArrow, mn as useFloatingParentNodeId, mt as Separator, n as Dialog, ni as isLastTraversableNode, nn as popupStoreSelectors, nr as createLucideIcon, on as useTriggerDataForwarding, or as TransitionStatusDataAttributes, ot as Select$1, p as TooltipTrigger, pn as useFloatingNodeId, pt as SelectValue, qn as stopEvent$1, qr as useCompositeRootContext, qt as useTypeahead, rn as PopupTriggerMap, rr as useTransitionStatus, sn as useTriggerRegistration, sr as transitionStatusMapping, st as SelectChevron, t as Icon, ti as isHTMLElement, tn as createInitialPopupStoreState, tr as Check, u as Tooltip, un as FloatingFocusManager, ur as createChangeEventDetails, ut as SelectItem, v as TooltipTrigger$1, vr as none$1, vt as ARROW_KEYS, w as FieldGroup, wn as fastComponent, wt as HORIZONTAL_KEYS, x as Field, xn as FocusGuard, xt as ARROW_UP, y as TooltipRoot, yn as DROPDOWN_COLLISION_AVOIDANCE, yt as ARROW_LEFT, z as operatorsForType, zn as findNonDisabledListIndex, zr as useRenderElement, zt as CompositeList } from "./icons-0s-Q_3lp.js";
@@ -3446,11 +3446,13 @@ function connectorAccessPermissionLabel(candidate, t) {
3446
3446
  const prefix = `${candidate.providerId}.`;
3447
3447
  const actions = permissions.actionIds.map((actionId) => actionId.startsWith(prefix) ? actionId.slice(prefix.length) : actionId);
3448
3448
  const shown = actions.slice(0, 3).join(", ");
3449
+ const label = permissions.allActions ? t("connectorAccess.permissionAllActions") : actions.length > 3 ? t("connectorAccess.permissionActionsMore", {
3450
+ actions: shown,
3451
+ count: actions.length - 3
3452
+ }) : t("connectorAccess.permissionActions", { actions: shown });
3449
3453
  return [
3450
- permissions.allActions ? t("connectorAccess.permissionAllActions") : actions.length > 3 ? t("connectorAccess.permissionActionsMore", {
3451
- actions: shown,
3452
- count: actions.length - 3
3453
- }) : t("connectorAccess.permissionActions", { actions: shown }),
3454
+ permissions.allActions || actions.length > 0 ? label : void 0,
3455
+ permissions.allTriggers ? t("connectorAccess.permissionAllTriggers") : permissions.triggerIds.length > 0 ? t("connectorAccess.permissionTriggers", { triggers: permissions.triggerIds.map((id) => id.startsWith(prefix) ? id.slice(prefix.length) : id).join(", ") }) : void 0,
3454
3456
  permissions.proxy ? t("connectorAccess.permissionProxy") : void 0,
3455
3457
  permissions.configured ? t("connectorAccess.permissionConfigured") : void 0
3456
3458
  ].filter(Boolean).join(" · ");
@@ -56532,6 +56534,7 @@ var NodeInspectorContainer = memo(function NodeInspectorContainer({ store, focus
56532
56534
  const accessState = useVal(store.connectorAccess.$);
56533
56535
  const connectorAccess = accessState.access;
56534
56536
  const providerId = connectorAction?.authenticated ? connectorAction.serviceId : void 0;
56537
+ const triggerId = selection?.kind == "trigger" && (selection.trigger.kind == "poll" || selection.trigger.kind == "integration") ? selection.trigger.definition.key : void 0;
56535
56538
  const triggerProviderId = selection?.kind == "trigger" && (selection.trigger.kind == "poll" || selection.trigger.kind == "integration") ? selection.trigger.definition.provider : void 0;
56536
56539
  useEffect(() => {
56537
56540
  if (connectorAccess?.mode == "selectable") {
@@ -56549,7 +56552,7 @@ var NodeInspectorContainer = memo(function NodeInspectorContainer({ store, focus
56549
56552
  selection,
56550
56553
  store
56551
56554
  ]);
56552
- const triggerCandidates = triggerProviderId == null ? void 0 : accessState.candidates[triggerProviderId]?.candidates.filter((candidate) => candidate.permissions == null || candidate.permissions.proxy);
56555
+ const triggerCandidates = triggerProviderId == null ? void 0 : store.connectorAccess.allowedTriggerCandidates(triggerProviderId, triggerId);
56553
56556
  const allowedCandidates = (providerId == null ? void 0 : accessState.candidates[providerId]?.candidates)?.filter((candidate) => candidate.permissions == null || candidate.permissions.allActions || candidate.permissions.actionIds.includes(connectorAction.actionId));
56554
56557
  const accessError = providerId != null && connectorAccess?.mode == "selectable" && allowedCandidates?.length == 0 ? t("connectorAccess.noAvailablePermissions") : void 0;
56555
56558
  const connectorActionError = useVal(store.connectors.$.selectedActionError);
@@ -47781,6 +47781,7 @@ function connectionUsage$7(document) {
47781
47781
  };
47782
47782
  if (node.kind == "poll" || node.kind == "integration") uses.push({
47783
47783
  kind: "trigger",
47784
+ triggerId: node.definition.key,
47784
47785
  providerId: node.definition.provider,
47785
47786
  connectionId: node.connectionId,
47786
47787
  nodeId,
@@ -101853,7 +101854,9 @@ var resources = {
101853
101854
  "dynamicCodeReferences": "All Code nodes in this Flow, including Subflows, share these connections. Node connection selections do not grant Code access.",
101854
101855
  "noAccountSelected": "No account selected",
101855
101856
  "removeAuthorization": "Remove authorization",
101856
- "saving": "Saving…"
101857
+ "saving": "Saving…",
101858
+ "permissionAllTriggers": "All Triggers",
101859
+ "permissionTriggers": "Triggers: {{triggers}}"
101857
101860
  },
101858
101861
  common: {
101859
101862
  "cancel": "Cancel",
@@ -103258,7 +103261,9 @@ var resources = {
103258
103261
  "dynamicCodeReferences": "此工作流中的所有 Code 节点(包括子流程)共享这些连接。其他节点选择连接不会自动允许 Code 使用。",
103259
103262
  "noAccountSelected": "未选择账号",
103260
103263
  "removeAuthorization": "移除授权",
103261
- "saving": "保存中…"
103264
+ "saving": "保存中…",
103265
+ "permissionAllTriggers": "全部触发器",
103266
+ "permissionTriggers": "触发器:{{triggers}}"
103262
103267
  },
103263
103268
  common: {
103264
103269
  "cancel": "取消",
@@ -104663,7 +104668,9 @@ var resources = {
104663
104668
  "dynamicCodeReferences": "此 Flow 中的所有 Code 節點(包括子流程)共用這些連線。其他節點選擇連線不會自動允許 Code 使用。",
104664
104669
  "noAccountSelected": "未選擇帳號",
104665
104670
  "removeAuthorization": "移除授權",
104666
- "saving": "儲存中…"
104671
+ "saving": "儲存中…",
104672
+ "permissionAllTriggers": "全部觸發器",
104673
+ "permissionTriggers": "觸發器:{{triggers}}"
104667
104674
  },
104668
104675
  common: {
104669
104676
  "cancel": "取消",
@@ -106068,7 +106075,9 @@ var resources = {
106068
106075
  "dynamicCodeReferences": "サブフローを含む、この Flow のすべての Code ノードで接続を共有します。他のノードで選択した接続は、Code に自動で許可されません。",
106069
106076
  "noAccountSelected": "アカウント未選択",
106070
106077
  "removeAuthorization": "承認を削除",
106071
- "saving": "保存中…"
106078
+ "saving": "保存中…",
106079
+ "permissionAllTriggers": "すべてのトリガー",
106080
+ "permissionTriggers": "トリガー: {{triggers}}"
106072
106081
  },
106073
106082
  common: {
106074
106083
  "cancel": "キャンセル",
@@ -107261,7 +107270,9 @@ var resources = {
107261
107270
  "dynamicCodeReferences": "하위 흐름을 포함한 이 Flow의 모든 Code 노드가 이 연결을 공유합니다. 다른 노드에서 연결을 선택해도 Code 사용이 허용되지는 않습니다.",
107262
107271
  "noAccountSelected": "선택한 계정 없음",
107263
107272
  "removeAuthorization": "권한 제거",
107264
- "saving": "저장 중…"
107273
+ "saving": "저장 중…",
107274
+ "permissionAllTriggers": "모든 트리거",
107275
+ "permissionTriggers": "트리거: {{triggers}}"
107265
107276
  },
107266
107277
  common: {
107267
107278
  "cancel": "취소",
@@ -108454,7 +108465,9 @@ var resources = {
108454
108465
  "dynamicCodeReferences": "Все узлы Code этого Flow, включая подпотоки, используют общий список подключений. Выбор подключения в другом узле не даёт Code доступ к нему.",
108455
108466
  "noAccountSelected": "Аккаунт не выбран",
108456
108467
  "removeAuthorization": "Удалить авторизацию",
108457
- "saving": "Сохранение…"
108468
+ "saving": "Сохранение…",
108469
+ "permissionAllTriggers": "Все триггеры",
108470
+ "permissionTriggers": "Триггеры: {{triggers}}"
108458
108471
  },
108459
108472
  common: {
108460
108473
  "cancel": "Отмена",
@@ -109506,7 +109519,9 @@ var resources = {
109506
109519
  "dynamicCodeReferences": "Tous les nœuds Code de ce Flow, y compris les sous-flux, partagent ces connexions. Les connexions sélectionnées par les autres nœuds ne donnent pas accès au Code.",
109507
109520
  "noAccountSelected": "Aucun compte sélectionné",
109508
109521
  "removeAuthorization": "Retirer l’autorisation",
109509
- "saving": "Enregistrement…"
109522
+ "saving": "Enregistrement…",
109523
+ "permissionAllTriggers": "Tous les déclencheurs",
109524
+ "permissionTriggers": "Déclencheurs : {{triggers}}"
109510
109525
  },
109511
109526
  common: {
109512
109527
  "cancel": "Annuler",
@@ -1,4 +1,4 @@
1
- import { $t as InputGroup, At as flowDependencies, Bn as inputValue, Bt as followWorkbenchLink, Ct as resetInputValues, Dn as allConnectorConnectionsQuery, Dt as setTriggerConnection, En as randomId, Et as setInputSources, F as deriveAddNodeOptions, G as resourceValue, Gn as providerIconAppearance, H as CacheResource, Hn as jsonValue, Ht as Popover, K as designerGraph, Kn as ApiError, Kt as PopoverTitle, L as feishuResourceKind, Mn as sampleErrorOutputs, Nn as triggerOutputDefinitions, Ot as updateTriggerConfig, P as addNodeIntent, Pn as isJsonObject, R as supportsFeishuChatFilter, Rn as connection, St as repairNodeNames, Tn as WorkbenchClient, Tt as setConnectorConnection, Un as record, Ut as PopoverContent, V as scopedValue, Vn as invalidResponse, Vt as Switch, W as resourceData, Wn as string, X as providerIcon, Yn as IconThemeContext, _ as updateTaskAdditionalInputs, _t as setComment, a as deleteSelection, an as EmptyHeader, at as Latest, b as updateWebhook, bt as setNodePositions, c as setInputVariable, cn as EventSourcesPage, d as updateNodeIcon, dn as createI18n, dt as actionWithConnections, en as InputGroupAddon, f as updateNodeName, ft as connectionCatalog, g as updateTask, gt as restoreCanvasPresentation, h as updateSubflow, ht as removeComments, i as createResource, in as EmptyDescription, it as revisionView, kn as decodeTriggerCatalog, kt as updateTriggerSchedule, l as updateCondition, m as updateResolution, mt as commentIds, nn as Empty, o as nameCreatedNodes, on as EmptyMedia, ot as deriveInspectorDiagnostics, p as updateNodeSettings, pt as canvasPresentationChange, qn as controlErrorCode, qt as PopoverTrigger, r as applyFlowChanges, rn as EmptyContent, s as setInputValue, sn as EmptyTitle, st as diagnosticItems, t as addNode, tn as InputGroupInput, tt as RunStore, u as updateNodeDescription, v as updateTaskPorts, vt as setFlowViewport, wn as errorNotice, wt as setCodeActions, xt as targetPresentation, y as updateValue, yt as setNodeContentHidden, z as combineSources, zn as connectorActionMetadata, zt as IdTooltip } from "./flowChanges-DtraMpva.js";
1
+ import { $t as InputGroup, At as flowDependencies, Bn as inputValue, Bt as followWorkbenchLink, Ct as resetInputValues, Dn as allConnectorConnectionsQuery, Dt as setTriggerConnection, En as randomId, Et as setInputSources, F as deriveAddNodeOptions, G as resourceValue, Gn as providerIconAppearance, H as CacheResource, Hn as jsonValue, Ht as Popover, K as designerGraph, Kn as ApiError, Kt as PopoverTitle, L as feishuResourceKind, Mn as sampleErrorOutputs, Nn as triggerOutputDefinitions, Ot as updateTriggerConfig, P as addNodeIntent, Pn as isJsonObject, R as supportsFeishuChatFilter, Rn as connection, St as repairNodeNames, Tn as WorkbenchClient, Tt as setConnectorConnection, Un as record, Ut as PopoverContent, V as scopedValue, Vn as invalidResponse, Vt as Switch, W as resourceData, Wn as string, X as providerIcon, Yn as IconThemeContext, _ as updateTaskAdditionalInputs, _t as setComment, a as deleteSelection, an as EmptyHeader, at as Latest, b as updateWebhook, bt as setNodePositions, c as setInputVariable, cn as EventSourcesPage, d as updateNodeIcon, dn as createI18n, dt as actionWithConnections, en as InputGroupAddon, f as updateNodeName, ft as connectionCatalog, g as updateTask, gt as restoreCanvasPresentation, h as updateSubflow, ht as removeComments, i as createResource, in as EmptyDescription, it as revisionView, kn as decodeTriggerCatalog, kt as updateTriggerSchedule, l as updateCondition, m as updateResolution, mt as commentIds, nn as Empty, o as nameCreatedNodes, on as EmptyMedia, ot as deriveInspectorDiagnostics, p as updateNodeSettings, pt as canvasPresentationChange, qn as controlErrorCode, qt as PopoverTrigger, r as applyFlowChanges, rn as EmptyContent, s as setInputValue, sn as EmptyTitle, st as diagnosticItems, t as addNode, tn as InputGroupInput, tt as RunStore, u as updateNodeDescription, v as updateTaskPorts, vt as setFlowViewport, wn as errorNotice, wt as setCodeActions, xt as targetPresentation, y as updateValue, yt as setNodeContentHidden, z as combineSources, zn as connectorActionMetadata, zt as IdTooltip } from "./flowChanges-CcscgZsW.js";
2
2
  import { a as derive, i as compute, l as val } from "./dist-bO8nvHFH.js";
3
3
  import { a as useVal, i as useTranslate, r as useLang, t as I18nProvider } from "./main-BPABKzwN.js";
4
4
  import { C as FieldError, D as applyFlowChanges$1, E as FlowChangeError, I as mapConditionSources, Ir as cn, K as dequal$1, L as nodeInputMappings, N as resourceNameIssue, Pr as Button, T as FieldLabel, a as DialogDescription, b as Spinner, c as DialogTitle, d as TooltipContent, i as DialogContent, jn as Input, n as Dialog, o as DialogFooter, p as TooltipTrigger, r as DialogClose, s as DialogHeader, t as Icon, u as Tooltip, w as FieldGroup, x as Field } from "./icons-0s-Q_3lp.js";
@@ -3263,6 +3263,26 @@ var ConnectorAccessStore = class {
3263
3263
  }
3264
3264
  return false;
3265
3265
  }
3266
+ allowedTriggerCandidates(providerId, triggerId) {
3267
+ return this.#state.value.candidates[providerId]?.candidates.filter((candidate) => candidate.permissions == null || candidate.permissions.allTriggers || candidate.permissions.triggerIds.includes(triggerId));
3268
+ }
3269
+ async filterTriggerConnections(flowId, definition, connections) {
3270
+ if (this.#disposed || flowId != this.#flowId) return [];
3271
+ const access = this.#state.value.access;
3272
+ if (access?.mode == "implicit") return connections;
3273
+ if (access == null) return [];
3274
+ await this.loadCandidates([definition.provider]);
3275
+ if (this.#disposed || flowId != this.#flowId) return [];
3276
+ const candidates = this.allowedTriggerCandidates(definition.provider, definition.key);
3277
+ if (candidates == null) return [];
3278
+ const allowed = new Set(candidates.map((candidate) => candidate.connectionId));
3279
+ const filtered = connections.filter((connection) => allowed.has(connection.connectionId));
3280
+ if (!filtered.some((connection) => connection.status == "active") && connections.some((connection) => connection.status == "active")) this.setNotice({
3281
+ kind: "error",
3282
+ message: this.i18n.t("connectorAccess.noAvailablePermissions")
3283
+ });
3284
+ return filtered;
3285
+ }
3266
3286
  async setService(providerId, selected) {
3267
3287
  const flowId = this.#flowId;
3268
3288
  const access = this.#state.value.access;
@@ -5353,10 +5373,11 @@ var WorkspaceStore = class {
5353
5373
  #pendingRepair;
5354
5374
  #stopCatalogWatch;
5355
5375
  #stopFlowWatch;
5356
- constructor(client, setNotice, identity = createAuthoringId, i18n = createI18n(), runChanged = () => {}, catalogs = new CatalogStores(client), flowCreated = () => {}, accessChanged = () => {}) {
5376
+ constructor(client, setNotice, identity = createAuthoringId, i18n = createI18n(), runChanged = () => {}, catalogs = new CatalogStores(client), flowCreated = () => {}, accessChanged = () => {}, filterTriggerConnections) {
5357
5377
  this.catalogs = catalogs;
5358
5378
  this.flowCreated = flowCreated;
5359
5379
  this.accessChanged = accessChanged;
5380
+ this.filterTriggerConnections = filterTriggerConnections;
5360
5381
  this.#draftSession = new Latest();
5361
5382
  this.#history = new CanvasHistory();
5362
5383
  this.history$ = this.#history.state$;
@@ -5676,9 +5697,10 @@ var WorkspaceStore = class {
5676
5697
  if (intent.kind == "provider-trigger" && intent.connectionId == null) {
5677
5698
  try {
5678
5699
  const connections = await resourceValue(this.catalogs.connections.get(intent.definition.provider, draft.flowId));
5700
+ const allowed = this.filterTriggerConnections == null ? connections : await this.filterTriggerConnections(draft.flowId, intent.definition, connections);
5679
5701
  intent = {
5680
5702
  ...intent,
5681
- connectionId: connectionCatalog(connections).preferred?.connectionId
5703
+ connectionId: connectionCatalog(allowed).preferred?.connectionId
5682
5704
  };
5683
5705
  } catch (error) {
5684
5706
  if (!this.#disposed && this.#model.value.draft == draft) this.#setNotice(errorNotice(error, this.#i18n.t));
@@ -6515,6 +6537,9 @@ var WorkbenchStore = class {
6515
6537
  }), (flowId) => void this.#openCreatedFlow(flowId), (flowId) => {
6516
6538
  this.connectorAccess.changed(flowId);
6517
6539
  this.workspace.catalogs.refreshFlow(flowId);
6540
+ }, async (flowId, definition, connections) => {
6541
+ await this.#accessLoading;
6542
+ return this.connectorAccess.filterTriggerConnections(flowId, definition, connections);
6518
6543
  });
6519
6544
  this.#stopAccessReaction = this.workspace.$.flowId.reaction((flowId) => {
6520
6545
  this.#accessLoading = this.connectorAccess.load(flowId);
@@ -6890,7 +6915,7 @@ var WorkbenchStore = class {
6890
6915
  };
6891
6916
  //#endregion
6892
6917
  //#region src/workbench/browser/runtime/openFlowWorkbench.tsx
6893
- var FlowWorkspace = lazy(() => import("./flowWorkspace-DLgti4Lk.js"));
6918
+ var FlowWorkspace = lazy(() => import("./flowWorkspace-CoT_ewLX.js"));
6894
6919
  function OpenFlowSessionGate({ action, description, error, onSubmit, onTokenChange, pending = false, title, token, tokenLabel }) {
6895
6920
  const hasToken = token != null && tokenLabel != null && onTokenChange != null;
6896
6921
  const tokenValue = token ?? "";
@@ -1,3 +1,34 @@
1
+ import type { JsonValue } from '../browser/flow-change.js';
2
+ export type TriggerOperationRequest = {
3
+ readonly operation: 'read';
4
+ readonly config: Readonly<Record<string, JsonValue>>;
5
+ readonly checkpoint: JsonValue;
6
+ } | {
7
+ readonly operation: 'options';
8
+ readonly config: Readonly<Record<string, JsonValue>>;
9
+ readonly field: string;
10
+ } | {
11
+ readonly operation: 'reconcile';
12
+ readonly subscriptionId?: string;
13
+ readonly config: Readonly<Record<string, JsonValue>>;
14
+ readonly requestKey: string;
15
+ readonly endpointUrl: string;
16
+ readonly active: boolean;
17
+ } | {
18
+ readonly operation: 'receive';
19
+ readonly subscriptionId: string;
20
+ readonly method: string;
21
+ readonly headers: Readonly<Record<string, string>>;
22
+ readonly query: Readonly<Record<string, string>>;
23
+ readonly rawBody: string;
24
+ readonly admit: boolean;
25
+ readonly current: boolean;
26
+ } | {
27
+ readonly operation: 'resource';
28
+ readonly config: Readonly<Record<string, JsonValue>>;
29
+ readonly requestKey: string;
30
+ readonly active: boolean;
31
+ };
1
32
  export interface ConnectorProxyRequest {
2
33
  readonly body?: unknown;
3
34
  readonly endpoint: string;
@@ -10,5 +41,6 @@ export interface ConnectorProxyResult {
10
41
  readonly status: number;
11
42
  }
12
43
  export interface ConnectorProxy {
44
+ trigger?(request: TriggerOperationRequest, signal?: AbortSignal): Promise<unknown>;
13
45
  execute(request: ConnectorProxyRequest, signal?: AbortSignal): Promise<ConnectorProxyResult>;
14
46
  }
@@ -6452,14 +6452,19 @@ function accessPermissions(value) {
6452
6452
  exact(source, [
6453
6453
  "actionIds",
6454
6454
  "allActions",
6455
+ "triggerIds",
6456
+ "allTriggers",
6455
6457
  "configured",
6456
6458
  "proxy"
6457
6459
  ]);
6458
- if (!Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6460
+ if (!Array.isArray(source.triggerIds) || typeof source.allTriggers != "boolean" || !Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6459
6461
  const actionIds = source.actionIds.map(string$1);
6460
- if (new Set(actionIds).size != actionIds.length || source.allActions != (actionIds.length == 0) || source.proxy != (source.allActions && !source.configured)) return invalidResponse();
6462
+ const triggerIds = source.triggerIds.map(string$1);
6463
+ if (new Set(actionIds).size != actionIds.length || source.allActions && actionIds.length != 0 || new Set(triggerIds).size != triggerIds.length || source.allTriggers && triggerIds.length != 0 || source.proxy && (!source.allActions || !source.allTriggers || source.configured)) return invalidResponse();
6461
6464
  return {
6462
6465
  actionIds,
6466
+ triggerIds,
6467
+ allTriggers: source.allTriggers,
6463
6468
  allActions: source.allActions,
6464
6469
  configured: source.configured,
6465
6470
  proxy: source.proxy
@@ -176,6 +176,8 @@ export interface ProviderAccessBindingCandidate extends ProviderAccessIdentity {
176
176
  readonly permissions?: {
177
177
  readonly actionIds: readonly string[];
178
178
  readonly allActions: boolean;
179
+ readonly triggerIds: readonly string[];
180
+ readonly allTriggers: boolean;
179
181
  readonly configured: boolean;
180
182
  readonly proxy: boolean;
181
183
  };
@@ -6531,14 +6531,19 @@ function accessPermissions(value) {
6531
6531
  exact(source, [
6532
6532
  "actionIds",
6533
6533
  "allActions",
6534
+ "triggerIds",
6535
+ "allTriggers",
6534
6536
  "configured",
6535
6537
  "proxy"
6536
6538
  ]);
6537
- if (!Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6539
+ if (!Array.isArray(source.triggerIds) || typeof source.allTriggers != "boolean" || !Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6538
6540
  const actionIds = source.actionIds.map(string$1);
6539
- if (new Set(actionIds).size != actionIds.length || source.allActions != (actionIds.length == 0) || source.proxy != (source.allActions && !source.configured)) return invalidResponse();
6541
+ const triggerIds = source.triggerIds.map(string$1);
6542
+ if (new Set(actionIds).size != actionIds.length || source.allActions && actionIds.length != 0 || new Set(triggerIds).size != triggerIds.length || source.allTriggers && triggerIds.length != 0 || source.proxy && (!source.allActions || !source.allTriggers || source.configured)) return invalidResponse();
6540
6543
  return {
6541
6544
  actionIds,
6545
+ triggerIds,
6546
+ allTriggers: source.allTriggers,
6542
6547
  allActions: source.allActions,
6543
6548
  configured: source.configured,
6544
6549
  proxy: source.proxy
@@ -1,10 +1,6 @@
1
- import type { ConnectorProxyRequest, ConnectorProxyResult } from './connector-proxy.js';
2
1
  import type { JsonValue } from '../browser/flow-change.js';
3
2
  export interface FeishuSubscription {
4
3
  readonly key: string;
5
- readonly subscribe: ConnectorProxyRequest;
6
- readonly unsubscribe: ConnectorProxyRequest;
7
- readonly inspect?: ConnectorProxyRequest;
4
+ readonly config: Readonly<Record<string, JsonValue>>;
8
5
  }
9
6
  export declare function feishuSubscriptions(config: Readonly<Record<string, JsonValue>>, provider: string): readonly FeishuSubscription[];
10
- export declare function feishuResponse(result: ConnectorProxyResult): Readonly<Record<string, JsonValue>>;
@@ -3,6 +3,7 @@ export interface ConnectionUsage {
3
3
  readonly providerId: string;
4
4
  readonly connectionId?: string;
5
5
  readonly actionId?: string;
6
+ readonly triggerId?: string;
6
7
  readonly nodeId: string;
7
8
  readonly name: string;
8
9
  readonly target: GraphTarget;
@@ -10799,6 +10799,7 @@ function connectionUsage(document) {
10799
10799
  };
10800
10800
  if (node.kind == "poll" || node.kind == "integration") uses.push({
10801
10801
  kind: "trigger",
10802
+ triggerId: node.definition.key,
10802
10803
  providerId: node.definition.provider,
10803
10804
  connectionId: node.connectionId,
10804
10805
  nodeId,
@@ -6671,14 +6671,19 @@ function accessPermissions(value) {
6671
6671
  exact(source, [
6672
6672
  "actionIds",
6673
6673
  "allActions",
6674
+ "triggerIds",
6675
+ "allTriggers",
6674
6676
  "configured",
6675
6677
  "proxy"
6676
6678
  ]);
6677
- if (!Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6679
+ if (!Array.isArray(source.triggerIds) || typeof source.allTriggers != "boolean" || !Array.isArray(source.actionIds) || typeof source.allActions != "boolean" || typeof source.configured != "boolean" || typeof source.proxy != "boolean") return invalidResponse();
6678
6680
  const actionIds = source.actionIds.map(string);
6679
- if (new Set(actionIds).size != actionIds.length || source.allActions != (actionIds.length == 0) || source.proxy != (source.allActions && !source.configured)) return invalidResponse();
6681
+ const triggerIds = source.triggerIds.map(string);
6682
+ if (new Set(actionIds).size != actionIds.length || source.allActions && actionIds.length != 0 || new Set(triggerIds).size != triggerIds.length || source.allTriggers && triggerIds.length != 0 || source.proxy && (!source.allActions || !source.allTriggers || source.configured)) return invalidResponse();
6680
6683
  return {
6681
6684
  actionIds,
6685
+ triggerIds,
6686
+ allTriggers: source.allTriggers,
6682
6687
  allActions: source.allActions,
6683
6688
  configured: source.configured,
6684
6689
  proxy: source.proxy
@@ -1,4 +1,4 @@
1
- export { feishuSubscriptions, feishuResponse } from './feishu-subscriptions.js';
1
+ export { feishuSubscriptions } from './feishu-subscriptions.js';
2
2
  export { receiveFeishuEvent, matchesFeishuEvent, type FeishuEvent } from './feishu-events.js';
3
3
  import type { IntegrationDefinition } from './integration-trigger.js';
4
4
  import type { PollDefinition } from './poll-trigger.js';