flujo-ai 3.35.0 → 3.37.0
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/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +125 -125
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +24 -24
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/api/approvals/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/approvals/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/backup/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/bugs/enhance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/encryption/secure/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/[versionId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/[id]/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/compile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/generator/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/improve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/prompt-renderer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/quick-chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/repair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/flow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/local-models/suggest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/app-sandbox/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/oauth-capability/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/get/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/prompts/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/read/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/[toolName]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/[name]/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/servers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/test-connection/stream/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp-registry/spotlight/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/provider/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/oauth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/build/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/derive-secrets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/install/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/installed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/resolve/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/scan-targets/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/packages/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/run/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/[id]/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/preview-schedule/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/reconcile/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/planned-executions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/resend/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/auth/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/feedback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/callback/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/oauth/initiate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/packages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/publish/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/registry/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/storage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route.js +1 -1
- package/.next/server/app/api/telemetry/daily-active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/waves/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/webhooks/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/chat.html +1 -1
- package/.next/server/app/chat.rsc +2 -2
- package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/docs.html +1 -1
- package/.next/server/app/docs.rsc +1 -1
- package/.next/server/app/executions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/executions.html +1 -1
- package/.next/server/app/executions.rsc +1 -1
- package/.next/server/app/flows/page_client-reference-manifest.js +1 -1
- package/.next/server/app/flows.html +1 -1
- package/.next/server/app/flows.rsc +2 -2
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +1 -1
- package/.next/server/app/mcp/page_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-flows/route.js +1 -1
- package/.next/server/app/mcp-flows/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route.js +1 -1
- package/.next/server/app/mcp-proxy/[server]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/mcp.html +1 -1
- package/.next/server/app/mcp.rsc +2 -2
- package/.next/server/app/models/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages/page.js +1 -1
- package/.next/server/app/packages/page_client-reference-manifest.js +1 -1
- package/.next/server/app/packages.html +1 -1
- package/.next/server/app/packages.rsc +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +1 -1
- package/.next/server/app/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/breakpoints/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/continue/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/debug/step/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/edit-state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/inject/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/[resourceId]/content/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/resources/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/[conversationId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/conversations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/chat/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/v1/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/waves/page_client-reference-manifest.js +1 -1
- package/.next/server/app/waves.html +1 -1
- package/.next/server/app/waves.rsc +1 -1
- package/.next/server/app-paths-manifest.json +21 -21
- package/.next/server/chunks/1227.js +1 -1
- package/.next/server/chunks/2273.js +1 -1
- package/.next/server/chunks/544.js +1 -1
- package/.next/server/chunks/6747.js +1 -1
- package/.next/server/chunks/8645.js +1 -1
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{8650-aa22dbf7b37348f0.js → 8650-27bd62ba2381da1d.js} +1 -1
- package/.next/static/chunks/app/packages/{page-f1a22789a6c0e0b6.js → page-2f2d29c17841b3cf.js} +1 -1
- package/.next/trace +10 -10
- package/README.md +1 -1
- package/package.json +1 -1
- /package/.next/static/{hbjnLG9RCje2AApS9TzP8 → -8j0oqKN3S4zlsA4kJRYr}/_buildManifest.js +0 -0
- /package/.next/static/{hbjnLG9RCje2AApS9TzP8 → -8j0oqKN3S4zlsA4kJRYr}/_ssgManifest.js +0 -0
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"/api/approvals/[id]/route": "app/api/approvals/[id]/route.js",
|
|
3
3
|
"/api/approvals/route": "app/api/approvals/route.js",
|
|
4
4
|
"/api/backup/route": "app/api/backup/route.js",
|
|
5
|
-
"/api/bugs/enhance/route": "app/api/bugs/enhance/route.js",
|
|
6
5
|
"/api/browse/route": "app/api/browse/route.js",
|
|
6
|
+
"/api/bugs/enhance/route": "app/api/bugs/enhance/route.js",
|
|
7
7
|
"/api/cwd/route": "app/api/cwd/route.js",
|
|
8
8
|
"/api/encryption/secure/route": "app/api/encryption/secure/route.js",
|
|
9
9
|
"/api/env/route": "app/api/env/route.js",
|
|
@@ -11,24 +11,24 @@
|
|
|
11
11
|
"/api/flow/[id]/versions/[versionId]/route": "app/api/flow/[id]/versions/[versionId]/route.js",
|
|
12
12
|
"/api/flow/[id]/versions/route": "app/api/flow/[id]/versions/route.js",
|
|
13
13
|
"/api/flow/compile/route": "app/api/flow/compile/route.js",
|
|
14
|
-
"/_not-found/page": "app/_not-found/page.js",
|
|
15
14
|
"/api/flow/generate/route": "app/api/flow/generate/route.js",
|
|
16
15
|
"/api/flow/generator/route": "app/api/flow/generator/route.js",
|
|
17
16
|
"/api/flow/improve/route": "app/api/flow/improve/route.js",
|
|
18
17
|
"/api/flow/prompt-renderer/route": "app/api/flow/prompt-renderer/route.js",
|
|
19
18
|
"/api/flow/quick-chat/route": "app/api/flow/quick-chat/route.js",
|
|
20
|
-
"/api/flow/route": "app/api/flow/route.js",
|
|
21
19
|
"/api/flow/repair/route": "app/api/flow/repair/route.js",
|
|
20
|
+
"/api/flow/route": "app/api/flow/route.js",
|
|
22
21
|
"/api/init/route": "app/api/init/route.js",
|
|
23
22
|
"/api/git/route": "app/api/git/route.js",
|
|
23
|
+
"/_not-found/page": "app/_not-found/page.js",
|
|
24
24
|
"/api/mcp-registry/route": "app/api/mcp-registry/route.js",
|
|
25
|
+
"/api/mcp/app-sandbox/route": "app/api/mcp/app-sandbox/route.js",
|
|
25
26
|
"/api/mcp-registry/spotlight/route": "app/api/mcp-registry/spotlight/route.js",
|
|
26
27
|
"/api/mcp/cancel/route": "app/api/mcp/cancel/route.js",
|
|
27
28
|
"/api/mcp/servers/[name]/prompts/get/route": "app/api/mcp/servers/[name]/prompts/get/route.js",
|
|
28
|
-
"/api/mcp/app-sandbox/route": "app/api/mcp/app-sandbox/route.js",
|
|
29
29
|
"/api/mcp/servers/[name]/prompts/route": "app/api/mcp/servers/[name]/prompts/route.js",
|
|
30
|
-
"/api/mcp/servers/[name]/resources/route": "app/api/mcp/servers/[name]/resources/route.js",
|
|
31
30
|
"/api/mcp/servers/[name]/resources/read/route": "app/api/mcp/servers/[name]/resources/read/route.js",
|
|
31
|
+
"/api/mcp/servers/[name]/resources/route": "app/api/mcp/servers/[name]/resources/route.js",
|
|
32
32
|
"/api/mcp/servers/[name]/route": "app/api/mcp/servers/[name]/route.js",
|
|
33
33
|
"/api/mcp/servers/[name]/status/route": "app/api/mcp/servers/[name]/status/route.js",
|
|
34
34
|
"/api/mcp/servers/[name]/tools/[toolName]/route": "app/api/mcp/servers/[name]/tools/[toolName]/route.js",
|
|
@@ -37,12 +37,13 @@
|
|
|
37
37
|
"/api/mcp/test-connection/route": "app/api/mcp/test-connection/route.js",
|
|
38
38
|
"/api/model/[id]/route": "app/api/model/[id]/route.js",
|
|
39
39
|
"/api/model/provider/route": "app/api/model/provider/route.js",
|
|
40
|
+
"/api/model/route": "app/api/model/route.js",
|
|
40
41
|
"/api/model/test/route": "app/api/model/test/route.js",
|
|
41
42
|
"/api/oauth/callback/route": "app/api/oauth/callback/route.js",
|
|
42
|
-
"/api/model/route": "app/api/model/route.js",
|
|
43
43
|
"/api/oauth/initiate/route": "app/api/oauth/initiate/route.js",
|
|
44
|
-
"/api/packages/derive-secrets/route": "app/api/packages/derive-secrets/route.js",
|
|
45
44
|
"/api/oauth/reset/route": "app/api/oauth/reset/route.js",
|
|
45
|
+
"/api/packages/build/route": "app/api/packages/build/route.js",
|
|
46
|
+
"/api/packages/derive-secrets/route": "app/api/packages/derive-secrets/route.js",
|
|
46
47
|
"/api/packages/install/route": "app/api/packages/install/route.js",
|
|
47
48
|
"/api/packages/install/status/route": "app/api/packages/install/status/route.js",
|
|
48
49
|
"/api/packages/installed/route": "app/api/packages/installed/route.js",
|
|
@@ -60,8 +61,8 @@
|
|
|
60
61
|
"/api/registry/auth/reset/route": "app/api/registry/auth/reset/route.js",
|
|
61
62
|
"/api/registry/auth/route": "app/api/registry/auth/route.js",
|
|
62
63
|
"/api/registry/feedback/route": "app/api/registry/feedback/route.js",
|
|
63
|
-
"/api/registry/oauth/callback/route": "app/api/registry/oauth/callback/route.js",
|
|
64
64
|
"/api/registry/oauth/initiate/route": "app/api/registry/oauth/initiate/route.js",
|
|
65
|
+
"/api/registry/oauth/callback/route": "app/api/registry/oauth/callback/route.js",
|
|
65
66
|
"/api/registry/packages/route": "app/api/registry/packages/route.js",
|
|
66
67
|
"/api/registry/publish/route": "app/api/registry/publish/route.js",
|
|
67
68
|
"/api/registry/settings/route": "app/api/registry/settings/route.js",
|
|
@@ -70,10 +71,10 @@
|
|
|
70
71
|
"/api/storage/route": "app/api/storage/route.js",
|
|
71
72
|
"/api/waves/route": "app/api/waves/route.js",
|
|
72
73
|
"/api/webhooks/[id]/route": "app/api/webhooks/[id]/route.js",
|
|
73
|
-
"/api/packages/build/route": "app/api/packages/build/route.js",
|
|
74
74
|
"/v1/chat/completions/route": "app/v1/chat/completions/route.js",
|
|
75
|
-
"/v1/chat/conversations/[conversationId]/breakpoints/route": "app/v1/chat/conversations/[conversationId]/breakpoints/route.js",
|
|
76
75
|
"/v1/chat/conversations/[conversationId]/cancel/route": "app/v1/chat/conversations/[conversationId]/cancel/route.js",
|
|
76
|
+
"/v1/chat/conversations/[conversationId]/breakpoints/route": "app/v1/chat/conversations/[conversationId]/breakpoints/route.js",
|
|
77
|
+
"/v1/chat/conversations/[conversationId]/debug/step/route": "app/v1/chat/conversations/[conversationId]/debug/step/route.js",
|
|
77
78
|
"/v1/chat/conversations/[conversationId]/debug/continue/route": "app/v1/chat/conversations/[conversationId]/debug/continue/route.js",
|
|
78
79
|
"/v1/chat/conversations/[conversationId]/edit-state/route": "app/v1/chat/conversations/[conversationId]/edit-state/route.js",
|
|
79
80
|
"/v1/chat/conversations/[conversationId]/inject/route": "app/v1/chat/conversations/[conversationId]/inject/route.js",
|
|
@@ -81,28 +82,27 @@
|
|
|
81
82
|
"/v1/chat/conversations/[conversationId]/resources/route": "app/v1/chat/conversations/[conversationId]/resources/route.js",
|
|
82
83
|
"/v1/chat/conversations/[conversationId]/respond/route": "app/v1/chat/conversations/[conversationId]/respond/route.js",
|
|
83
84
|
"/v1/chat/conversations/[conversationId]/route": "app/v1/chat/conversations/[conversationId]/route.js",
|
|
84
|
-
"/v1/chat/conversations/[conversationId]/debug/step/route": "app/v1/chat/conversations/[conversationId]/debug/step/route.js",
|
|
85
85
|
"/v1/chat/conversations/route": "app/v1/chat/conversations/route.js",
|
|
86
86
|
"/v1/models/route": "app/v1/models/route.js",
|
|
87
|
+
"/api/local-models/pull/route": "app/api/local-models/pull/route.js",
|
|
88
|
+
"/api/local-models/suggest/route": "app/api/local-models/suggest/route.js",
|
|
87
89
|
"/api/local-models/capability/route": "app/api/local-models/capability/route.js",
|
|
88
90
|
"/api/mcp/oauth-capability/route": "app/api/mcp/oauth-capability/route.js",
|
|
89
|
-
"/api/local-models/suggest/route": "app/api/local-models/suggest/route.js",
|
|
90
|
-
"/api/local-models/pull/route": "app/api/local-models/pull/route.js",
|
|
91
|
-
"/api/telemetry/daily-active/route": "app/api/telemetry/daily-active/route.js",
|
|
92
91
|
"/api/mcp/test-connection/stream/route": "app/api/mcp/test-connection/stream/route.js",
|
|
93
|
-
"/
|
|
94
|
-
"/mcp-proxy/[server]/route": "app/mcp-proxy/[server]/route.js",
|
|
92
|
+
"/api/telemetry/daily-active/route": "app/api/telemetry/daily-active/route.js",
|
|
95
93
|
"/api/update/route": "app/api/update/route.js",
|
|
96
|
-
"/
|
|
94
|
+
"/mcp-proxy/[server]/route": "app/mcp-proxy/[server]/route.js",
|
|
95
|
+
"/mcp-flows/route": "app/mcp-flows/route.js",
|
|
97
96
|
"/v1/chat/conversations/[conversationId]/events/route": "app/v1/chat/conversations/[conversationId]/events/route.js",
|
|
97
|
+
"/v1/chat/events/route": "app/v1/chat/events/route.js",
|
|
98
98
|
"/chat/page": "app/chat/page.js",
|
|
99
|
-
"/docs/page": "app/docs/page.js",
|
|
100
|
-
"/packages/page": "app/packages/page.js",
|
|
101
|
-
"/flows/page": "app/flows/page.js",
|
|
102
99
|
"/executions/page": "app/executions/page.js",
|
|
100
|
+
"/flows/page": "app/flows/page.js",
|
|
101
|
+
"/docs/page": "app/docs/page.js",
|
|
103
102
|
"/mcp/page": "app/mcp/page.js",
|
|
104
|
-
"/page": "app/page.js",
|
|
103
|
+
"/packages/page": "app/packages/page.js",
|
|
105
104
|
"/settings/page": "app/settings/page.js",
|
|
105
|
+
"/page": "app/page.js",
|
|
106
106
|
"/waves/page": "app/waves/page.js",
|
|
107
107
|
"/models/page": "app/models/page.js"
|
|
108
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=1227,exports.ids=[1227],exports.modules={34641:(a,b,c)=>{c.d(b,{uJ:()=>B,Ay:()=>L,Yw:()=>C});var d=c(21124),e=c(38301),f=c(60839),g=c(81637),h=c(8521),i=c(79515),j=c(88745),k=c(43312),l=c(68730),m=c(99561),n=c(5748),o=c(1994),p=c(17332),q=c(63908),r=c(36636),s=c(93516),t=c(92543),u=c(28055),v=c(59060);let w=(0,c(19815).h)("frontend/components/Chat/McpAppFrame"),x={name:"FLUJO",version:"3.35.0"},y=new Set(["https:","http:"]),z=["inline","fullscreen","pip"],A=new Set(["text"]),B=262144;function C(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let D=null;async function E(){return D||(D=fetch("/api/mcp/app-sandbox").then(async a=>{if(!a.ok)throw Error(`Sandbox endpoint discovery failed (${a.status})`);return await a.json()}).catch(a=>{throw D=null,a})),function(a,b){let c;if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if(void 0!==a.url){if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery returned an invalid public URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL")}else{if("http:"!==b.protocol)throw Error("MCP Apps on HTTPS require FLUJO_MCP_APP_SANDBOX_PUBLIC_URL to be configured");if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("Sandbox endpoint discovery returned an invalid port");(c=new URL("/sandbox.html",b.origin)).port=String(a.port)}if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(await D,window.location)}function F(a,b){let c=[],d=new Set;for(let e of a??[]){if(0===e.length||e.length>2048||/[^\x21-\x7e]/.test(e))continue;let a=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(e);if(!a||!b.includes(a[1].toLowerCase()))continue;let f=a[3].split(".");if(a[3].length>253||f.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))continue;let g=a[4]?Number(a[4]):void 0;if(void 0!==g&&(!Number.isInteger(g)||g<1||g>65535))continue;let h=e.toLowerCase();if(!d.has(h)&&(d.add(h),c.push(e),c.length>=64))break}return c}function G(a){if(a)try{return JSON.parse(a)}catch{return}}async function H(a,b,c,d,e){if(await a.sendToolInput({arguments:function(a){let b=G(a);return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}(b)}),void 0!==d)return void await a.sendToolCancelled({reason:d});let f=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=G(a);return c&&"object"==typeof c&&Array.isArray(c.content)?{...c,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);f&&await a.sendToolResult(f)}function I(a,b,c){return b.includes(a)&&c.includes(a)}function J(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function K(a,b,c){try{let d=await u.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,v.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,v.Gt)(f._meta)===b)return{tool:f}}catch(a){w.debug("Could not resolve the full MCP App tool definition",a)}}let L=({serverName:a,uri:b,toolName:c,toolArgs:D,toolResultContent:G,toolUpdateId:L,toolCancelledReason:M,toolIsError:N,onAppMessage:O,onUpdateModelContext:P,onRequestDock:Q,onDockable:R,onAvailableDisplayModes:S,hostDisplayMode:T,onRequestDisplayMode:U,onRequestClose:V,onRegisterTeardown:W,teardownRegistrationKey:X,docked:Y=!1,visible:Z=!0})=>{let $=(0,f.A)(),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(null),[af,ag]=(0,e.useState)(Y?"pip":"inline"),[ah,ai]=(0,e.useState)([]),aj=T??af,ak=(0,e.useMemo)(()=>Y?["pip","fullscreen"]:["inline","fullscreen",...Q?["pip"]:[]],[Y,Q]),al=(0,e.useRef)(null),am=(0,e.useRef)(null),an=(0,e.useRef)(null),ao=(0,e.useRef)(!1),ap=(0,e.useRef)(0),aq=(0,e.useRef)(!1),ar=(0,e.useRef)(null),as=(0,e.useRef)(null),at=(0,e.useRef)(!1),au=(0,e.useRef)(!0),av=(0,e.useRef)([]),aw=(0,e.useRef)(aj),ax=(0,e.useRef)(ak),ay=(0,e.useRef)(Promise.resolve()),az=(0,e.useRef)(void 0),aA=(0,e.useRef)({args:D,resultContent:G,cancelledReason:M,isError:N,updateId:L});aA.current={args:D,resultContent:G,cancelledReason:M,isError:N,updateId:L};let aB=(0,e.useRef)(O);(0,e.useEffect)(()=>{aB.current=O},[O]);let aC=(0,e.useRef)(P);(0,e.useEffect)(()=>{aC.current=P},[P]);let aD=(0,e.useRef)(Q);(0,e.useEffect)(()=>{aD.current=Q},[Q]);let aE=(0,e.useRef)(R);(0,e.useEffect)(()=>{aE.current=R},[R]);let aF=(0,e.useRef)(S);(0,e.useEffect)(()=>{aF.current=S},[S]);let aG=(0,e.useRef)(U);(0,e.useEffect)(()=>{aG.current=U},[U]);let aH=(0,e.useRef)(V);(0,e.useEffect)(()=>{aH.current=V},[V]);let aI=(0,e.useRef)(Y);(0,e.useEffect)(()=>{aI.current=Y},[Y]),(0,e.useEffect)(()=>{aw.current=aj},[aj]),(0,e.useEffect)(()=>{ax.current=ak},[ak]);let aJ=(0,e.useCallback)(()=>{if(as.current)return as.current;ap.current+=1;let a=an.current,b=am.current,c=aq.current;an.current=null,am.current=null,aq.current=!1,ao.current=!1,av.current=[],ar.current?.disconnect(),ar.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){w.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return as.current=d,d.finally(()=>{as.current===d&&(as.current=null)}),d},[]),aK=(0,e.useCallback)(()=>{!at.current&&aD.current&&(at.current=!0,aJ().then(()=>{au.current&&(aD.current?.(),aa(!1))}).finally(()=>{at.current=!1}))},[aJ]),aL=(0,e.useCallback)((a,b,c,d,e)=>{ay.current=ay.current.catch(()=>void 0).then(async()=>{an.current===a&&aq.current&&await H(a,b,c,d,e)}).catch(a=>{w.warn("MCP App tool delivery failed",a)})},[]),aM=(0,e.useCallback)(async()=>{if(as.current&&await as.current,ao.current||!al.current)return;let d=ap.current+1;ap.current=d;let e=()=>ap.current===d&&ao.current;ao.current=!0,ai([]),ac(!0),ae(null);try{let f,[g,h]=await Promise.all([u.S.readResourceFromApp(a,b),K(a,b,c)]);if(!e())return;if(g?.httpStatus===403)throw Error(g?.error||"MCP Apps access was disabled for this server");if(!g||!1===g.success)throw Error(g?.error||"Failed to read the UI resource.");let i=function(a,b){var c;let d,e=a?.contents;if(!Array.isArray(e)||0===e.length)throw Error("Resource has no contents");let f=e.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,v.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!f)throw Error(`Resource ${b} did not return MCP App HTML`);try{d="string"==typeof f.text?f.text:function(a){let b=Uint8Array.from(atob(a),a=>a.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(b)}(f.blob)}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(d).length>v.Pt)throw Error(`Resource exceeds the ${Math.round(v.Pt/1024)} KiB size cap`);let g=(f._meta??f.meta)?.ui,h=t.c0.safeParse(g?.csp);if(g?.csp!==void 0&&!h.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let i=t.Ml.safeParse(g?.permissions);if(g?.permissions!==void 0&&!i.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:d,csp:h.success?{connectDomains:F((c=h.data).connectDomains,["https","wss"]),resourceDomains:F(c.resourceDomains,["https"]),frameDomains:F(c.frameDomains,["https"]),baseUriDomains:F(c.baseUriDomains,["https"])}:void 0,permissions:i.success&&i.data.clipboardWrite?{clipboardWrite:{}}:void 0}}(g.data,b),j=await E();if(!e()||!al.current)return;let k=document.createElement("iframe");k.title=`MCP App: ${b}`,k.setAttribute("sandbox","allow-scripts allow-same-origin"),k.referrerPolicy="origin";let l=(0,t.Sy)(i.permissions);l&&k.setAttribute("allow",l),k.style.cssText=aI.current?"width:100%;height:100%;border:none;background:#fff;":"width:100%;min-height:120px;height:200px;border:none;border-radius:4px;background:#fff;",al.current.appendChild(k),am.current=k;let m=new URL(j);i.csp&&m.searchParams.set("csp",JSON.stringify(i.csp));let n=m.origin,o=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error("Timed out waiting for the sandbox proxy."))},1e4),d=b=>{b.source===k.contentWindow&&b.origin===n&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(k.src=m.href,await o,!e()||am.current!==k)return;let p=aw.current,q="inline";aw.current=q,f=new t.T1(function(a,b){return{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(c,d,e)=>{let{method:f,params:g}=c;if("tools/call"===f){w.info(`MCP App tools/call: ${a}/${g?.name}`);let c=await u.S.callToolFromApp(a,g.name,g.arguments??{},void 0,e?.signal);if(c?.httpStatus===403){let a=c?.error||"MCP Apps access was disabled for this server";throw b(a),Error(a)}if(!c||!1===c.success)throw Error(c?.error||`Tool call failed: ${g?.name}`);return c.data}if("resources/read"===f){let c=await u.S.readResourceFromApp(a,g.uri);if(c?.httpStatus===403){let a=c?.error||"MCP Apps access was disabled for this server";throw b(a),Error(a)}if(!c||!1===c.success)throw Error(c?.error||`Resource read failed: ${g?.uri}`);return c.data}if("resources/list"===f)return{resources:[]};if("resources/templates/list"===f)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${f}`)}}}(a,a=>{ap.current===d&&an.current===f&&(ae(a),ac(!1),aJ())}),x,{openLinks:{},serverTools:{},serverResources:{},logging:{},...aB.current?{message:{text:{}}}:{},...aC.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:i.csp,permissions:i.permissions}},{hostContext:{...h?{toolInfo:h}:{},theme:"dark"===$.palette.mode?"dark":"light",platform:"web",displayMode:q,availableDisplayModes:ax.current,containerDimensions:J(al.current,aI.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}}),an.current=f;let r=()=>e()&&an.current===f;if(f.onopenlink=async({url:c})=>{if(!r())return{isError:!0};let d=function(a){try{let b=new URL(a);if(!y.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(c);if(!d)return w.warn("MCP App open-link rejected by URL policy",{serverName:a,uri:b}),{isError:!0};let e=window.open(d,"_blank","noopener,noreferrer");return e?(e.opener=null,{}):{isError:!0}},f.ondownloadfile=async({contents:a})=>{if(!r())return{isError:!0};try{for(let b of a??[]){let a,c=b?.resource;if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return w.warn("MCP App download failed",a),{isError:!0}}},f.onloggingmessage=a=>{r()&&w.debug("MCP App log",a?.data)},f.onmessage=async a=>{if(!r())return{};if(!aB.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){if(a?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let b=a?.content,c=Array.isArray(b)?b:b&&"object"==typeof b?[b]:[];if(0===c.length||c.some(a=>a?.type!=="text"||"string"!=typeof a.text))throw Error("This host accepts text-only ui/message content");let d=c.map(a=>a.text).join("\n").trim();if(!d)throw Error("ui/message text must not be empty");return d}(a);if(!await aB.current(b))throw Error("ui/message was not delivered");return{}},f.onupdatemodelcontext=async c=>{if(!r())return{};let d=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!A.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":C(a)>B?`Model context exceeds ${B} bytes`:null}(c);if(d)throw Error(d);let e=`${a}::${b}`;if(!aC.current)throw Error("This host cannot preserve model context in this surface");if(!await aC.current(e,c))throw Error("MCP App model context was not stored");return{}},f.onsizechange=async({width:a,height:b})=>{if(!r()||aI.current)return;let c=al.current?.getBoundingClientRect().width||al.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(k.style.height=`${d.height}px`),void 0!==d.width&&(k.style.width=`${d.width}px`,k.style.maxWidth="100%")},f.onrequestdisplaymode=async({mode:a})=>{if(!r())return{mode:aw.current};let b=aw.current,c=av.current;if(!I(a,ax.current,c))return{mode:b};if("pip"===a&&!aI.current&&aD.current)return setTimeout(aK,0),{mode:b};let d=b;return(d=aG.current?await aG.current(a,[...c]):a)===b||I(d,ax.current,c)||(d=b),d!==b&&(aw.current=d,ag(d),await f.sendHostContextChange({displayMode:d})),{mode:d}},f.onrequestteardown=()=>{r()&&aJ().finally(()=>{aH.current?aH.current():(aw.current="inline",ag("inline"),aa(!1))})},f.oninitialized=()=>{if(!r())return;let a=f.getAppCapabilities()?.availableDisplayModes,b=Array.isArray(a)?[...new Set(a.filter(a=>z.includes(a)))]:[];av.current=b,ai(b),aE.current?.(b.includes("pip")),aF.current?.([...b]),aq.current=!0;let c=function(a,b,c,d){return b?I("pip",c,d)?"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"inline"}(p,aI.current,ax.current,b);if(null===c){ae("This app does not declare support for the canvas (pip) display mode."),ac(!1),aJ();return}aw.current=c,ag(c),c!==q&&f.sendHostContextChange({displayMode:c});let d=al.current;if(d&&"undefined"!=typeof ResizeObserver){let a=()=>{if(!r()||!aq.current)return;let a=d.getBoundingClientRect();a.width<=0||aI.current&&a.height<=0||f.sendHostContextChange({containerDimensions:J(d,aI.current)})};ar.current?.disconnect(),ar.current=new ResizeObserver(a),ar.current.observe(d),a()}let e=aA.current;az.current=e.updateId??`${e.args??""}\u0000${e.resultContent??""}\u0000${e.cancelledReason??""}\u0000${e.isError??""}`,(void 0!==e.args||void 0!==e.resultContent||void 0!==e.cancelledReason||!0===e.isError)&&aL(f,e.args,e.resultContent,e.cancelledReason,e.isError),ac(!1)},await f.connect(function(a,b){let c=new t.hJ(a,b),d={start:async()=>{c.onmessage=(a,b)=>{d.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},c.onerror=a=>d.onerror?.(a),c.onclose=()=>d.onclose?.(),await c.start()},send:(a,b)=>c.send(a,b),close:()=>c.close(),setProtocolVersion:a=>c.setProtocolVersion?.(a)};return d}(k.contentWindow,k.contentWindow)),!r())return;await f.sendSandboxResourceReady({html:i.html,csp:i.csp,permissions:i.permissions})}catch(c){if(!e())return;w.warn(`Failed to mount MCP App ${b} from ${a}`,c),ae(c instanceof Error?c.message:"Failed to load the app."),ac(!1),aJ()}},[aK,aL,a,aJ,$.palette.mode,c,b]),aN=(0,e.useCallback)(()=>{let a=!_;a||"fullscreen"!==aw.current||(aw.current="inline",ag("inline"),an.current?.sendHostContextChange({displayMode:"inline"})),aa(a),a&&setTimeout(()=>{aM()},0)},[_,aM]);if((0,e.useEffect)(()=>{Y&&!ao.current&&aM()},[Y,aM]),(0,e.useEffect)(()=>{let a=L??`${D??""}\u0000${G??""}\u0000${M??""}\u0000${N??""}`;aq.current&&an.current&&a!==az.current&&(az.current=a,aJ().then(()=>{au.current&&(aI.current||_)&&aM()}))},[_,aM,aJ,D,M,N,G,L]),(0,e.useEffect)(()=>{T&&aq.current&&an.current&&aw.current!==T&&I(T,ax.current,av.current)&&(aw.current=T,ag(T),an.current.sendHostContextChange({displayMode:T}))},[T]),(0,e.useEffect)(()=>{aq.current&&an.current&&an.current?.sendHostContextChange({theme:"dark"===$.palette.mode?"dark":"light"})},[$.palette.mode]),(0,e.useEffect)(()=>{let c=X??`${a}::${b}`;return W?.(c,aJ),()=>W?.(c,null)},[W,a,aJ,X,b]),(0,e.useEffect)(()=>{let b=b=>{let c=b.detail;c?.serverName===a&&(c.config?.enableMcpApps===!1||c.config?.disabled===!0)&&(ae("MCP Apps access was disabled for this server."),ac(!1),aJ().finally(()=>{aI.current&&aH.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",b),()=>{window.removeEventListener("flujo:mcp-server-config-changed",b)}},[a,aJ]),(0,e.useEffect)(()=>(au.current=!0,()=>{au.current=!1,aJ()}),[aJ]),Y)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:Z?"visible":"hidden",pointerEvents:Z?"auto":"none",flexDirection:"column"},children:[ab&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ad&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:ad}),(0,d.jsx)(g.default,{ref:al,sx:{flex:1,minHeight:0,width:"100%",display:ad?"none":"block"}})]});let aO=ah.includes("inline")&&ah.includes("fullscreen")&&ak.includes("fullscreen"),aP=ah.includes("inline")&&ah.includes("pip")&&ak.includes("pip")&&!!Q;return(0,d.jsxs)(g.default,{sx:{mt:1,border:"1px solid",borderColor:"divider",borderRadius:1,overflow:"hidden",..."fullscreen"===af?{position:"fixed",inset:16,zIndex:1300,bgcolor:"background.paper",boxShadow:6}:{}},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover"},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsxs)(i.default,{variant:"body2",sx:{fontWeight:500},children:["Interactive app from ",a]}),(0,d.jsx)(k.A,{title:"Runs in a separate-origin sandbox (no access to FLUJO's origin, cookies, storage, or DOM). Its tool calls are brokered through this server only.",children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),_&&aP&&(0,d.jsx)(l.A,{size:"small",onClick:aK,children:"Canvas"}),_&&(0,d.jsx)(k.A,{title:aO?"fullscreen"===af?"Exit fullscreen":"Fullscreen":"This app did not declare inline and fullscreen support",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",disabled:!aO,onClick:()=>{let a="fullscreen"===af?"inline":"fullscreen";I(a,ak,ah)&&(aw.current=a,ag(a),an.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===af?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{size:"small",onClick:aN,startIcon:_?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:_?"Hide":"Open app"})]}),(0,d.jsx)(m.A,{in:_,onExited:()=>{aJ()},children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===af?"calc(100vh - 100px)":"auto"},children:[ab&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ad&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:ad}),(0,d.jsx)(g.default,{ref:al,sx:{width:"100%",height:"fullscreen"===af?"100%":"auto",display:ad?"none":"block"}})]})})]})}},59060:(a,b,c)=>{c.d(b,{Gt:()=>h,Pt:()=>e,q$:()=>g});let d="ui://",e=2097152;function f(a){return"string"==typeof a&&a.length>d.length&&a.slice(0,d.length).toLowerCase()===d&&!/\s/.test(a)}function g(a){if("string"!=typeof a)return!1;let[b,...c]=a.toLowerCase().split(";");if("text/html"!==b.trim())return!1;let d=!1;for(let a of c){let b=a.indexOf("=");if(b<=0)return!1;let c=a.slice(0,b).trim(),e=a.slice(b+1).trim();if(!c||!e)return!1;if("profile"===c){if(d||"mcp-app"!==e)return!1;d=!0}}return d}function h(a){if(!a||"object"!=typeof a)return;let b=a["ui/resourceUri"];if(f(b))return b;for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if(f(a))return a}}},82571:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}}};
|
|
1
|
+
"use strict";exports.id=1227,exports.ids=[1227],exports.modules={34641:(a,b,c)=>{c.d(b,{uJ:()=>B,Ay:()=>L,Yw:()=>C});var d=c(21124),e=c(38301),f=c(60839),g=c(81637),h=c(8521),i=c(79515),j=c(88745),k=c(43312),l=c(68730),m=c(99561),n=c(5748),o=c(1994),p=c(17332),q=c(63908),r=c(36636),s=c(93516),t=c(92543),u=c(28055),v=c(59060);let w=(0,c(19815).h)("frontend/components/Chat/McpAppFrame"),x={name:"FLUJO",version:"3.37.0"},y=new Set(["https:","http:"]),z=["inline","fullscreen","pip"],A=new Set(["text"]),B=262144;function C(a){try{return new TextEncoder().encode(JSON.stringify(a)).length}catch{return 1/0}}let D=null;async function E(){return D||(D=fetch("/api/mcp/app-sandbox").then(async a=>{if(!a.ok)throw Error(`Sandbox endpoint discovery failed (${a.status})`);return await a.json()}).catch(a=>{throw D=null,a})),function(a,b){let c;if("string"!=typeof a.token||0===a.token.length)throw Error("Sandbox endpoint discovery returned invalid credentials");if(void 0!==a.url){if("string"!=typeof a.url)throw Error("Sandbox endpoint discovery returned an invalid public URL");try{c=new URL(a.url)}catch{throw Error("Sandbox endpoint discovery returned an invalid public URL")}if("http:"!==c.protocol&&"https:"!==c.protocol||c.username||c.password)throw Error("Sandbox public URL must be an absolute HTTP(S) URL without credentials");if("https:"===b.protocol&&"https:"!==c.protocol)throw Error("HTTPS FLUJO deployments require an HTTPS MCP Apps sandbox URL")}else{if("http:"!==b.protocol)throw Error("MCP Apps on HTTPS require FLUJO_MCP_APP_SANDBOX_PUBLIC_URL to be configured");if(!Number.isInteger(a.port)||a.port<1||a.port>65535)throw Error("Sandbox endpoint discovery returned an invalid port");(c=new URL("/sandbox.html",b.origin)).port=String(a.port)}if(c.origin===b.origin)throw Error("MCP Apps sandbox must use a distinct origin from FLUJO");return c.searchParams.set("token",a.token),c.href}(await D,window.location)}function F(a,b){let c=[],d=new Set;for(let e of a??[]){if(0===e.length||e.length>2048||/[^\x21-\x7e]/.test(e))continue;let a=/^(https|wss):\/\/(\*\.)?([^/:?#]+)(?::(\d{1,5}))?$/i.exec(e);if(!a||!b.includes(a[1].toLowerCase()))continue;let f=a[3].split(".");if(a[3].length>253||f.some(a=>0===a.length||a.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(a)))continue;let g=a[4]?Number(a[4]):void 0;if(void 0!==g&&(!Number.isInteger(g)||g<1||g>65535))continue;let h=e.toLowerCase();if(!d.has(h)&&(d.add(h),c.push(e),c.length>=64))break}return c}function G(a){if(a)try{return JSON.parse(a)}catch{return}}async function H(a,b,c,d,e){if(await a.sendToolInput({arguments:function(a){let b=G(a);return b&&"object"==typeof b&&!Array.isArray(b)?b:{}}(b)}),void 0!==d)return void await a.sendToolCancelled({reason:d});let f=function(a,b){if(void 0===a)return!0===b?{content:[],isError:!0}:null;let c=G(a);return c&&"object"==typeof c&&Array.isArray(c.content)?{...c,...!0===b?{isError:!0}:{}}:{content:[{type:"text",text:a}],...!0===b?{isError:!0}:{}}}(c,e);f&&await a.sendToolResult(f)}function I(a,b,c){return b.includes(a)&&c.includes(a)}function J(a,b){let c=a.getBoundingClientRect(),d=Math.max(1,Math.round(c.width||a.clientWidth||1));return b?{width:d,height:Math.max(1,Math.round(c.height||a.clientHeight||1))}:{width:d,maxHeight:6e3}}async function K(a,b,c){try{let d=await u.S.listServerTools(a),e=Array.isArray(d.tools)?d.tools:[],f=c?e.find(a=>a?.name===c):e.find(a=>(0,v.Gt)(a?._meta)===b);if(f?.name&&f?.inputSchema&&(0,v.Gt)(f._meta)===b)return{tool:f}}catch(a){w.debug("Could not resolve the full MCP App tool definition",a)}}let L=({serverName:a,uri:b,toolName:c,toolArgs:D,toolResultContent:G,toolUpdateId:L,toolCancelledReason:M,toolIsError:N,onAppMessage:O,onUpdateModelContext:P,onRequestDock:Q,onDockable:R,onAvailableDisplayModes:S,hostDisplayMode:T,onRequestDisplayMode:U,onRequestClose:V,onRegisterTeardown:W,teardownRegistrationKey:X,docked:Y=!1,visible:Z=!0})=>{let $=(0,f.A)(),[_,aa]=(0,e.useState)(!1),[ab,ac]=(0,e.useState)(!1),[ad,ae]=(0,e.useState)(null),[af,ag]=(0,e.useState)(Y?"pip":"inline"),[ah,ai]=(0,e.useState)([]),aj=T??af,ak=(0,e.useMemo)(()=>Y?["pip","fullscreen"]:["inline","fullscreen",...Q?["pip"]:[]],[Y,Q]),al=(0,e.useRef)(null),am=(0,e.useRef)(null),an=(0,e.useRef)(null),ao=(0,e.useRef)(!1),ap=(0,e.useRef)(0),aq=(0,e.useRef)(!1),ar=(0,e.useRef)(null),as=(0,e.useRef)(null),at=(0,e.useRef)(!1),au=(0,e.useRef)(!0),av=(0,e.useRef)([]),aw=(0,e.useRef)(aj),ax=(0,e.useRef)(ak),ay=(0,e.useRef)(Promise.resolve()),az=(0,e.useRef)(void 0),aA=(0,e.useRef)({args:D,resultContent:G,cancelledReason:M,isError:N,updateId:L});aA.current={args:D,resultContent:G,cancelledReason:M,isError:N,updateId:L};let aB=(0,e.useRef)(O);(0,e.useEffect)(()=>{aB.current=O},[O]);let aC=(0,e.useRef)(P);(0,e.useEffect)(()=>{aC.current=P},[P]);let aD=(0,e.useRef)(Q);(0,e.useEffect)(()=>{aD.current=Q},[Q]);let aE=(0,e.useRef)(R);(0,e.useEffect)(()=>{aE.current=R},[R]);let aF=(0,e.useRef)(S);(0,e.useEffect)(()=>{aF.current=S},[S]);let aG=(0,e.useRef)(U);(0,e.useEffect)(()=>{aG.current=U},[U]);let aH=(0,e.useRef)(V);(0,e.useEffect)(()=>{aH.current=V},[V]);let aI=(0,e.useRef)(Y);(0,e.useEffect)(()=>{aI.current=Y},[Y]),(0,e.useEffect)(()=>{aw.current=aj},[aj]),(0,e.useEffect)(()=>{ax.current=ak},[ak]);let aJ=(0,e.useCallback)(()=>{if(as.current)return as.current;ap.current+=1;let a=an.current,b=am.current,c=aq.current;an.current=null,am.current=null,aq.current=!1,ao.current=!1,av.current=[],ar.current?.disconnect(),ar.current=null;let d=(async()=>{if(a&&c){let b;try{await Promise.race([a.teardownResource({},{timeout:1e3}),new Promise(a=>{b=setTimeout(a,1e3)})])}catch(a){w.debug("MCP App did not acknowledge resource teardown",a)}finally{b&&clearTimeout(b)}}try{await a?.close()}catch{}b?.remove()})();return as.current=d,d.finally(()=>{as.current===d&&(as.current=null)}),d},[]),aK=(0,e.useCallback)(()=>{!at.current&&aD.current&&(at.current=!0,aJ().then(()=>{au.current&&(aD.current?.(),aa(!1))}).finally(()=>{at.current=!1}))},[aJ]),aL=(0,e.useCallback)((a,b,c,d,e)=>{ay.current=ay.current.catch(()=>void 0).then(async()=>{an.current===a&&aq.current&&await H(a,b,c,d,e)}).catch(a=>{w.warn("MCP App tool delivery failed",a)})},[]),aM=(0,e.useCallback)(async()=>{if(as.current&&await as.current,ao.current||!al.current)return;let d=ap.current+1;ap.current=d;let e=()=>ap.current===d&&ao.current;ao.current=!0,ai([]),ac(!0),ae(null);try{let f,[g,h]=await Promise.all([u.S.readResourceFromApp(a,b),K(a,b,c)]);if(!e())return;if(g?.httpStatus===403)throw Error(g?.error||"MCP Apps access was disabled for this server");if(!g||!1===g.success)throw Error(g?.error||"Failed to read the UI resource.");let i=function(a,b){var c;let d,e=a?.contents;if(!Array.isArray(e)||0===e.length)throw Error("Resource has no contents");let f=e.find(a=>a.uri===b&&"string"==typeof a.mimeType&&(0,v.q$)(a.mimeType)&&("string"==typeof a.text||"string"==typeof a.blob));if(!f)throw Error(`Resource ${b} did not return MCP App HTML`);try{d="string"==typeof f.text?f.text:function(a){let b=Uint8Array.from(atob(a),a=>a.charCodeAt(0));return new TextDecoder("utf-8",{fatal:!0}).decode(b)}(f.blob)}catch{throw Error(`Resource ${b} contains invalid base64 UTF-8 HTML`)}if(new TextEncoder().encode(d).length>v.Pt)throw Error(`Resource exceeds the ${Math.round(v.Pt/1024)} KiB size cap`);let g=(f._meta??f.meta)?.ui,h=t.c0.safeParse(g?.csp);if(g?.csp!==void 0&&!h.success)throw Error(`Resource ${b} declares an invalid CSP policy`);let i=t.Ml.safeParse(g?.permissions);if(g?.permissions!==void 0&&!i.success)throw Error(`Resource ${b} declares invalid sandbox permissions`);return{html:d,csp:h.success?{connectDomains:F((c=h.data).connectDomains,["https","wss"]),resourceDomains:F(c.resourceDomains,["https"]),frameDomains:F(c.frameDomains,["https"]),baseUriDomains:F(c.baseUriDomains,["https"])}:void 0,permissions:i.success&&i.data.clipboardWrite?{clipboardWrite:{}}:void 0}}(g.data,b),j=await E();if(!e()||!al.current)return;let k=document.createElement("iframe");k.title=`MCP App: ${b}`,k.setAttribute("sandbox","allow-scripts allow-same-origin"),k.referrerPolicy="origin";let l=(0,t.Sy)(i.permissions);l&&k.setAttribute("allow",l),k.style.cssText=aI.current?"width:100%;height:100%;border:none;background:#fff;":"width:100%;min-height:120px;height:200px;border:none;border-radius:4px;background:#fff;",al.current.appendChild(k),am.current=k;let m=new URL(j);i.csp&&m.searchParams.set("csp",JSON.stringify(i.csp));let n=m.origin,o=new Promise((a,b)=>{let c=setTimeout(()=>{window.removeEventListener("message",d),b(Error("Timed out waiting for the sandbox proxy."))},1e4),d=b=>{b.source===k.contentWindow&&b.origin===n&&b.data?.jsonrpc==="2.0"&&b.data?.method==="ui/notifications/sandbox-proxy-ready"&&(clearTimeout(c),window.removeEventListener("message",d),a())};window.addEventListener("message",d)});if(k.src=m.href,await o,!e()||am.current!==k)return;let p=aw.current,q="inline";aw.current=q,f=new t.T1(function(a,b){return{getServerCapabilities:()=>({tools:{},resources:{}}),setNotificationHandler:()=>{},request:async(c,d,e)=>{let{method:f,params:g}=c;if("tools/call"===f){w.info(`MCP App tools/call: ${a}/${g?.name}`);let c=await u.S.callToolFromApp(a,g.name,g.arguments??{},void 0,e?.signal);if(c?.httpStatus===403){let a=c?.error||"MCP Apps access was disabled for this server";throw b(a),Error(a)}if(!c||!1===c.success)throw Error(c?.error||`Tool call failed: ${g?.name}`);return c.data}if("resources/read"===f){let c=await u.S.readResourceFromApp(a,g.uri);if(c?.httpStatus===403){let a=c?.error||"MCP Apps access was disabled for this server";throw b(a),Error(a)}if(!c||!1===c.success)throw Error(c?.error||`Resource read failed: ${g?.uri}`);return c.data}if("resources/list"===f)return{resources:[]};if("resources/templates/list"===f)return{resourceTemplates:[]};throw Error(`MCP App requested unsupported method: ${f}`)}}}(a,a=>{ap.current===d&&an.current===f&&(ae(a),ac(!1),aJ())}),x,{openLinks:{},serverTools:{},serverResources:{},logging:{},...aB.current?{message:{text:{}}}:{},...aC.current?{updateModelContext:{text:{},structuredContent:{}}}:{},sandbox:{csp:i.csp,permissions:i.permissions}},{hostContext:{...h?{toolInfo:h}:{},theme:"dark"===$.palette.mode?"dark":"light",platform:"web",displayMode:q,availableDisplayModes:ax.current,containerDimensions:J(al.current,aI.current),locale:navigator.language,timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,userAgent:navigator.userAgent,deviceCapabilities:{touch:navigator.maxTouchPoints>0,hover:window.matchMedia?.("(hover: hover)").matches??!1}}}),an.current=f;let r=()=>e()&&an.current===f;if(f.onopenlink=async({url:c})=>{if(!r())return{isError:!0};let d=function(a){try{let b=new URL(a);if(!y.has(b.protocol)||b.username||b.password)return null;return b.href}catch{return null}}(c);if(!d)return w.warn("MCP App open-link rejected by URL policy",{serverName:a,uri:b}),{isError:!0};let e=window.open(d,"_blank","noopener,noreferrer");return e?(e.opener=null,{}):{isError:!0}},f.ondownloadfile=async({contents:a})=>{if(!r())return{isError:!0};try{for(let b of a??[]){let a,c=b?.resource;if(!c)continue;let d=("string"==typeof c.uri?c.uri.split("/").pop():"")||"download",e="string"==typeof c.mimeType?c.mimeType:"application/octet-stream";if("string"==typeof c.blob){let b=Uint8Array.from(atob(c.blob),a=>a.charCodeAt(0));a=new Blob([b],{type:e})}else a=new Blob([String(c.text??"")],{type:e});let f=URL.createObjectURL(a),g=document.createElement("a");g.href=f,g.download=d,document.body.appendChild(g),g.click(),g.remove(),setTimeout(()=>URL.revokeObjectURL(f),4e3)}return{}}catch(a){return w.warn("MCP App download failed",a),{isError:!0}}},f.onloggingmessage=a=>{r()&&w.debug("MCP App log",a?.data)},f.onmessage=async a=>{if(!r())return{};if(!aB.current)throw Error("This host cannot deliver ui/message in this surface");let b=function(a){if(a?.role!=="user")throw Error('This host accepts ui/message only with role "user"');let b=a?.content,c=Array.isArray(b)?b:b&&"object"==typeof b?[b]:[];if(0===c.length||c.some(a=>a?.type!=="text"||"string"!=typeof a.text))throw Error("This host accepts text-only ui/message content");let d=c.map(a=>a.text).join("\n").trim();if(!d)throw Error("ui/message text must not be empty");return d}(a);if(!await aB.current(b))throw Error("ui/message was not delivered");return{}},f.onupdatemodelcontext=async c=>{if(!r())return{};let d=function(a){if(!a||"object"!=typeof a||Array.isArray(a))return"ui/update-model-context params must be an object";if(void 0!==a.content){if(!Array.isArray(a.content))return"Model context content must be an array";for(let b of a.content)if(!b||"object"!=typeof b||Array.isArray(b)||!A.has(b.type))return"Model context contains a modality this host did not advertise"}return void 0!==a.structuredContent&&(!a.structuredContent||"object"!=typeof a.structuredContent||Array.isArray(a.structuredContent))?"Model structuredContent must be an object":C(a)>B?`Model context exceeds ${B} bytes`:null}(c);if(d)throw Error(d);let e=`${a}::${b}`;if(!aC.current)throw Error("This host cannot preserve model context in this surface");if(!await aC.current(e,c))throw Error("MCP App model context was not stored");return{}},f.onsizechange=async({width:a,height:b})=>{if(!r()||aI.current)return;let c=al.current?.getBoundingClientRect().width||al.current?.clientWidth||0,d=function(a,b){let c={};if(Number.isFinite(a.width)&&a.width>0){let d=Number.isFinite(b)&&b>0?b:6e3;c.width=Math.min(a.width,d,6e3)}return Number.isFinite(a.height)&&a.height>0&&(c.height=Math.min(a.height,6e3)),c}({width:a,height:b},c);void 0!==d.height&&(k.style.height=`${d.height}px`),void 0!==d.width&&(k.style.width=`${d.width}px`,k.style.maxWidth="100%")},f.onrequestdisplaymode=async({mode:a})=>{if(!r())return{mode:aw.current};let b=aw.current,c=av.current;if(!I(a,ax.current,c))return{mode:b};if("pip"===a&&!aI.current&&aD.current)return setTimeout(aK,0),{mode:b};let d=b;return(d=aG.current?await aG.current(a,[...c]):a)===b||I(d,ax.current,c)||(d=b),d!==b&&(aw.current=d,ag(d),await f.sendHostContextChange({displayMode:d})),{mode:d}},f.onrequestteardown=()=>{r()&&aJ().finally(()=>{aH.current?aH.current():(aw.current="inline",ag("inline"),aa(!1))})},f.oninitialized=()=>{if(!r())return;let a=f.getAppCapabilities()?.availableDisplayModes,b=Array.isArray(a)?[...new Set(a.filter(a=>z.includes(a)))]:[];av.current=b,ai(b),aE.current?.(b.includes("pip")),aF.current?.([...b]),aq.current=!0;let c=function(a,b,c,d){return b?I("pip",c,d)?"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"pip":null:"fullscreen"===a&&I("fullscreen",c,d)?"fullscreen":"inline"}(p,aI.current,ax.current,b);if(null===c){ae("This app does not declare support for the canvas (pip) display mode."),ac(!1),aJ();return}aw.current=c,ag(c),c!==q&&f.sendHostContextChange({displayMode:c});let d=al.current;if(d&&"undefined"!=typeof ResizeObserver){let a=()=>{if(!r()||!aq.current)return;let a=d.getBoundingClientRect();a.width<=0||aI.current&&a.height<=0||f.sendHostContextChange({containerDimensions:J(d,aI.current)})};ar.current?.disconnect(),ar.current=new ResizeObserver(a),ar.current.observe(d),a()}let e=aA.current;az.current=e.updateId??`${e.args??""}\u0000${e.resultContent??""}\u0000${e.cancelledReason??""}\u0000${e.isError??""}`,(void 0!==e.args||void 0!==e.resultContent||void 0!==e.cancelledReason||!0===e.isError)&&aL(f,e.args,e.resultContent,e.cancelledReason,e.isError),ac(!1)},await f.connect(function(a,b){let c=new t.hJ(a,b),d={start:async()=>{c.onmessage=(a,b)=>{d.onmessage?.("ui/message"!==a.method||!a.params||Array.isArray(a.params.content)||!a.params.content||"object"!=typeof a.params.content?a:{...a,params:{...a.params,content:[a.params.content]}},b)},c.onerror=a=>d.onerror?.(a),c.onclose=()=>d.onclose?.(),await c.start()},send:(a,b)=>c.send(a,b),close:()=>c.close(),setProtocolVersion:a=>c.setProtocolVersion?.(a)};return d}(k.contentWindow,k.contentWindow)),!r())return;await f.sendSandboxResourceReady({html:i.html,csp:i.csp,permissions:i.permissions})}catch(c){if(!e())return;w.warn(`Failed to mount MCP App ${b} from ${a}`,c),ae(c instanceof Error?c.message:"Failed to load the app."),ac(!1),aJ()}},[aK,aL,a,aJ,$.palette.mode,c,b]),aN=(0,e.useCallback)(()=>{let a=!_;a||"fullscreen"!==aw.current||(aw.current="inline",ag("inline"),an.current?.sendHostContextChange({displayMode:"inline"})),aa(a),a&&setTimeout(()=>{aM()},0)},[_,aM]);if((0,e.useEffect)(()=>{Y&&!ao.current&&aM()},[Y,aM]),(0,e.useEffect)(()=>{let a=L??`${D??""}\u0000${G??""}\u0000${M??""}\u0000${N??""}`;aq.current&&an.current&&a!==az.current&&(az.current=a,aJ().then(()=>{au.current&&(aI.current||_)&&aM()}))},[_,aM,aJ,D,M,N,G,L]),(0,e.useEffect)(()=>{T&&aq.current&&an.current&&aw.current!==T&&I(T,ax.current,av.current)&&(aw.current=T,ag(T),an.current.sendHostContextChange({displayMode:T}))},[T]),(0,e.useEffect)(()=>{aq.current&&an.current&&an.current?.sendHostContextChange({theme:"dark"===$.palette.mode?"dark":"light"})},[$.palette.mode]),(0,e.useEffect)(()=>{let c=X??`${a}::${b}`;return W?.(c,aJ),()=>W?.(c,null)},[W,a,aJ,X,b]),(0,e.useEffect)(()=>{let b=b=>{let c=b.detail;c?.serverName===a&&(c.config?.enableMcpApps===!1||c.config?.disabled===!0)&&(ae("MCP Apps access was disabled for this server."),ac(!1),aJ().finally(()=>{aI.current&&aH.current?.()}))};return window.addEventListener("flujo:mcp-server-config-changed",b),()=>{window.removeEventListener("flujo:mcp-server-config-changed",b)}},[a,aJ]),(0,e.useEffect)(()=>(au.current=!0,()=>{au.current=!1,aJ()}),[aJ]),Y)return(0,d.jsxs)(g.default,{sx:{height:"100%",width:"100%",minHeight:0,display:"flex",visibility:Z?"visible":"hidden",pointerEvents:Z?"auto":"none",flexDirection:"column"},children:[ab&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ad&&(0,d.jsx)(j.A,{severity:"error",sx:{m:1},children:ad}),(0,d.jsx)(g.default,{ref:al,sx:{flex:1,minHeight:0,width:"100%",display:ad?"none":"block"}})]});let aO=ah.includes("inline")&&ah.includes("fullscreen")&&ak.includes("fullscreen"),aP=ah.includes("inline")&&ah.includes("pip")&&ak.includes("pip")&&!!Q;return(0,d.jsxs)(g.default,{sx:{mt:1,border:"1px solid",borderColor:"divider",borderRadius:1,overflow:"hidden",..."fullscreen"===af?{position:"fixed",inset:16,zIndex:1300,bgcolor:"background.paper",boxShadow:6}:{}},children:[(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,px:1,py:.5,bgcolor:"action.hover"},children:[(0,d.jsx)(n.A,{fontSize:"small",color:"primary"}),(0,d.jsxs)(i.default,{variant:"body2",sx:{fontWeight:500},children:["Interactive app from ",a]}),(0,d.jsx)(k.A,{title:"Runs in a separate-origin sandbox (no access to FLUJO's origin, cookies, storage, or DOM). Its tool calls are brokered through this server only.",children:(0,d.jsx)(o.A,{fontSize:"small",color:"action"})}),(0,d.jsx)(g.default,{sx:{flex:1}}),_&&aP&&(0,d.jsx)(l.A,{size:"small",onClick:aK,children:"Canvas"}),_&&(0,d.jsx)(k.A,{title:aO?"fullscreen"===af?"Exit fullscreen":"Fullscreen":"This app did not declare inline and fullscreen support",children:(0,d.jsx)("span",{children:(0,d.jsx)(l.A,{size:"small",disabled:!aO,onClick:()=>{let a="fullscreen"===af?"inline":"fullscreen";I(a,ak,ah)&&(aw.current=a,ag(a),an.current?.sendHostContextChange({displayMode:a}))},sx:{minWidth:0},children:"fullscreen"===af?(0,d.jsx)(s.A,{fontSize:"small"}):(0,d.jsx)(r.A,{fontSize:"small"})})})}),(0,d.jsx)(l.A,{size:"small",onClick:aN,startIcon:_?(0,d.jsx)(q.A,{}):(0,d.jsx)(p.A,{}),children:_?"Hide":"Open app"})]}),(0,d.jsx)(m.A,{in:_,onExited:()=>{aJ()},children:(0,d.jsxs)(g.default,{sx:{p:1,height:"fullscreen"===af?"calc(100vh - 100px)":"auto"},children:[ab&&(0,d.jsxs)(g.default,{sx:{display:"flex",alignItems:"center",gap:1,py:2,justifyContent:"center"},children:[(0,d.jsx)(h.default,{size:16,thickness:6}),(0,d.jsx)(i.default,{variant:"body2",color:"text.secondary",children:"Loading the app…"})]}),ad&&(0,d.jsx)(j.A,{severity:"error",sx:{my:1},children:ad}),(0,d.jsx)(g.default,{ref:al,sx:{width:"100%",height:"fullscreen"===af?"100%":"auto",display:ad?"none":"block"}})]})})]})}},59060:(a,b,c)=>{c.d(b,{Gt:()=>h,Pt:()=>e,q$:()=>g});let d="ui://",e=2097152;function f(a){return"string"==typeof a&&a.length>d.length&&a.slice(0,d.length).toLowerCase()===d&&!/\s/.test(a)}function g(a){if("string"!=typeof a)return!1;let[b,...c]=a.toLowerCase().split(";");if("text/html"!==b.trim())return!1;let d=!1;for(let a of c){let b=a.indexOf("=");if(b<=0)return!1;let c=a.slice(0,b).trim(),e=a.slice(b+1).trim();if(!c||!e)return!1;if("profile"===c){if(d||"mcp-app"!==e)return!1;d=!0}}return d}function h(a){if(!a||"object"!=typeof a)return;let b=a["ui/resourceUri"];if(f(b))return b;for(let b of[a.ui,a["io.modelcontextprotocol/ui"]])if(b&&"object"==typeof b){let a=b.resourceUri;if(f(a))return a}}},82571:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e,yo:()=>g});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase(),g=a=>{if(!a)return a;if(a.includes("_-_-_")){let b=a.split("_-_-_");return 3===b.length?b[2]:a}let b=/^mcp_(.+)_[0-9a-z]+$/.exec(a);if(b&&b[1])return b[1];let c=a.indexOf("__");return c>0&&c+2<a.length?a.slice(c+2):a}}};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.id=2273,exports.ids=[1925,2273,3629,4306,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},28511:(a,b,c)=>{c.d(b,{Ed:()=>u,ae:()=>w,jA:()=>x,qf:()=>v});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(20433),n=c(87821),o=c(60453),p=c(4771);let q=(0,f.h)("backend/services/packages/installPackage");function r(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function s(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>s(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=s(e,b);return c}return a}async function t(a){if(!a||0===a.length)return[];let b=await (0,g.loadItem)(h.Z.GLOBAL_ENV_VARS,{});return a.filter(a=>!Object.prototype.hasOwnProperty.call(b,a))}async function u(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await z(e,j),missingGlobals:await t(e.requiredGlobals)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let n=await m.modelService.loadModels(),p=new Set((e.models??[]).map(a=>a.id)),r=new Map(n.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!p.has(b)||!r.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let u={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await t(e.requiredGlobals)},v=(e.models??[]).map(a=>s(a,f)),w=(e.flows??[]).map(a=>s(a,f)),x=(e.plannedExecutions??[]).map(a=>s(a,f)),y={flows:{},models:{},servers:[],plannedExecutions:[]},A={flows:[],models:[],servers:[],plannedExecutions:[]},B=new Set,D=new Map;try{let a=await o.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)B.add(b.name),D.set(b.name,b)}catch(a){q.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await C(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});let E={};for(let b of v){let c=a.modelMappings?.[b.id];if(c){let a=r.get(c);E[b.id]={id:a.id,name:a.name},u.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await F(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});d&&(E[b.id]=d)}let I=await G(e.name,w,E,u,y,A);for(let a of x)await H(a,e.name,I,u,y,A);try{let a=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:u,entities:y,created:A},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){q.warn("installPackage: failed to persist install ledger",a)}return u}async function v(a){let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function w(){return Object.values(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function x(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,p.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>n.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>o.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>m.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){q.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function y(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function z(a,b){let c=await m.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:y(c),requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)}))}}function A(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar?(f[b.name]=`\${global:${b.globalVar}}`,b.isSecret&&g.add(b.name)):b.globalTemplate&&(f[b.name]=b.globalTemplate,b.isSecret&&g.add(b.name));return{values:f,secretNames:g,missingRequired:h}}async function B(a,b,c,d,e){let{packageFolder:f,summary:g,ledgerEntities:h,existingServerConfigs:i}=b,j=y(a),k=i.get(a.name);if(!k){g.servers.push({localName:a.name,source:j,installed:!1,error:"server vanished between snapshot and install"}),g.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let l={...k.env??{}};for(let[a,b]of Object.entries(d))l[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let m=k.args,n=Array.isArray(m)?[...m]:[];for(let b of a.argTemplates??[]){if(b.index>n.length||b.index<n.length&&!/\$\{global:[A-Za-z0-9_.-]+\}/.test(n[b.index])){let c=`argument template index ${b.index} cannot replace a static existing argument`;g.servers.push({localName:a.name,source:j,installed:!1,error:c}),g.skipped.push({type:"server",name:a.name,note:c});return}n[b.index]=b.value}let p=await o.mcpService.updateServerConfig(a.name,{env:l,folder:f,...a.argTemplates?.length?{args:n}:{}});if(!Array.isArray(p)&&p&&"success"in p&&!1===p.success){let b=p.error??"unknown error";g.servers.push({localName:a.name,source:j,installed:!1,error:b}),g.skipped.push({type:"server",name:a.name,note:b});return}h.servers.push(a.name),g.servers.push({localName:a.name,source:j,installed:!0,serverName:a.name,alreadyExisted:!0});let q=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;g.updated.push({type:"server",name:a.name,id:a.name,...q?{note:q}:{}})}async function C(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=y(a),i=a.installOrigin,j=A(a.envDeclarations,b),k=A(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){d.servers.push({localName:a.name,source:h,installed:!1,error:"GitHub-sourced servers are not auto-installable yet — install manually from the MCP page"}),d.skipped.push({type:"server",name:a.name,note:"GitHub-sourced servers require manual install"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await B(a,b,m,j.values,j.secretNames);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=a.argTemplates?.length?await (0,l.aM)(c,j.values,{argTemplates:a.argTemplates}):await (0,l.aM)(c,j.values),n={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(n),k.installed){k.serverName&&await D(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await E(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let p=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,p,n,j.secretNames),i=await o.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...p?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};p?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function D(a,b){try{let c=await o.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function E(a,b,c){if(0===c.size)return;let d=await o.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await o.mcpService.updateServerConfig(a,{env:f})}catch(b){q.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function F(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let n=a.displayName||a.name,o={name:a.name,displayName:n,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},p=(await m.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===n.toLowerCase());if(p){let b=await m.modelService.updateModel({...p,...o,id:p.id});if(b.success){j.models[n]=p.id;let b={type:"model",name:n,id:p.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:p.id,name:a.name}}return void i.skipped.push({type:"model",name:n,note:b.error})}let q=(0,e.A)(),r=await m.modelService.addModel({id:q,...o});if(r.success){j.models[n]=q,k.models.push(q);let b={type:"model",name:n,id:q};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:q,name:a.name}}i.skipped.push({type:"model",name:n,note:r.error})}async function G(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${r(a)}-${r(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await n.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await n.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function H(a,b,c,d,e,f){var g;let h=(0,p.getSchedulerService)(),i=(g=a.name,`pkg-${r(b)}-${r(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,q={...o,id:i,flowId:j,folder:b,enabled:!1},s=await h.create(q);if(s.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(s.conflict){let{id:b,...c}=q,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:s.error})}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
1
|
+
"use strict";exports.id=2273,exports.ids=[1925,2273,3629,4306,6793,9174],exports.modules={1925:(a,b,c)=>{c.d(b,{Hm:()=>f,xc:()=>e});let d=["key","secret","token","password"],e=a=>d.some(b=>a.toLowerCase().includes(b)),f=a=>e(a)||"authorization"===a.trim().toLowerCase()},21508:(a,b,c)=>{c.d(b,{Qs:()=>d,oT:()=>f});let d="https://registry.flujo.com.co",e=["github","google"];function f(a){return"string"==typeof a&&e.includes(a)}},28511:(a,b,c)=>{c.d(b,{Ed:()=>u,ae:()=>w,jA:()=>x,qf:()=>v});var d=c(55511),e=c(32524),f=c(50846),g=c(92372),h=c(38844),i=c(25113),j=c(93868),k=c(75943),l=c(14265),m=c(20433),n=c(87821),o=c(60453),p=c(4771);let q=(0,f.h)("backend/services/packages/installPackage");function r(a){return a.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function s(a,b){if("string"==typeof a){if(!a.includes("{{secret."))return a;let c=RegExp(j.HQ.source,"g");return a.replace(c,(a,c)=>Object.prototype.hasOwnProperty.call(b,c)?b[c]:a)}if(Array.isArray(a))return a.map(a=>s(a,b));if(a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=s(e,b);return c}return a}async function t(a){let b=new Set(a.requiredGlobals??[]);for(let c of a.globals??[])c.required&&b.add(c.name);if(0===b.size)return[];let c=await (0,g.loadItem)(h.Z.GLOBAL_ENV_VARS,{});return[...b].filter(a=>!Object.prototype.hasOwnProperty.call(c,a))}async function u(a){let b,c=()=>({ok:!1,dryRun:!0!==a.consentGranted,created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]});if("registry"!==a.source){let b=c();return b.errors.push(`Unsupported package source: ${String(a.source)}`),b}try{b=await (0,k.g)(a.packageId,a.version)}catch(d){let b=c();return b.errors.push(`Failed to fetch package "${a.packageId}": ${d instanceof Error?d.message:String(d)}`),b}let d=(0,i.$j)(b);if(!d.success||!d.data){let a=c();return a.errors.push("Invalid package manifest.",...d.errors??[]),a}let e=d.data,f=a.secrets??{},j=a=>Object.prototype.hasOwnProperty.call(f,a)&&`${f[a]??""}`.length>0,l=a=>(e.secrets??[]).some(b=>b.name===a&&!0===b.required);if(!0!==a.consentGranted)return{ok:!0,dryRun:!0,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},preview:{...await z(e,j),missingGlobals:await t(e)},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:[]};let n=await m.modelService.loadModels(),p=new Set((e.models??[]).map(a=>a.id)),r=new Map(n.map(a=>[a.id,a]));for(let[b,d]of Object.entries(a.modelMappings??{}))if(!p.has(b)||!r.has(d)){let a=c();return a.errors.push(`Invalid model mapping: "${b}" -> "${d}"`),a}let u={ok:!0,dryRun:!1,package:{name:e.name,version:e.version,...e.publisher?{publisher:e.publisher}:{}},created:[],updated:[],skipped:[],disabled:[],servers:[],errors:[],missingGlobals:await t(e)},v=(e.models??[]).map(a=>s(a,f)),w=(e.flows??[]).map(a=>s(a,f)),x=(e.plannedExecutions??[]).map(a=>s(a,f)),y={flows:{},models:{},servers:[],plannedExecutions:[]},A={flows:[],models:[],servers:[],plannedExecutions:[]},B=new Set,D=new Map;try{let a=await o.mcpService.loadServerConfigs();if(Array.isArray(a))for(let b of a)B.add(b.name),D.set(b.name,b)}catch(a){q.warn("installPackage: failed to snapshot existing server names",a)}for(let a of e.mcpServers??[])await C(a,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});let E={};for(let b of v){let c=a.modelMappings?.[b.id];if(c){let a=r.get(c);E[b.id]={id:a.id,name:a.name},u.skipped.push({type:"model",name:b.displayName||b.name,id:a.id,note:`substituted with installed model "${a.displayName||a.name}"`});continue}let d=await F(b,{packageFolder:e.name,secrets:f,secretProvided:j,secretRequired:l,summary:u,ledgerEntities:y,ledgerCreated:A,existingServerNames:B,existingServerConfigs:D});d&&(E[b.id]=d)}let I=await G(e.name,w,E,u,y,A);for(let a of x)await H(a,e.name,I,u,y,A);try{let a=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});a[e.name]={packageName:e.name,version:e.version,installedAt:new Date().toISOString(),summary:u,entities:y,created:A},await (0,g.VH)(h.Z.PACKAGE_INSTALLS,a)}catch(a){q.warn("installPackage: failed to persist install ledger",a)}return u}async function v(a){let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});return b[a]?.summary??null}async function w(){return Object.values(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{})).map(a=>({packageName:a.packageName,version:a.version,installedAt:a.installedAt,entityCounts:{flows:Object.keys(a.entities?.flows??{}).length,models:Object.keys(a.entities?.models??{}).length,servers:(a.entities?.servers??[]).length,plannedExecutions:(a.entities?.plannedExecutions??[]).length}}))}async function x(a){let b={packageName:a,ok:!0,hasErrors:!1,removed:[],skipped:[],errors:[]},c=(await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{}))[a];if(!c)return b;let d=c.created,e=void 0!==d,f=async(a,c)=>{try{var d,e=await c();e.success?b.removed.push(a):(d=e.error)&&/not found|no planned execution with id|does not exist/i.test(d)?b.skipped.push({...a,reason:"not found"}):b.errors.push({...a,reason:e.error??"delete failed"})}catch(c){b.errors.push({...a,reason:c instanceof Error?c.message:String(c)})}},i=(0,p.getSchedulerService)();for(let a of c.entities?.plannedExecutions??[]){let c={kind:"plannedExecution",id:a};if(e&&!d.plannedExecutions.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>i.delete(a))}for(let[a,g]of Object.entries(c.entities?.flows??{})){let c={kind:"flow",id:g,label:a};if(e&&!d.flows.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>n.flowService.deleteFlow(g))}for(let a of c.entities?.servers??[]){let c={kind:"server",id:a};if(e&&!d.servers.includes(a)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>o.mcpService.deleteServerConfig(a))}for(let[a,g]of Object.entries(c.entities?.models??{})){let c={kind:"model",id:g,label:a};if(!e){b.skipped.push({...c,reason:"legacy-ledger-no-provenance"});continue}if(!d.models.includes(g)){b.skipped.push({...c,reason:"adopted-not-created"});continue}await f(c,()=>m.modelService.deleteModel(g))}if(b.hasErrors=b.errors.length>0,b.ok=!b.hasErrors,!b.hasErrors)try{let b=await (0,g.loadItem)(h.Z.PACKAGE_INSTALLS,{});delete b[a],await (0,g.VH)(h.Z.PACKAGE_INSTALLS,b)}catch(a){q.warn("uninstallPackage: failed to delete ledger entry",a)}return b}function y(a){let b=a.installOrigin;return"remote"===b.sourceType?`remote:${b.url}`:`${b.sourceType}:${b.ref??b.name??a.name}`}async function z(a,b){let c=await m.modelService.loadModels();return{servers:(a.mcpServers??[]).map(c=>({localName:c.name,source:y(c),requiredEnvMissing:[...c.envDeclarations,...c.headerDeclarations??[]].map(a=>a.secretRef).filter(a=>"string"==typeof a&&a.length>0).filter(c=>(a.secrets??[]).some(a=>a.name===c&&a.required)&&!b(c))})),models:(a.models??[]).map(c=>({id:c.id,displayName:c.displayName||c.name,..."global"===c.apiKeyRef.kind?{apiKeyFrom:`\${global:${c.apiKeyRef.var}}`}:"secret"===c.apiKeyRef.kind?{apiKeyFrom:`secret:${c.apiKeyRef.secret}`}:{},..."secret"===c.apiKeyRef.kind&&(a.secrets??[]).some(a=>a.name===c.apiKeyRef.secret&&a.required)&&!b(c.apiKeyRef.secret)?{missingRequiredSecret:!0}:{}})),installedModels:c.map(a=>({id:a.id,displayName:a.displayName||a.name,name:a.name})),flows:(a.flows??[]).map(a=>({name:a.flow.name})),plannedExecutions:(a.plannedExecutions??[]).map(a=>({name:a.name})),secrets:(a.secrets??[]).map(a=>({key:a.name,...a.description?{label:a.description}:{},required:!0===a.required,provided:b(a.name)})),globals:a.globals??[]}}function A(a,b){let{secrets:c,secretProvided:d,secretRequired:e}=b,f={},g=new Set,h=[];for(let b of a)b.secretRef?d(b.secretRef)?(f[b.name]=c[b.secretRef],b.isSecret&&g.add(b.name)):e(b.secretRef)&&h.push(b.name):b.globalVar?(f[b.name]=`\${global:${b.globalVar}}`,b.isSecret&&g.add(b.name)):b.globalTemplate&&(f[b.name]=b.globalTemplate,b.isSecret&&g.add(b.name));return{values:f,secretNames:g,missingRequired:h}}async function B(a,b,c,d,e){let{packageFolder:f,summary:g,ledgerEntities:h,existingServerConfigs:i}=b,j=y(a),k=i.get(a.name);if(!k){g.servers.push({localName:a.name,source:j,installed:!1,error:"server vanished between snapshot and install"}),g.skipped.push({type:"server",name:a.name,note:"server not found in configs (stale snapshot)"});return}let l={...k.env??{}};for(let[a,b]of Object.entries(d))l[a]=e.has(a)?{value:b,metadata:{isSecret:!0}}:b;let m=k.args,n=Array.isArray(m)?[...m]:[];for(let b of a.argTemplates??[]){if(b.index>n.length||b.index<n.length&&!/\$\{global:[A-Za-z0-9_.-]+\}/.test(n[b.index])){let c=`argument template index ${b.index} cannot replace a static existing argument`;g.servers.push({localName:a.name,source:j,installed:!1,error:c}),g.skipped.push({type:"server",name:a.name,note:c});return}n[b.index]=b.value}let p=await o.mcpService.updateServerConfig(a.name,{env:l,folder:f,...a.argTemplates?.length?{args:n}:{}});if(!Array.isArray(p)&&p&&"success"in p&&!1===p.success){let b=p.error??"unknown error";g.servers.push({localName:a.name,source:j,installed:!1,error:b}),g.skipped.push({type:"server",name:a.name,note:b});return}h.servers.push(a.name),g.servers.push({localName:a.name,source:j,installed:!0,serverName:a.name,alreadyExisted:!0});let q=c.length>0?`env partially merged — missing required secret(s) for: ${c.join(", ")}`:void 0;g.updated.push({type:"server",name:a.name,id:a.name,...q?{note:q}:{}})}async function C(a,b){let{secrets:c,summary:d,ledgerEntities:e,ledgerCreated:f,existingServerNames:g}=b,h=y(a),i=a.installOrigin,j=A(a.envDeclarations,b),k=A(a.headerDeclarations??[],b),m=[...j.missingRequired,...k.missingRequired],n={};for(let[a,b]of Object.entries(k.values))n[a]=k.secretNames.has(a)?{value:b,metadata:{isSecret:!0}}:b;if("github"===i.sourceType){d.servers.push({localName:a.name,source:h,installed:!1,error:"GitHub-sourced servers are not auto-installable yet — install manually from the MCP page"}),d.skipped.push({type:"server",name:a.name,note:"GitHub-sourced servers require manual install"});return}if("registry"===i.sourceType||"marketplace"===i.sourceType){let c=i.ref??i.name;if(!c){d.servers.push({localName:a.name,source:h,installed:!1,error:"missing registry ref"}),d.skipped.push({type:"server",name:a.name,note:"installOrigin has no ref/name"});return}if(g.has(a.name))return void await B(a,b,m,j.values,j.secretNames);if(m.length>0){d.disabled.push({type:"server",name:a.name,note:`missing required secret(s) for: ${m.join(", ")}`}),d.servers.push({localName:a.name,source:h,installed:!1,needsEnv:m});return}let k=a.argTemplates?.length?await (0,l.aM)(c,j.values,{argTemplates:a.argTemplates}):await (0,l.aM)(c,j.values),n={localName:a.name,source:h,installed:k.installed,...k.serverName?{serverName:k.serverName}:{},...k.alreadyExisted?{alreadyExisted:!0}:{},...k.needsEnv?{needsEnv:k.needsEnv}:{},...k.error?{error:k.error}:{}};if(d.servers.push(n),k.installed){k.serverName&&await D(k.serverName,b.packageFolder),k.serverName&&e.servers.push(k.serverName);let c={type:"server",name:a.name,...k.serverName?{id:k.serverName}:{}};k.alreadyExisted?d.updated.push(c):(k.serverName&&f.servers.push(k.serverName),d.created.push(c),k.serverName&&j.secretNames.size>0&&await E(k.serverName,j.values,j.secretNames))}else d.skipped.push({type:"server",name:a.name,note:k.error??(k.needsEnv?`needs env: ${k.needsEnv.join(", ")}`:"not installed")});return}let p=m.length>0;try{let c=function(a,b,c,d,e,f){let g=a.installOrigin;if("remote"!==g.sourceType||!g.url)throw Error("buildRemoteServerConfig called for a non-remote (or url-less) server");let h="websocket"===a.transport||"sse"===a.transport||"streamable"===a.transport?a.transport:"streamable",i={name:a.name,folder:b,disabled:d,autoApprove:a.autoApprove??[],rootPath:"",env:Object.fromEntries(Object.entries(c).map(([a,b])=>[a,f.has(a)?{value:b,metadata:{isSecret:!0}}:b])),_buildCommand:"",_installCommand:""};if("websocket"===h)return{...i,transport:"websocket",websocketUrl:g.url};let j=Object.keys(e).length>0;return{...i,transport:h,serverUrl:g.url,...j?{headers:e}:{}}}(a,b.packageFolder,j.values,p,n,j.secretNames),i=await o.mcpService.updateServerConfig(a.name,c);if(!Array.isArray(i)&&i&&"success"in i&&!1===i.success){let b=i.error??"unknown error";d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b});return}e.servers.push(a.name),g.has(a.name)||f.servers.push(a.name),d.servers.push({localName:a.name,source:h,installed:!0,serverName:a.name,...p?{disabled:!0,needsEnv:m}:{}});let k={type:"server",name:a.name,id:a.name};p?d.disabled.push({...k,note:`installed disabled — missing required secret(s) for: ${m.join(", ")}`}):d.created.push(k)}catch(c){let b=c instanceof Error?c.message:String(c);d.servers.push({localName:a.name,source:h,installed:!1,error:b}),d.skipped.push({type:"server",name:a.name,note:b})}}async function D(a,b){try{let c=await o.mcpService.updateServerConfig(a,{folder:b});!Array.isArray(c)&&c&&"success"in c&&!1===c.success&&q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}": ${c.error??"unknown error"}`)}catch(c){q.warn(`assignServerPackageFolder: failed to assign "${a}" to "${b}"`,c)}}async function E(a,b,c){if(0===c.size)return;let d=await o.mcpService.loadServerConfigs().catch(()=>null);if(!Array.isArray(d))return;let e=d.find(b=>b.name===a);if(!e)return;let f={...e.env??{}},g=!1;for(let a of c)void 0!==b[a]&&(f[a]={value:b[a],metadata:{isSecret:!0}},g=!0);if(g)try{await o.mcpService.updateServerConfig(a,{env:f})}catch(b){q.warn(`tagSecretEnvKeys: failed to re-tag secret env for "${a}"`,b)}}async function F(a,b){let c,{packageFolder:d,secrets:f,secretProvided:g,secretRequired:h,summary:i,ledgerEntities:j,ledgerCreated:k}=b,l="";if("global"===a.apiKeyRef.kind)l=`\${global:${a.apiKeyRef.var}}`;else if("secret"===a.apiKeyRef.kind){let b=a.apiKeyRef.secret;g(b)?l=f[b]:h(b)&&(c=`installed without an API key — missing required secret "${b}"`)}let n=a.displayName||a.name,o={name:a.name,displayName:n,...a.provider?{provider:a.provider}:{},...a.adapter?{adapter:a.adapter}:{},...a.baseUrl?{baseUrl:a.baseUrl}:{},...a.description?{description:a.description}:{},...a.promptTemplate?{promptTemplate:a.promptTemplate}:{},...a.temperature?{temperature:a.temperature}:{},...a.reasoningEffort?{reasoningEffort:a.reasoningEffort}:{},...a.thinkingLevel?{thinkingLevel:a.thinkingLevel}:{},...void 0!==a.thinkingBudget?{thinkingBudget:a.thinkingBudget}:{},...a.serviceTier?{serviceTier:a.serviceTier}:{},...a.reasoningSchema?{reasoningSchema:a.reasoningSchema}:{},...a.functionCallingSchema?{functionCallingSchema:a.functionCallingSchema}:{},...void 0!==a.contextWindow?{contextWindow:a.contextWindow}:{},...void 0!==a.maxTurns?{maxTurns:a.maxTurns}:{},...void 0!==a.maxTokens?{maxTokens:a.maxTokens}:{},folder:d,ApiKey:l},p=(await m.modelService.loadModels()).find(a=>(a.displayName??"").toLowerCase()===n.toLowerCase());if(p){let b=await m.modelService.updateModel({...p,...o,id:p.id});if(b.success){j.models[n]=p.id;let b={type:"model",name:n,id:p.id};return c?i.disabled.push({...b,note:c}):i.updated.push(b),{id:p.id,name:a.name}}return void i.skipped.push({type:"model",name:n,note:b.error})}let q=(0,e.A)(),r=await m.modelService.addModel({id:q,...o});if(r.success){j.models[n]=q,k.models.push(q);let b={type:"model",name:n,id:q};return c?i.disabled.push({...b,note:c}):i.created.push(b),{id:q,name:a.name}}i.skipped.push({type:"model",name:n,note:r.error})}async function G(a,b,c,e,f,g){let h={};for(let c of b)h[c.flow.id]=function(a,b){var c;let e=`pkg-${r(a)}-${r(b)}`.replace(/[^A-Za-z0-9_-]/g,"-");return e.length<=64?e:`${e.slice(0,55)}-${c=`${a}::${b}`,(0,d.createHash)("sha1").update(c).digest("hex").slice(0,8)}`}(a,c.flow.id);let i=new Set((await n.flowService.loadFlows()).map(a=>a.id));for(let d of b){let b=d.flow.id,j=h[b],k=function(a,b,c,d){let e=JSON.parse(JSON.stringify(a.flow));for(let a of(e.id=b,delete e.createdAt,delete e.updatedAt,e.nodes??[])){let b=a?.data?.properties;if(b&&("string"==typeof b.subflowId&&c[b.subflowId]&&(b.subflowId=c[b.subflowId]),Array.isArray(b.parallelSubflowIds)&&(b.parallelSubflowIds=b.parallelSubflowIds.map(a=>"string"==typeof a&&c[a]?c[a]:a)),"string"==typeof b.boundModel&&d[b.boundModel])){let a=d[b.boundModel];b.boundModel=a.id,b.modelName=a.name}}return e}(d,j,h,c);k.folder=a;let l=i.has(j),m=await n.flowService.saveFlow(k);if(m.success){f.flows[b]=j;let a={type:"flow",name:d.flow.name,id:j};l?e.updated.push(a):(g.flows.push(j),e.created.push(a))}else e.skipped.push({type:"flow",name:d.flow.name,note:m.error})}return h}async function H(a,b,c,d,e,f){var g;let h=(0,p.getSchedulerService)(),i=(g=a.name,`pkg-${r(b)}-${r(g)}`.replace(/[^A-Za-z0-9._:-]/g,"-").slice(0,128)),j=c[a.flowId]??a.flowId,{id:k,flowId:l,createdAt:m,updatedAt:n,...o}=a,q={...o,id:i,flowId:j,folder:b,enabled:!1},s=await h.create(q);if(s.execution){e.plannedExecutions.push(i),f.plannedExecutions.push(i),d.created.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"created disabled — enable it after review"});return}if(s.conflict){let{id:b,...c}=q,f=await h.update(i,c);f.execution?(e.plannedExecutions.push(i),d.updated.push({type:"plannedExecution",name:a.name,id:i}),d.disabled.push({type:"plannedExecution",name:a.name,id:i,note:"updated (disabled) — enable it after review"})):d.skipped.push({type:"plannedExecution",name:a.name,note:f.error});return}d.skipped.push({type:"plannedExecution",name:a.name,note:s.error})}},51669:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
|
|
2
2
|
Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},56793:(a,b,c)=>{c.d(b,{eh:()=>g,ru:()=>e});let d=(0,c(50846).h)("backend/services/scheduler/flowRunEventBus");function e(a){return"signal"===a.kind}class f{publish(a){if(0===this.listeners.size)return;let b=e(a)?`signal topic=${a.topic} emitter=${a.emitterFlowId}`:`flow=${a.flowId} status=${a.status}`;for(let c of(d.debug(`Publishing flow event: ${b} firedBy=${a.firedBy} depth=${a.chainDepth} listeners=${this.listeners.size}`),[...this.listeners]))try{c(a)}catch(a){d.warn("A flow-run event listener threw:",a)}}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}get listenerCount(){return this.listeners.size}constructor(){this.listeners=new Set}}function g(){return global.__flujo_flow_run_event_bus||(global.__flujo_flow_run_event_bus=new f),global.__flujo_flow_run_event_bus}},68633:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),!function(a,b){for(var c in b)Object.defineProperty(a,c,{enumerable:!0,get:b[c]})}(b,{decryptActionBoundArgs:function(){return s},encryptActionBoundArgs:function(){return r}}),c(77925);let d=c(97954),e=c(27825),f=c(47686),g=c(77533),h=c(63033),i=c(26906),j=function(a){return a&&a.__esModule?a:{default:a}}(c(74515)),k=new TextEncoder,l=new TextDecoder,m=void 0,n=void 0;async function o(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=atob(b),e=d.slice(0,16),f=d.slice(16),h=l.decode(await (0,g.decrypt)(c,(0,g.stringToUint8Array)(e),(0,g.stringToUint8Array)(f)));if(!h.startsWith(a))throw Object.defineProperty(Error("Invalid Server Action payload: failed to decrypt."),"__NEXT_ERROR_CODE",{value:"E191",enumerable:!1,configurable:!0});return h.slice(a.length)}async function p(a,b){let c=await (0,g.getActionEncryptionKey)();if(void 0===c)throw Object.defineProperty(Error("Missing encryption key for Server Action. This is a bug in Next.js"),"__NEXT_ERROR_CODE",{value:"E65",enumerable:!1,configurable:!0});let d=new Uint8Array(16);h.workUnitAsyncStorage.exit(()=>crypto.getRandomValues(d));let e=(0,g.arrayBufferToString)(d.buffer),f=await (0,g.encrypt)(c,d,k.encode(a+b));return btoa(e+(0,g.arrayBufferToString)(f))}var q=function(a){return a[a.Ready=0]="Ready",a[a.Pending=1]="Pending",a[a.Complete=2]="Complete",a}(q||{});let r=j.default.cache(async function a(b,...c){let e=h.workUnitAsyncStorage.getStore(),j=e?(0,h.getCacheSignal)(e):void 0,{clientModules:k}=(0,g.getClientReferenceManifestForRsc)(),l=Error();Error.captureStackTrace(l,a);let n=!1,o=e?(0,i.createHangingInputAbortSignal)(e):void 0,q=0;function r(){0===q&&(q=1,null==j||j.beginRead())}function s(){1===q&&(null==j||j.endRead()),q=2}o&&j&&o.addEventListener("abort",r,{once:!0});let t=await (0,f.streamToString)((0,d.renderToReadableStream)(c,k,{filterStackFrame:m,signal:o,onError(a){(null==o||!o.aborted)&&(n||(n=!0,l.message=a instanceof Error?a.message:String(a)))}}),o);if(n)throw s(),l;if(!e)return p(b,t);r();let u=(0,h.getPrerenderResumeDataCache)(e),v=(0,h.getRenderResumeDataCache)(e),w=b+t,x=(null==u?void 0:u.encryptedBoundArgs.get(w))??(null==v?void 0:v.encryptedBoundArgs.get(w));if(x)return x;let y=await p(b,t);return s(),null==u||u.encryptedBoundArgs.set(w,y),y});async function s(a,b){let c,d=await b,f=h.workUnitAsyncStorage.getStore();if(f){let b=(0,h.getCacheSignal)(f),e=(0,h.getPrerenderResumeDataCache)(f),g=(0,h.getRenderResumeDataCache)(f);(c=(null==e?void 0:e.decryptedBoundArgs.get(d))??(null==g?void 0:g.decryptedBoundArgs.get(d)))||(null==b||b.beginRead(),c=await o(a,d),null==b||b.endRead(),null==e||e.decryptedBoundArgs.set(d,c))}else c=await o(a,d);let{edgeRscModuleMapping:i,rscModuleMapping:j}=(0,g.getClientReferenceManifestForRsc)();return await (0,e.createFromReadableStream)(new ReadableStream({start(a){switch(a.enqueue(k.encode(c)),null==f?void 0:f.type){case"prerender":case"prerender-runtime":f.renderSignal.aborted?a.close():f.renderSignal.addEventListener("abort",()=>a.close(),{once:!0});break;case"prerender-client":case"prerender-ppr":case"prerender-legacy":case"request":case"cache":case"private-cache":case"unstable-cache":case void 0:return a.close()}}}),{findSourceMapURL:n,serverConsumerManifest:{moduleLoading:null,moduleMap:j,serverModuleMap:(0,g.getServerModuleMap)()}})}},75879:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(97954)},75943:(a,b,c)=>{c.d(b,{g:()=>h,i:()=>g});var d=c(50846),e=c(80233);let f=(0,d.h)("backend/services/packages/packageRegistry");async function g(a){let{status:b,body:c}=await (0,e.sB)(a);return b<200||b>=300?(f.warn(`searchPackageRegistry: registry responded with status ${b}`),{items:[],page:a.page??1,pageSize:a.pageSize??20,total:0,error:c?.error??`Registry responded with status ${b}`}):c}async function h(a,b){if(!a||"string"!=typeof a)throw Error("A package id is required");let{status:c,body:d}=await (0,e.wf)(a,b&&b.trim()?b.trim():"latest");if(c<200||c>=300)throw Error(d?.error??d?.message??`Registry responded with status ${c}`);return d}},80233:(a,b,c)=>{c.d(b,{$5:()=>p,Nb:()=>s,Ow:()=>r,Tr:()=>x,Wz:()=>w,eo:()=>u,iD:()=>q,s2:()=>v,sB:()=>n,uJ:()=>j,w2:()=>t,wf:()=>o});var d=c(50846),e=c(92372),f=c(38844),g=c(21508);let h=(0,d.h)("backend/utils/packageRegistryClient");function i(a){return a.trim().replace(/\/+$/,"")}async function j(){let a=process.env.FLUJO_REGISTRY_BASE_URL?.trim();if(a)return i(a);let b=await (0,e.loadItem)(f.Z.REGISTRY_SETTINGS,{});return b?.baseUrl&&b.baseUrl.trim()?i(b.baseUrl):i(g.Qs)}async function k(a,b,c){let d=await j(),e=`${d}${a}`,f=new AbortController,g=setTimeout(()=>f.abort(),2e4);try{let d={"Content-Type":"application/json",Accept:"application/json"};c&&(d.Authorization=`Bearer ${c}`),h.info(`POST ${a}`);let g=await fetch(e,{method:"POST",headers:d,body:JSON.stringify(b??{}),signal:f.signal,cache:"no-store"}),i=await g.text(),j=null;if(i)try{j=JSON.parse(i)}catch{j={message:i}}return{status:g.status,body:j}}catch(b){return h.warn(`POST ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(g)}}async function l(a){let b=await j(),c=`${b}${a}`,d=new AbortController,e=setTimeout(()=>d.abort(),2e4);try{h.info(`GET ${a}`);let b=await fetch(c,{headers:{Accept:"application/json"},signal:d.signal,cache:"no-store"}),e=await b.text(),f=null;if(e)try{f=JSON.parse(e)}catch{f={message:e}}return{status:b.status,body:f}}catch(b){return h.warn(`GET ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(e)}}async function m(a,b){let c=await j(),d=`${c}${a}`,e=new AbortController,f=setTimeout(()=>e.abort(),2e4);try{h.info(`DELETE ${a}`);let c=await fetch(d,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${b}`},signal:e.signal,cache:"no-store"}),f=await c.text(),g=null;if(f)try{g=JSON.parse(f)}catch{g={message:f}}return{status:c.status,body:g}}catch(b){return h.warn(`DELETE ${a} failed at transport level`,b instanceof Error?b.message:b),{status:0,body:{message:"Could not reach the package registry."}}}finally{clearTimeout(f)}}function n(a){let b=new URLSearchParams;a.q&&b.set("q",a.q),a.tag&&b.set("tag",a.tag),a.page&&b.set("page",String(a.page)),a.pageSize&&b.set("pageSize",String(a.pageSize));let c=b.toString()?`?${b.toString()}`:"";return l(`/v1/packages${c}`)}function o(a,b="latest"){return l(`/v1/packages/${encodeURIComponent(a)}/versions/${encodeURIComponent(b)}/manifest`)}function p(a,b,c){return k("/v1/auth/signup",{email:a,password:b,handle:c})}function q(a,b){return k("/v1/auth/login",{email:a,password:b})}function r(a){return k("/v1/auth/refresh",{refresh_token:a})}function s(a){return k("/v1/auth/resend-confirmation",{email:a})}function t(a){return k("/v1/auth/forgot-password",{email:a})}function u(a,b){return k("/v1/packages",a,b)}function v(a,b){return m(`/v1/packages/${encodeURIComponent(a)}`,b)}function w(a,b){return k("/v1/feedback",{notice:a,rating:b})}function x(a){return k("/v1/auth/oauth/token",{code:a.code,code_verifier:a.codeVerifier,redirect_uri:a.redirectUri,provider:a.provider})}}};
|