@burdenoff/fluidgrids-fe-sdk 2026.1022.13 → 2026.1022.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/ExecutionDetailPage-K3MPJLTL.js +16 -0
  2. package/dist/ExecutionsListPage-UGC5KFAT.js +16 -0
  3. package/dist/WorkflowBuilder-5A3NUIUI.js +19 -0
  4. package/dist/WorkflowsList-DEQZUFDG.js +16 -0
  5. package/dist/{chunk-KNFGMDDU.js → chunk-2QTKDR23.js} +32 -7
  6. package/dist/{chunk-QEPYK454.js → chunk-CZURRUDX.js} +32 -1
  7. package/dist/{chunk-IEHL6TYP.js → chunk-E7NQZB2E.js} +5 -5
  8. package/dist/{chunk-VM2BTPX3.js → chunk-HAYSY6TZ.js} +1 -2
  9. package/dist/{chunk-GO4UTLV4.js → chunk-IULOX3NQ.js} +1 -1
  10. package/dist/{chunk-3B3624QM.js → chunk-J3XDX5HG.js} +112 -58
  11. package/dist/{chunk-2M43OY55.js → chunk-KAOLPDNX.js} +1 -1
  12. package/dist/{chunk-AN7H42WZ.js → chunk-L7F7DLUP.js} +3 -3
  13. package/dist/{chunk-EZF3VWUB.js → chunk-LLPLOWMA.js} +44 -10
  14. package/dist/{chunk-G7RP3WRM.js → chunk-MP7MRTB4.js} +5 -6
  15. package/dist/chunk-MR4OTF7D.js +8026 -0
  16. package/dist/{chunk-SOPYCZCR.js → chunk-NJZAWUGC.js} +1 -1
  17. package/dist/{chunk-SYVLFHWV.js → chunk-OD2XBMS6.js} +21 -2
  18. package/dist/{chunk-OF33XHOO.js → chunk-ORVIG2XW.js} +2 -2
  19. package/dist/{chunk-MY3T465I.js → chunk-Q7NNS2FW.js} +3 -3
  20. package/dist/{chunk-5KPXP4JF.js → chunk-TQRBDECQ.js} +329 -6886
  21. package/dist/{chunk-C2RCYSRB.js → chunk-UQWPZVOS.js} +3 -3
  22. package/dist/{chunk-NQZFS6N7.js → chunk-V75733EN.js} +18 -6
  23. package/dist/{chunk-ZKCLX2VR.js → chunk-XCQROWIZ.js} +3 -3
  24. package/dist/{chunk-KCXRF6DF.js → chunk-ZQDMK22B.js} +5 -6
  25. package/dist/executions.js +13 -12
  26. package/dist/history.js +8 -5
  27. package/dist/index.d.ts +110 -3
  28. package/dist/index.js +35 -39
  29. package/dist/nodes.js +2 -3
  30. package/dist/observability.js +8 -3
  31. package/dist/settings.js +8 -5
  32. package/dist/templates.js +12 -15
  33. package/dist/workflow-builder.js +11 -14
  34. package/dist/workflows-list.js +10 -10
  35. package/package.json +1 -1
  36. package/dist/ExecutionDetailPage-ZPM3HVVX.js +0 -15
  37. package/dist/ExecutionsListPage-BURTBLWB.js +0 -13
  38. package/dist/WorkflowBuilder-YBJ5FIVW.js +0 -22
  39. package/dist/WorkflowsList-QQLKSYVM.js +0 -16
  40. package/dist/chunk-4UAWCWS7.js +0 -162
  41. package/dist/chunk-AVJIWVHL.js +0 -34
  42. package/dist/chunk-ONVGFVNH.js +0 -167
  43. package/dist/chunk-VI2RFS65.js +0 -880
@@ -1,162 +0,0 @@
1
- import { ENGLISH_FALLBACK_TRANSLATOR } from './chunk-UULVIT25.js';
2
- import { CombinedGraphQLErrors, ServerError } from '@apollo/client/errors';
3
- import { dispatchUpgradePrompt } from '@burdenoff/fe-libs/shared/components';
4
-
5
- function describeGraphQLError(error) {
6
- const code = typeof error.extensions?.code === "string" ? error.extensions.code : void 0;
7
- switch (code) {
8
- case "QUOTA_EXHAUSTED": {
9
- const quota = /Quota exhausted for (\S+)/.exec(error.message)?.[1];
10
- const allowance = quota ? `"${quota}" quota` : "usage quota";
11
- return `Quota exhausted \u2014 your workspace has used up its ${allowance}. Upgrade your plan or wait for the quota to reset.`;
12
- }
13
- case "QUOTA_NOT_PROVISIONED":
14
- return "This workspace's plan does not include this usage allowance yet. Contact your workspace admin or support to have it provisioned.";
15
- case "UNAUTHENTICATED":
16
- return "Your session has expired. Please sign in again.";
17
- case "FORBIDDEN":
18
- return error.message || "You don't have permission to perform this action.";
19
- default:
20
- return error.message || "Unknown error";
21
- }
22
- }
23
- function firstGraphQLErrorInBody(bodyText) {
24
- try {
25
- const parsed = JSON.parse(bodyText);
26
- if (typeof parsed !== "object" || parsed === null) return null;
27
- const errors = parsed.errors;
28
- if (!Array.isArray(errors) || errors.length === 0) return null;
29
- const first = errors[0];
30
- if (typeof first !== "object" || first === null) return null;
31
- const message = first.message;
32
- if (typeof message !== "string") return null;
33
- return first;
34
- } catch {
35
- return null;
36
- }
37
- }
38
- function describeOperationError(error, fallback = "Unknown error") {
39
- if (CombinedGraphQLErrors.is(error)) {
40
- const first = error.errors[0];
41
- return first ? describeGraphQLError(first) : error.message || fallback;
42
- }
43
- if (ServerError.is(error)) {
44
- const first = firstGraphQLErrorInBody(error.bodyText);
45
- if (first) return describeGraphQLError(first);
46
- }
47
- if (error instanceof Error) {
48
- return error.message || fallback;
49
- }
50
- if (typeof error === "string" && error.length > 0) {
51
- return error;
52
- }
53
- return fallback;
54
- }
55
- function throwIfResultError(result) {
56
- if (result.error) {
57
- throw new Error(describeOperationError(result.error), {
58
- cause: result.error
59
- });
60
- }
61
- return result;
62
- }
63
-
64
- // src/billing/quota.ts
65
- var RUNS_QUOTA_NAME = "fluidgrids.runs.monthly";
66
- var WORKFLOWS_QUOTA_NAME = "fluidgrids.workflows.count";
67
- var BILLING_PLANS_PATH = "/billing/plans";
68
- var QUOTA_EXHAUSTED_CODE = "QUOTA_EXHAUSTED";
69
- var QUOTA_NOT_PROVISIONED_CODE = "QUOTA_NOT_PROVISIONED";
70
- function asRecord(value) {
71
- return typeof value === "object" && value !== null ? value : null;
72
- }
73
- function extensionsOfList(list) {
74
- if (!Array.isArray(list)) return [];
75
- const found = [];
76
- for (const entry of list) {
77
- const extensions = asRecord(asRecord(entry)?.extensions);
78
- if (extensions) found.push(extensions);
79
- }
80
- return found;
81
- }
82
- function extensionsOfBody(bodyText) {
83
- if (typeof bodyText !== "string" || !bodyText.includes("errors")) return [];
84
- try {
85
- const parsed = JSON.parse(bodyText);
86
- return extensionsOfList(asRecord(parsed)?.errors);
87
- } catch {
88
- return [];
89
- }
90
- }
91
- var MAX_CAUSE_DEPTH = 5;
92
- function collectExtensions(error) {
93
- const found = [];
94
- const seen = /* @__PURE__ */ new Set();
95
- let current = error;
96
- for (let depth = 0; depth < MAX_CAUSE_DEPTH; depth += 1) {
97
- const host = asRecord(current);
98
- if (!host || seen.has(host)) break;
99
- seen.add(host);
100
- const direct = asRecord(host.extensions);
101
- if (direct) found.push(direct);
102
- found.push(...extensionsOfList(host.errors));
103
- found.push(...extensionsOfList(host.graphQLErrors));
104
- const networkError = asRecord(host.networkError);
105
- found.push(...extensionsOfList(asRecord(networkError?.result)?.errors));
106
- found.push(...extensionsOfBody(networkError?.bodyText));
107
- found.push(...extensionsOfList(asRecord(host.result)?.errors));
108
- found.push(...extensionsOfBody(host.bodyText));
109
- current = host.cause;
110
- }
111
- return found;
112
- }
113
- function stringField(extensions, key) {
114
- const value = extensions[key];
115
- return typeof value === "string" && value.length > 0 ? value : null;
116
- }
117
- function findQuotaRefusal(error) {
118
- const all = collectExtensions(error);
119
- const notProvisioned = all.find(
120
- (ext) => ext.code === QUOTA_NOT_PROVISIONED_CODE
121
- );
122
- if (notProvisioned) {
123
- return {
124
- kind: "not-provisioned",
125
- quotaName: stringField(notProvisioned, "quotaName"),
126
- limitLeft: null
127
- };
128
- }
129
- const exhausted = all.find((ext) => ext.code === QUOTA_EXHAUSTED_CODE);
130
- if (exhausted) {
131
- const limitLeft = exhausted.limitLeft;
132
- return {
133
- kind: "exhausted",
134
- quotaName: stringField(exhausted, "quotaName"),
135
- limitLeft: typeof limitLeft === "number" ? limitLeft : null
136
- };
137
- }
138
- return null;
139
- }
140
- function isQuotaExhaustedFailure(error) {
141
- return findQuotaRefusal(error)?.kind === "exhausted";
142
- }
143
- function openRunQuotaUpgradePrompt(error, tr = ENGLISH_FALLBACK_TRANSLATOR) {
144
- const refusal = findQuotaRefusal(error);
145
- if (refusal?.kind !== "exhausted") return false;
146
- dispatchUpgradePrompt({
147
- extensions: {
148
- code: QUOTA_EXHAUSTED_CODE,
149
- quotaName: refusal.quotaName ?? RUNS_QUOTA_NAME,
150
- resource: tr("fluidgrids.billing.runQuota.resource", "workflow runs"),
151
- ...refusal.limitLeft !== null ? { limitLeft: refusal.limitLeft } : {}
152
- },
153
- title: tr("fluidgrids.billing.runQuota.title", "Monthly run limit reached"),
154
- description: tr(
155
- "fluidgrids.billing.runQuota.description",
156
- "Your workspace has used all the workflow runs included in its plan this month. Upgrade your plan to keep running workflows, or wait for the monthly reset."
157
- )
158
- });
159
- return true;
160
- }
161
-
162
- export { BILLING_PLANS_PATH, RUNS_QUOTA_NAME, WORKFLOWS_QUOTA_NAME, describeOperationError, findQuotaRefusal, isQuotaExhaustedFailure, openRunQuotaUpgradePrompt, throwIfResultError };
@@ -1,34 +0,0 @@
1
- import { NodeEndpointConfigsDocument } from './chunk-QEPYK454.js';
2
-
3
- // src/utils/node-endpoint-configs.ts
4
- var NODE_CONFIG_PAGE_SIZE = 500;
5
- var NODE_CONFIG_MAX_PAGES = 20;
6
- async function fetchAllNodeEndpointConfigs(client, filters = {}, fetchPolicy = "network-only") {
7
- const byId = /* @__PURE__ */ new Map();
8
- let offset = 0;
9
- for (let page = 0; page < NODE_CONFIG_MAX_PAGES; page++) {
10
- const { data } = await client.query({
11
- query: NodeEndpointConfigsDocument,
12
- variables: {
13
- ...filters,
14
- pagination: { limit: NODE_CONFIG_PAGE_SIZE, offset }
15
- },
16
- fetchPolicy
17
- });
18
- const result = data?.nodeEndpointConfigs;
19
- const configs = result?.configs ?? [];
20
- for (const config of configs) {
21
- if (config?.id && !byId.has(config.id)) byId.set(config.id, config);
22
- }
23
- if (!result?.pagination?.hasMore || configs.length === 0) {
24
- return [...byId.values()];
25
- }
26
- offset += configs.length;
27
- }
28
- console.warn(
29
- `[Workflows] Stopped loading node configs after ${NODE_CONFIG_MAX_PAGES} pages; the catalog may be incomplete.`
30
- );
31
- return [...byId.values()];
32
- }
33
-
34
- export { fetchAllNodeEndpointConfigs };
@@ -1,167 +0,0 @@
1
- import { cn } from './chunk-JL7CASN5.js';
2
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3
- import { forwardRef, createContext, useMemo, useContext, cloneElement } from 'react';
4
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
-
6
- var TooltipProvider = TooltipPrimitive.Provider;
7
- var Tooltip = TooltipPrimitive.Root;
8
- var TooltipTrigger = TooltipPrimitive.Trigger;
9
- var TooltipContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
10
- TooltipPrimitive.Content,
11
- {
12
- ref,
13
- sideOffset,
14
- className: cn(
15
- "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
16
- className
17
- ),
18
- ...props
19
- }
20
- ));
21
- TooltipContent.displayName = TooltipPrimitive.Content.displayName;
22
- var ALLOW_ALL_PERMISSIONS = {
23
- hasPermission: () => true,
24
- isLoading: false,
25
- enforced: false
26
- };
27
- var FluidGridsPermissionsContext = createContext(
28
- ALLOW_ALL_PERMISSIONS
29
- );
30
- function FluidGridsPermissionsProvider({
31
- hasPermission,
32
- isLoading = false,
33
- children
34
- }) {
35
- const value = useMemo(
36
- () => ({ hasPermission, isLoading, enforced: true }),
37
- [hasPermission, isLoading]
38
- );
39
- return /* @__PURE__ */ jsx(FluidGridsPermissionsContext.Provider, { value, children });
40
- }
41
- function evaluatePermissionCheck(ctx, permission) {
42
- const permissions = typeof permission === "string" ? [permission] : permission;
43
- return {
44
- allowed: ctx.isLoading ? false : permissions.some((p) => ctx.hasPermission(p)),
45
- isLoading: ctx.isLoading,
46
- enforced: ctx.enforced
47
- };
48
- }
49
- function useFluidGridsPermission(permission) {
50
- return evaluatePermissionCheck(
51
- useContext(FluidGridsPermissionsContext),
52
- permission
53
- );
54
- }
55
- var DEFAULT_DENIED_TOOLTIP = "You don't have permission to perform this action";
56
- function SdkPermissionButton({
57
- permission,
58
- deniedBehavior = "disable",
59
- deniedTooltip = DEFAULT_DENIED_TOOLTIP,
60
- children
61
- }) {
62
- const { allowed, isLoading } = useFluidGridsPermission(permission);
63
- if (allowed) return children;
64
- if (deniedBehavior === "hide") return null;
65
- const disabledChild = cloneElement(children, {
66
- disabled: true,
67
- onClick: void 0
68
- });
69
- if (isLoading) return disabledChild;
70
- return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
71
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "inline-flex cursor-not-allowed", children: disabledChild }) }),
72
- /* @__PURE__ */ jsx(TooltipContent, { children: deniedTooltip })
73
- ] }) });
74
- }
75
- function SdkPermissionGate({
76
- permission,
77
- fallback = null,
78
- children
79
- }) {
80
- const { allowed } = useFluidGridsPermission(permission);
81
- return /* @__PURE__ */ jsx(Fragment, { children: allowed ? children : fallback });
82
- }
83
-
84
- // src/permissions/constants.ts
85
- var FLUIDGRIDS_PERMISSIONS = {
86
- // Workflow resources
87
- WORKFLOW_LIST: "workflow:list",
88
- WORKFLOW_READ: "workflow:read",
89
- WORKFLOW_CREATE: "workflow:create",
90
- WORKFLOW_UPDATE: "workflow:update",
91
- WORKFLOW_DELETE: "workflow:delete",
92
- WORKFLOW_EXECUTE: "workflow:execute",
93
- // Workflow run resources
94
- WORKFLOW_RUN_LIST: "workflow-run:list",
95
- WORKFLOW_RUN_READ: "workflow-run:read",
96
- WORKFLOW_RUN_EXECUTE: "workflow-run:execute",
97
- // Node resources
98
- NODE_LIST: "node:list",
99
- NODE_READ: "node:read",
100
- NODE_CREATE: "node:create",
101
- NODE_DELETE: "node:delete",
102
- // Node installation resources
103
- NODE_INSTALLATION_LIST: "node-installation:list",
104
- NODE_INSTALLATION_READ: "node-installation:read",
105
- NODE_INSTALLATION_CREATE: "node-installation:create",
106
- NODE_INSTALLATION_UPDATE: "node-installation:update",
107
- NODE_INSTALLATION_DELETE: "node-installation:delete",
108
- // Node endpoint config resources
109
- NODE_ENDPOINT_CONFIG_LIST: "node-endpoint-config:list",
110
- NODE_ENDPOINT_CONFIG_READ: "node-endpoint-config:read",
111
- NODE_ENDPOINT_CONFIG_UPDATE: "node-endpoint-config:update",
112
- NODE_ENDPOINT_CONFIG_DELETE: "node-endpoint-config:delete",
113
- // Scheduled job resources
114
- SCHEDULED_JOB_LIST: "scheduled-job:list",
115
- SCHEDULED_JOB_READ: "scheduled-job:read",
116
- SCHEDULED_JOB_CREATE: "scheduled-job:create",
117
- SCHEDULED_JOB_UPDATE: "scheduled-job:update",
118
- SCHEDULED_JOB_DELETE: "scheduled-job:delete",
119
- // AI workflow resources
120
- AI_WORKFLOW_EXECUTE: "ai-workflow:execute",
121
- AI_WORKFLOW_CREATE: "ai-workflow:create",
122
- // Artifact resources
123
- ARTIFACT_LIST: "artifact:list",
124
- ARTIFACT_READ: "artifact:read",
125
- ARTIFACT_DELETE: "artifact:delete",
126
- // Chat resources
127
- CHAT_SESSION_LIST: "chat-session:list",
128
- CHAT_SESSION_READ: "chat-session:read",
129
- CHAT_SESSION_CREATE: "chat-session:create",
130
- CHAT_SESSION_DELETE: "chat-session:delete",
131
- // Submission resources
132
- SUBMISSION_LIST: "submission:list",
133
- SUBMISSION_READ: "submission:read",
134
- SUBMISSION_DELETE: "submission:delete",
135
- SUBMISSION_EXECUTE: "submission:execute",
136
- // Event registration resources
137
- EVENT_REGISTRATION_LIST: "event-registration:list",
138
- EVENT_REGISTRATION_READ: "event-registration:read",
139
- EVENT_REGISTRATION_CREATE: "event-registration:create",
140
- EVENT_REGISTRATION_UPDATE: "event-registration:update",
141
- EVENT_REGISTRATION_DELETE: "event-registration:delete",
142
- // Usage resources
143
- USAGE_LIST: "usage:list",
144
- USAGE_READ: "usage:read",
145
- // Dashboard resources
146
- DASHBOARD_READ: "dashboard:read",
147
- // System config resources
148
- SYSTEM_CONFIG_READ: "system-config:read",
149
- SYSTEM_CONFIG_UPDATE: "system-config:update",
150
- // Workflow variable resources (BOFF-7517)
151
- VARIABLE_READ: "workflow-variable:read",
152
- VARIABLE_CREATE: "workflow-variable:create",
153
- VARIABLE_UPDATE: "workflow-variable:update",
154
- VARIABLE_DELETE: "workflow-variable:delete",
155
- VARIABLE_REVEAL: "workflow-variable:reveal",
156
- // External secrets provider config resources (BOFF-7517)
157
- SECRETS_PROVIDER_CONFIG_READ: "secrets-provider-config:read",
158
- SECRETS_PROVIDER_CONFIG_UPDATE: "secrets-provider-config:update",
159
- SECRETS_PROVIDER_CONFIG_TEST: "secrets-provider-config:test",
160
- // Integrations (wspace-integrations-svc)
161
- INTEGRATION_CONNECTION_CREATE: "integration-connection:create",
162
- // Self-hosted runners (wspace-sandbox-svc; @rbac resource "sandbox")
163
- SANDBOX_READ: "sandbox:read",
164
- SANDBOX_CREATE: "sandbox:create"
165
- };
166
-
167
- export { ALLOW_ALL_PERMISSIONS, FLUIDGRIDS_PERMISSIONS, FluidGridsPermissionsProvider, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, evaluatePermissionCheck, useFluidGridsPermission };