@aeolus-fleet/gateway 0.29.1 → 0.29.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/fleet/console-sessions.js +10 -6
- package/dist/adapters/fleet/console-sessions.js.map +1 -1
- package/dist/adapters/trpc/router.js +10 -3
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/core/actors/authenticate-actor.d.ts +11 -5
- package/dist/core/actors/authenticate-actor.js +7 -3
- package/dist/core/actors/authenticate-actor.js.map +1 -1
- package/dist/core/actors/credential-of.d.ts +3 -2
- package/dist/core/actors/credential-of.js +4 -3
- package/dist/core/actors/credential-of.js.map +1 -1
- package/dist/core/operator/authenticate-operator.d.ts +5 -9
- package/dist/core/operator/authenticate-operator.js +4 -4
- package/dist/core/operator/authenticate-operator.js.map +1 -1
- package/dist/core/operator/ports.d.ts +15 -9
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +11 -11
- package/web/.next/build-manifest.json +15 -15
- package/web/.next/diagnostics/route-bundle-stats.json +75 -59
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/{outside-parties/[name]/retire → (console)/outside-parties/[name]/change}/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/change/page.js +12 -11
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{outside-parties/[name]/retire → (console)/outside-parties/[name]}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties/[name]/retire → (console)/outside-parties/[name]}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/page.js +12 -11
- package/web/.next/server/app/{outside-parties/[name]/change → (console)/outside-parties/[name]}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/{outside-parties/[name]/change → (console)/outside-parties/[name]/retire}/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/retire/page.js +11 -10
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/add/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{outside-parties/[name]/change → (console)/outside-parties/add}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties/[name]/change → (console)/outside-parties/add}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/add/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/add/page.js +11 -10
- package/web/.next/server/app/{overview/requests/[requestId] → (console)/outside-parties/add}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/outside-parties/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{outside-parties/[name] → (console)/outside-parties}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties/add → (console)/outside-parties}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/{outside-parties → (console)/outside-parties}/page.js +11 -10
- package/web/.next/server/app/{outside-parties/add → (console)/outside-parties}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/overview/changes/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/overview/changes/route.js +6 -0
- package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -0
- package/web/.next/server/app/(console)/overview/changes/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/overview/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{sign-in/failed → (console)/overview}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{parties → (console)/overview}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{overview → (console)/overview}/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/{overview/requests/[requestId] → (console)/overview}/page.js +13 -12
- package/web/.next/server/app/{sign-in/failed → (console)/overview}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/{overview → (console)/overview}/requests/[requestId]/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/{overview → (console)/overview/requests/[requestId]}/page.js +13 -12
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/parties/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{outside-parties → (console)/parties}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties → (console)/parties}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{parties → (console)/parties}/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/{parties → (console)/parties}/page.js +11 -10
- package/web/.next/server/app/{outside-parties/[name] → (console)/parties}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/sign-in/failed/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/{outside-parties/add → (console)/sign-in/failed}/page/build-manifest.json +1 -1
- package/web/.next/server/app/{outside-parties/[name] → (console)/sign-in/failed}/page/next-font-manifest.json +1 -1
- package/web/.next/server/app/{sign-in → (console)/sign-in}/failed/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/{sign-in → (console)/sign-in}/failed/page.js +11 -10
- package/web/.next/server/app/{outside-parties/[name]/retire → (console)/sign-in/failed}/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +4 -4
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js +9 -7
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js +12 -10
- package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page.js +9 -7
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +11 -11
- package/web/.next/server/chunks/1mb5_next-internal_server_app_(console)_overview_changes_route_actions_0zbq7lqsf5nng.js +3 -0
- package/web/.next/server/chunks/{[root-of-the-server]__00bbah0fbuex2._.js → [root-of-the-server]__0k8jiujb_0xtx._.js} +8 -8
- package/web/.next/server/chunks/[root-of-the-server]__0k8jiujb_0xtx._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web__next-internal_server_app_outside-parties_add_page_actions_0wclx47vjdhe6.js → 0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js} +2 -2
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +3 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0grpi5wnl9ppf._.js +10 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0grpi5wnl9ppf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0rzvf7wb60m05._.js → [root-of-the-server]__0k-sy-ven9f2f._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1qpk1uw97id0a._.js → [root-of-the-server]__12_to1hq55n1y._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12_to1hq55n1y._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0ntyo9p3x-w6a._.js → [root-of-the-server]__179upda-y7uap._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__179upda-y7uap._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__197il4swfpq1a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__11e7zi5yg_f_4._.js → [root-of-the-server]__1rmy72sai5-kh._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__10rfwy-punm8_._.js → [root-of-the-server]__1yydhn6iokbm4._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yydhn6iokbm4._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1bfq0g9c1iw__._.js → _080ao10j8x4km._.js} +2 -2
- package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_13qzwpag13tvy._.js → _0pyd1_y7w8ngp._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_12fsn_33ga-n0._.js +3 -0
- package/web/.next/server/chunks/ssr/_12fsn_33ga-n0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_04iwj3w0divwb._.js → _1gb_kwx9jg1et._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1hmjvjuxx92vo._.js +3 -0
- package/web/.next/server/chunks/ssr/_1hmjvjuxx92vo._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_03xm-6l-r6ko0._.js → _1ulh8nd8_yv_3._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1id6g-6m2hh0l._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1id6g-6m2hh0l._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_server-async-storage_0t1datokkgym0.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_server-async-storage_0t1datokkgym0.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js +3 -0
- package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js +3 -0
- package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_0vot73dagfg_x._.js → web_1ga4pbv72m0ad._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_1nqu01kfi0u66._.js → web_1loiet18xbddu._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_1loiet18xbddu._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +3 -0
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_layout_tsx_1t-5g79yb9xtl._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_layout_tsx_1t-5g79yb9xtl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_app_outside-parties_[name]_change_page_tsx_0kfjh3f55us56._.js → web_app_(console)_outside-parties_[name]_change_page_tsx_00bpg0s2eypj9._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_app_(console)_outside-parties_[name]_change_page_tsx_00bpg0s2eypj9._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_app_outside-parties_[name]_retire_page_tsx_0qhcnjpjipu_2._.js → web_app_(console)_outside-parties_[name]_retire_page_tsx_1zxy74pr5_2kn._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_app_(console)_outside-parties_[name]_retire_page_tsx_1zxy74pr5_2kn._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{web_app_overview_error_tsx_17_cklg40kzxe._.js → web_app_(console)_overview_error_tsx_087e7ba8loavc._.js} +2 -2
- package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_087e7ba8loavc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_1nn1jz5nh77af._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_overview_error_tsx_1nn1jz5nh77af._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_authorize_layout_tsx_0gs61_7wzx68y._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_authorize_layout_tsx_0gs61_7wzx68y._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0h0ueu8_-_z5k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_0h0ueu8_-_z5k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_authorize_137wk0n1nu3cn._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_authorize_137wk0n1nu3cn._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/middleware-build-manifest.js +15 -15
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +13 -13
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/preview-props.json +3 -3
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +75 -75
- package/web/.next/static/chunks/07j7jnfe13wx6.js +1 -0
- package/web/.next/static/chunks/0p_kl57bddsiy.js +1 -0
- package/web/.next/static/chunks/1ca21kggixrjz.js +1 -0
- package/web/.next/static/chunks/1l1gmjf-hz7u_.css +3 -0
- package/web/.next/static/chunks/{0hobzrlhklo3e.js → 1tfvu44eel7g5.js} +1 -1
- package/web/.next/static/chunks/{3l_1gcuoe8bfn.js → 2bg4wnfhuftsq.js} +1 -1
- package/web/.next/static/chunks/2x00o45pdbkok.js +1 -0
- package/web/.next/static/chunks/{3jr0srcv_-pfa.js → 2yplpvvjibfqw.js} +1 -1
- package/web/.next/static/chunks/34syicr_5c5u1.js +1 -0
- package/web/.next/static/chunks/{0a1vw3r93lh06.js → 3v6tr952p9dba.js} +1 -1
- package/web/.next/static/chunks/{1sgi4p93eayf4.js → 43zbq11isnos4.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +3 -1
- package/web/.next/types/validator.ts +84 -50
- package/web/.next/server/app/outside-parties/[name]/change/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/outside-parties/[name]/change/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/outside-parties/[name]/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/outside-parties/[name]/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/outside-parties/[name]/retire/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/outside-parties/[name]/retire/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/outside-parties/add/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/outside-parties/add/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/outside-parties/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/outside-parties/page.js.nft.json +0 -1
- package/web/.next/server/app/outside-parties/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/overview/changes/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/overview/changes/route.js +0 -6
- package/web/.next/server/app/overview/changes/route.js.nft.json +0 -1
- package/web/.next/server/app/overview/changes/route_client-reference-manifest.js +0 -3
- package/web/.next/server/app/overview/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/overview/page/build-manifest.json +0 -23
- package/web/.next/server/app/overview/page/next-font-manifest.json +0 -11
- package/web/.next/server/app/overview/page.js.nft.json +0 -1
- package/web/.next/server/app/overview/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/overview/requests/[requestId]/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/overview/requests/[requestId]/page/build-manifest.json +0 -23
- package/web/.next/server/app/overview/requests/[requestId]/page/next-font-manifest.json +0 -11
- package/web/.next/server/app/overview/requests/[requestId]/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/parties/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/parties/page/build-manifest.json +0 -23
- package/web/.next/server/app/parties/page.js.nft.json +0 -1
- package/web/.next/server/app/parties/page_client-reference-manifest.js +0 -3
- package/web/.next/server/app/sign-in/failed/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/sign-in/failed/page/next-font-manifest.json +0 -11
- package/web/.next/server/app/sign-in/failed/page_client-reference-manifest.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__00bbah0fbuex2._.js.map +0 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_overview_requests_[requestId]_page_actions_08cpboirhdm8t.js +0 -3
- package/web/.next/server/chunks/ssr/0vkm_server_app_overview_requests_[requestId]_page_actions_08cpboirhdm8t.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ntyo9p3x-w6a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rzvf7wb60m05._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10rfwy-punm8_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11e7zi5yg_f_4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1afrhvkbp010p._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1afrhvkbp010p._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpk1uw97id0a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_03xm-6l-r6ko0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_04iwj3w0divwb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_13qzwpag13tvy._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1bfq0g9c1iw__._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1jfy4064jcghi._.js +0 -3
- package/web/.next/server/chunks/ssr/_1jfy4064jcghi._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03zgfhccdkaiy.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03zgfhccdkaiy.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0fj-1791_p39n.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0fj-1791_p39n.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pq59x3iko2ai.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pq59x3iko2ai.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0svltk31-r84e.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0svltk31-r84e.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ytc4y16h581t.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ytc4y16h581t.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_15hcath_cy93j.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_15hcath_cy93j.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ej-pov8ir4hb.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ej-pov8ir4hb.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1emdm3ck_2g9k.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1emdm3ck_2g9k.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mvwdrj8rcdc5.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mvwdrj8rcdc5.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uc-ufaepnlh_.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uc-ufaepnlh_.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ymh04086158y.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ymh04086158y.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z9khw-ht54ev.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z9khw-ht54ev.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_0vot73dagfg_x._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_17c7_dhsf-sjp._.js +0 -3
- package/web/.next/server/chunks/ssr/web_17c7_dhsf-sjp._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1j5yjwqkgyeve._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1j5yjwqkgyeve._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1nqu01kfi0u66._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_1zd285_dq60z5._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1zd285_dq60z5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_207u8paamz3z-._.js +0 -10
- package/web/.next/server/chunks/ssr/web_207u8paamz3z-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_outside-parties_add_page_actions_0wclx47vjdhe6.js.map +0 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_overview_page_actions_0hxu14a57nlf2.js +0 -3
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_overview_page_actions_0hxu14a57nlf2.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_not-found_tsx_1miwllm8xrp2a._.js +0 -3
- package/web/.next/server/chunks/ssr/web_app_not-found_tsx_1miwllm8xrp2a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_change_page_tsx_0kfjh3f55us56._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_retire_page_tsx_0qhcnjpjipu_2._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_0qlcwxupzw726._.js +0 -3
- package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_0qlcwxupzw726._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_17_cklg40kzxe._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_app_parties_page_tsx_1lilxm339jj89._.js +0 -3
- package/web/.next/server/chunks/ssr/web_app_parties_page_tsx_1lilxm339jj89._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0vq1wjkuh6dmr._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0vq1wjkuh6dmr._.js.map +0 -1
- package/web/.next/server/chunks/web__next-internal_server_app_overview_changes_route_actions_16jqwsctr1pzg.js +0 -3
- package/web/.next/static/chunks/0214opd1iq3ld.js +0 -1
- package/web/.next/static/chunks/22u81hd6kxqsx.js +0 -1
- package/web/.next/static/chunks/2qpupho1jn-iy.js +0 -1
- package/web/.next/static/chunks/2rap-vrom5-zw.css +0 -3
- package/web/.next/static/chunks/3sv0_hjr9t4cp.js +0 -1
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/change/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/change/page.js.map +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/page.js.map +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/retire/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/[name]/retire/page.js.map +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/add/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/add/page.js.map +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{outside-parties → (console)/outside-parties}/page.js.map +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/changes/route/build-manifest.json +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/changes/route/server-reference-manifest.json +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/changes/route.js.map +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/page.js.map +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/requests/[requestId]/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{overview → (console)/overview}/requests/[requestId]/page.js.map +0 -0
- /package/web/.next/server/app/{parties → (console)/parties}/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{parties → (console)/parties}/page.js.map +0 -0
- /package/web/.next/server/app/{sign-in → (console)/sign-in}/failed/page/react-loadable-manifest.json +0 -0
- /package/web/.next/server/app/{sign-in → (console)/sign-in}/failed/page.js.map +0 -0
- /package/web/.next/server/chunks/{web__next-internal_server_app_overview_changes_route_actions_16jqwsctr1pzg.js.map → 1mb5_next-internal_server_app_(console)_overview_changes_route_actions_0zbq7lqsf5nng.js.map} +0 -0
- /package/web/.next/static/{MLIzjhz2u5r5gyyuciHvf → ESz77-eaR5ViaU4LRqo0i}/_buildManifest.js +0 -0
- /package/web/.next/static/{MLIzjhz2u5r5gyyuciHvf → ESz77-eaR5ViaU4LRqo0i}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{MLIzjhz2u5r5gyyuciHvf → ESz77-eaR5ViaU4LRqo0i}/_ssgManifest.js +0 -0
package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(35149),h=a.i(77237),i=a.i(5050);let j=(0,i.createServerReference)("
|
|
1
|
+
module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(35149),h=a.i(77237),i=a.i(5050);let j=(0,i.createServerReference)("60f075e645c26c85d7b894ca9999e31d8b79841428",i.callServer,void 0,i.findSourceMapURL,"approveServer"),k=(0,i.createServerReference)("602d7725f7de700d70c9c83e0d758ff197e8976d7d",i.callServer,void 0,i.findSourceMapURL,"checkServer"),l=["Address","Check","Owner"],m=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function n({at:a}){return(0,b.jsx)("ol",{className:"flex gap-4",children:l.map((c,d)=>(0,b.jsxs)("li",{"aria-current":d===a?"step":void 0,className:d<=a?"font-medium":"text-muted-foreground",children:[d+1," ",c]},c))})}function o({refusal:a}){return void 0===a?null:(0,b.jsx)(f.f,{state:{kind:"refused",message:a}})}function p({state:a,action:f,fleetId:g}){let[i,j]=(0,c.useState)(a.fields.credentialKind??"bearer");return(0,b.jsxs)("form",{action:f,className:`${e.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsxs)("fieldset",{className:"grid gap-3",children:[(0,b.jsx)("legend",{className:"font-medium",children:"The server's credential"}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsxs)("select",{className:e.w,name:"credentialKind",value:i,onChange:a=>{j(a.target.value)},children:[(0,b.jsx)("option",{value:"bearer",children:"Bearer token"}),(0,b.jsx)("option",{value:"clientCredentials",children:"OAuth client credentials"})]})]}),"clientCredentials"===i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"clientId",defaultValue:a.fields.clientId??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"clientSecret"})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"issuer",defaultValue:a.fields.issuer??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"scope",defaultValue:a.fields.scope??""})]})]}):(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"token"})]})]}),(0,b.jsx)("div",{children:(0,b.jsx)(h.f,{pending:"Checking the server…",testId:"add-server-check",children:"Check the server"})})]})}function q({state:a,refused:c,action:f,onBack:i,fleetId:j}){let k="refused"===c.kind&&c.requestId===a.requestId,l=k?c.fields:a.fields,{tools:n}=a,p=l.url??"",r=l.name??(URL.canParse(p)?(new URL(p).hostname.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,""):"");return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:`${e.r} grid gap-2`,"data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:["The server answers: ",n.length," ",1===n.length?"tool":"tools"]}),(0,b.jsx)("ul",{className:"grid gap-1",children:n.map(a=>(0,b.jsxs)("li",{className:"grid",children:[(0,b.jsx)("span",{className:"font-mono",children:a.name}),void 0===a.description?null:(0,b.jsx)("span",{className:"text-muted-foreground",children:a.description})]},a.name))})]}),(0,b.jsxs)("form",{action:f,className:`${e.r} grid gap-3`,"data-testid":"add-server-owner",children:[(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:k?c.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),m.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:l[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:p}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"name",defaultValue:r,required:!0})]}),(0,b.jsx)(g.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===l.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:e.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:l.concurrencyLimit??"4"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(h.f,{pending:"Adding…",testId:"add-server-approve",children:["Add ",""===r?"server":r]}),(0,b.jsx)("button",{type:"button",className:e.x.secondary,onClick:i,children:"Back to the address"})]})]})]})}a.s(["AddServer",0,function({fleetId:a}){let[d,e]=(0,c.useActionState)(k,{step:"address",fields:{}}),[f,g]=(0,c.useActionState)(j,{kind:"idle"}),[h,i]=(0,c.useState)(void 0),l="owner"===d.step&&h!==d.requestId?d:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add MCP server"}),(0,b.jsx)(n,{at:2*(void 0!==l)}),void 0===l?(0,b.jsx)(p,{state:d,action:e,fleetId:a}):(0,b.jsx)(q,{state:l,refused:f,action:g,onBack:()=>{i(l.requestId)},fleetId:a})]})}],29372)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
|
package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3A4a0360%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A9d7e74%20%3Ctext/javascript%3E","../../../../../web/features/add-server/suggested-name.ts"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { approveServer, checkServer, type AddServerState, type ApproveState } from '../actions';\nimport { suggestedName } from '../suggested-name';\n\n/** The steps of adding a server, as the design numbers them. */\nconst STEPS = ['Address', 'Check', 'Owner'] as const;\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\nfunction Steps({ at }: { at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {STEPS.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n\nfunction Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n\nfunction AddressStep({ state, action, fleetId }: { state: Extract<AddServerState, { step: 'address' }> | { fields: Record<string, string>; refusal?: string }; action: (form: FormData) => void; fleetId: string }) {\n const [credentialKind, setCredentialKind] = useState(state.fields.credentialKind ?? 'bearer');\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <fieldset className=\"grid gap-3\">\n <legend className=\"font-medium\">The server's credential</legend>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(event.target.value); }}>\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\n </select>\n </label>\n {credentialKind === 'clientCredentials' ? (\n <>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} type=\"text\" name=\"clientId\" defaultValue={state.fields.clientId ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} type=\"password\" name=\"clientSecret\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} type=\"url\" name=\"issuer\" defaultValue={state.fields.issuer ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} type=\"text\" name=\"scope\" defaultValue={state.fields.scope ?? ''} />\n </label>\n </>\n ) : (\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} type=\"password\" name=\"token\" />\n </label>\n )}\n </fieldset>\n <div>\n <SubmitButton pending=\"Checking the server…\" testId=\"add-server-check\">\n Check the server\n </SubmitButton>\n </div>\n </form>\n );\n}\n\nfunction OwnerStep({ state, refused, action, onBack, fleetId }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const { tools } = state;\n const url = fields.url ?? '';\n const name = fields.name ?? suggestedName(url);\n return (\n <>\n <section className={`${CARD} grid gap-2`} data-testid=\"add-server-tools\">\n <h2 className=\"text-section font-semibold\">\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </h2>\n <ul className=\"grid gap-1\">\n {tools.map((tool) => (\n <li key={tool.name} className=\"grid\">\n <span className=\"font-mono\">{tool.name}</span>\n {tool.description === undefined ? null : <span className=\"text-muted-foreground\">{tool.description}</span>}\n </li>\n ))}\n </ul>\n </section>\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship's name</span>\n <input className={INPUT} type=\"text\" name=\"name\" defaultValue={name} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <div className=\"flex gap-2\">\n <SubmitButton pending=\"Adding…\" testId=\"add-server-approve\">\n Add {name === '' ? 'server' : name}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. Each\n * button says at once that its step is on its way.\n */\nexport function AddServer({ fleetId }: { fleetId: string }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [refused, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n <Steps at={owner === undefined ? 0 : 2} />\n {owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={refused} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6019f8ccbb153920d3407417fa13ae2f68dbae4425\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"6019f8ccbb153920d3407417fa13ae2f68dbae4425\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"604cd683600419224d72cce16001d6551c38501acd\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"604cd683600419224d72cce16001d6551c38501acd\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","/** A proxy ship's name offered from a server's address: its host's first name that says whose it is. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const labels = new URL(url).hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCRkM,EAAA,EAAA,CAAA,CAAA,MAAsG,IAAMA,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,iBCA3I,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,eFa/a,EAAQ,CAAC,UAAW,QAAS,QAAQ,CAKrC,EAAiB,CAAC,MAAO,iBAAkB,QAAS,WAAY,eAAgB,SAAU,QAAQ,CAExG,SAAS,EAAM,IAAE,CAAE,CAAkB,EACnC,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sBACX,EAAM,GAAG,CAAC,CAAC,EAAM,IAChB,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAc,eAAc,IAAU,EAAK,YAAS,EAAW,UAAW,GAAS,EAAK,cAAgB,kCACtG,EAAQ,EAAE,IAAE,IADN,KAMjB,CAEA,SAAS,EAAQ,SAAE,CAAO,CAAmC,EAC3D,OAAmB,SAAZ,EAAwB,KAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,CAAA,CAAC,MAAO,CAAE,KAAM,UAAW,QAAS,CAAQ,GAC5F,CAEA,SAAS,EAAY,OAAE,CAAK,QAAE,CAAM,SAAE,CAAO,CAAqK,EAChN,GAAM,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,EAAM,MAAM,CAAC,cAAc,EAAI,UACpF,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,OAAQ,EAAQ,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,CAAE,cAAY,+BACjE,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,SAAS,KAAM,EAAA,CAAW,CAAE,MAAO,IAC/C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAQ,QAAS,EAAM,OAAO,GAC/B,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,4BACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,MAAM,KAAK,MAAM,aAAc,EAAM,MAAM,CAAC,GAAG,EAAI,GAAI,YAAY,8BAA8B,QAAQ,CAAA,CAAA,OAEzI,CAAA,EAAA,EAAA,IAAA,EAAC,WAAA,CAAS,UAAU,uBAClB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,UAAU,uBAAc,4BAChC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,eACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAO,UAAW,EAAA,CAAK,CAAE,KAAK,iBAAiB,MAAO,EAAgB,SAAU,AAAC,IAAY,EAAkB,EAAM,MAAM,CAAC,KAAK,CAAG,YACnI,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,MAAM,kBAAS,iBACvB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,MAAM,6BAAoB,mCAGlB,sBAAnB,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,cACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,OAAO,KAAK,WAAW,aAAc,EAAM,MAAM,CAAC,QAAQ,EAAI,QAE9F,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,WAAW,KAAK,oBAEhD,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,WACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,MAAM,KAAK,SAAS,aAAc,EAAM,MAAM,CAAC,MAAM,EAAI,QAEzF,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,OAAO,KAAK,QAAQ,aAAc,EAAM,MAAM,CAAC,KAAK,EAAI,WAI1F,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,iBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,WAAW,KAAK,gBAIpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAAC,QAAQ,uBAAuB,OAAO,4BAAmB,yBAM/E,CAEA,SAAS,EAAU,OAAE,CAAK,SAAE,CAAO,QAAE,CAAM,QAAE,CAAM,SAAE,CAAO,CAAuJ,EAEjN,IAAM,EAA6B,YAAjB,EAAQ,IAAI,EAAkB,EAAQ,SAAS,GAAK,EAAM,SAAS,CAC/E,EAAS,EAAY,EAAQ,MAAM,CAAG,EAAM,MAAM,CAClD,OAAE,CAAK,CAAE,CAAG,EACZ,EAAM,EAAO,GAAG,EAAI,GACpB,EAAO,EAAO,IAAI,GG9FxB,AAAK,CH8FuB,GG9FxB,AAAK,QAAQ,CAAC,GAIX,CADQ,AACP,EAJgB,EAGL,IH2FuB,AG3FnB,GAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,AAAC,GAAoB,QAAV,GAA6BA,QAAV,EACvE,CAAC,EAAE,EAAI,EAAA,CAAE,CAAE,WAAW,GAAG,UAAU,CAAC,cAAe,KAAK,UAAU,CAAC,WAAY,IAHpF,EACT,EH6FA,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,CAAE,cAAY,6BACpD,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,uCAA6B,uBACpB,EAAM,MAAM,CAAC,IAAmB,IAAjB,EAAM,MAAM,CAAS,OAAS,WAEpE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sBACX,EAAM,GAAG,CAAC,AAAC,GACV,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAmB,UAAU,iBAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,qBAAa,EAAK,IAAI,QAChB,IAArB,EAAK,WAAW,CAAiB,KAAO,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,iCAAyB,EAAK,WAAW,KAF3F,EAAK,IAAI,QAOxB,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,OAAQ,EAAQ,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,CAAE,cAAY,6BACjE,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,sCAA6B,cAC3C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAQ,QAAS,EAAY,EAAQ,OAAO,MAAG,IAChD,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,SAAS,KAAM,EAAA,CAAW,CAAE,MAAO,IAC/C,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,SAAS,KAAK,YAAY,MAAO,EAAM,SAAS,GAC3D,EAAe,GAAG,CAAC,AAAC,GACnB,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAkB,KAAK,SAAS,KAAM,EAAO,MAAO,CAAM,CAAC,EAAM,EAAI,IAA1D,IAEd,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,2CAAmC,IAChD,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,sBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,OAAO,KAAK,OAAO,aAAc,EAAM,QAAQ,CAAA,CAAA,OAE/E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAU,CAAA,CAAC,QAAS,EAAM,MAAM,CAAE,QAAS,EAAM,MAAM,CAAC,IAAI,CAAC,AAAC,GAAU,EAAM,MAAM,GAAK,EAAO,WAAW,GAAK,KAAM,KAAK,uDAC5H,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,UAAW,EAAA,CAAK,CAAE,KAAK,SAAS,KAAK,mBAAmB,IAAK,EAAG,IAAK,GAAI,aAAc,EAAO,gBAAgB,EAjH7F,EAiHiG,OAE3H,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAAY,CAAA,CAAC,QAAQ,UAAU,OAAO,+BAAqB,OAC5C,KAAT,EAAc,SAAW,KAEhC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,SAAS,UAAW,EAAA,CAAO,CAAC,SAAS,CAAE,QAAS,WAAQ,gCAO/E,oBAOO,SAAS,AAAU,SAAE,CAAO,CAAuB,EACxD,GAAM,CAAC,EAAS,EAAM,CAAG,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,EAAa,CAAE,KAAM,UAAW,OAAQ,CAAC,CAAE,GAC7E,CAAC,EAAS,EAAQ,CAAG,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,EAAe,CAAE,KAAM,MAAO,GAElE,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,OAAqB,GACvD,EAAyB,UAAjB,EAAQ,IAAI,EAAgB,IAAa,EAAQ,SAAS,CAAG,OAAU,EACrF,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,oCAA2B,mBACzC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAM,GAA8B,QAAhB,IAAV,CAAU,IAAY,KACtB,IAAV,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,MAAO,EAAS,OAAQ,EAAO,QAAS,IAErD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAU,MAAO,EAAO,QAAS,EAAS,OAAQ,EAAS,OAAQ,KAAQ,EAAY,EAAM,SAAS,CAAG,EAAG,QAAS,MAI9H"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3Ab028ce%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3Ab40187%20%3Ctext/javascript%3E","../../../../../web/features/add-server/suggested-name.ts"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { approveServer, checkServer, type AddServerState, type ApproveState } from '../actions';\nimport { suggestedName } from '../suggested-name';\n\n/** The steps of adding a server, as the design numbers them. */\nconst STEPS = ['Address', 'Check', 'Owner'] as const;\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\nfunction Steps({ at }: { at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {STEPS.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n\nfunction Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n\nfunction AddressStep({ state, action, fleetId }: { state: Extract<AddServerState, { step: 'address' }> | { fields: Record<string, string>; refusal?: string }; action: (form: FormData) => void; fleetId: string }) {\n const [credentialKind, setCredentialKind] = useState(state.fields.credentialKind ?? 'bearer');\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <fieldset className=\"grid gap-3\">\n <legend className=\"font-medium\">The server's credential</legend>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(event.target.value); }}>\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\n </select>\n </label>\n {credentialKind === 'clientCredentials' ? (\n <>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} type=\"text\" name=\"clientId\" defaultValue={state.fields.clientId ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} type=\"password\" name=\"clientSecret\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} type=\"url\" name=\"issuer\" defaultValue={state.fields.issuer ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} type=\"text\" name=\"scope\" defaultValue={state.fields.scope ?? ''} />\n </label>\n </>\n ) : (\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} type=\"password\" name=\"token\" />\n </label>\n )}\n </fieldset>\n <div>\n <SubmitButton pending=\"Checking the server…\" testId=\"add-server-check\">\n Check the server\n </SubmitButton>\n </div>\n </form>\n );\n}\n\nfunction OwnerStep({ state, refused, action, onBack, fleetId }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const { tools } = state;\n const url = fields.url ?? '';\n const name = fields.name ?? suggestedName(url);\n return (\n <>\n <section className={`${CARD} grid gap-2`} data-testid=\"add-server-tools\">\n <h2 className=\"text-section font-semibold\">\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </h2>\n <ul className=\"grid gap-1\">\n {tools.map((tool) => (\n <li key={tool.name} className=\"grid\">\n <span className=\"font-mono\">{tool.name}</span>\n {tool.description === undefined ? null : <span className=\"text-muted-foreground\">{tool.description}</span>}\n </li>\n ))}\n </ul>\n </section>\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship's name</span>\n <input className={INPUT} type=\"text\" name=\"name\" defaultValue={name} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <div className=\"flex gap-2\">\n <SubmitButton pending=\"Adding…\" testId=\"add-server-approve\">\n Add {name === '' ? 'server' : name}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. Each\n * button says at once that its step is on its way.\n */\nexport function AddServer({ fleetId }: { fleetId: string }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [refused, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n <Steps at={owner === undefined ? 0 : 2} />\n {owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={refused} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60f075e645c26c85d7b894ca9999e31d8b79841428\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"60f075e645c26c85d7b894ca9999e31d8b79841428\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"602d7725f7de700d70c9c83e0d758ff197e8976d7d\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"602d7725f7de700d70c9c83e0d758ff197e8976d7d\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","/** A proxy ship's name offered from a server's address: its host's first name that says whose it is. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const labels = new URL(url).hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(()=>{"use strict";module.exports=[38203,a=>{let b="holder",c="/authorize/sign-in";a.s(["r",0,b,"u",0,c,"e",0,"/authorize/waiting","a",0,function(a,d){return`${c}?${new URLSearchParams([...a,[b,d]]).toString()}`},"U",0,function(a,b){let c=Math.max(0,Math.floor((a.getTime()-b.getTime())/36e5));return`${String(Math.floor(c/24))} d ${String(c%24)} h`}])},819,a=>{var b=a.i(87924),c=a.i(21244),d=a.i(64831);let e={name:"hourglass",size:24,node:[["path",{d:"M5 22h14",key:"ehvnwv"}],["path",{d:"M5 2h14",key:"pdyrp9"}],["path",{d:"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22",key:"1d314k"}],["path",{d:"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2",key:"1vvvr6"}]]};e.node;let f=(0,d.f)(e),g={name:"log-in",size:24,node:[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]]};g.node;let h=(0,d.f)(g);var i=a.i(72131),j=a.i(38203);let k=[{holder:"account",label:"Sign in as yourself",detail:"The client acts as you.",icon:(0,b.jsx)(h,{"aria-hidden":!0})},{holder:"party",label:"Ask for access for this client",detail:"An approver of your fleet decides; the client then acts as its own party.",icon:(0,b.jsx)(f,{"aria-hidden":!0})}];a.s(["PickHolder",0,function({fields:a}){let[d,e]=(0,i.useState)(void 0);return(0,b.jsxs)("form",{method:"get",action:j.u,onSubmit:b=>{b.preventDefault();let c=b.nativeEvent.submitter?.getAttribute("value");void 0===d&&("account"===c||"party"===c)&&(e(c),window.location.assign((0,j.a)(a,c)))},className:"grid gap-3 min-[481px]:grid-cols-2",children:[a.map(([a,c])=>(0,b.jsx)("input",{type:"hidden",name:a,value:c},a)),k.map(({holder:a,label:e,detail:f,icon:g})=>(0,b.jsxs)(c.f,{type:"submit",name:j.r,value:a,icon:g,isLoading:d===a,disabled:void 0!==d&&d!==a,className:"grid h-auto min-h-28 content-center justify-items-center gap-1 rounded-lg p-4 text-center whitespace-normal hover:border-primary hover:bg-card [&_svg:not([class*=size-])]:size-5","data-testid":`authorize-pick-${a}`,children:[(0,b.jsx)("strong",{children:e}),(0,b.jsx)("span",{className:"font-normal text-muted-foreground",children:f})]},a))]})}],819)}]})();
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=web_features_authorize_137wk0n1nu3cn._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/authorize/services/authorize.ts","../../../../../web/features/authorize/ui/pick-holder.tsx","../../../../../node_modules/lucide-react/src/icons/hourglass.ts","../../../../../node_modules/lucide-react/src/icons/log-in.ts"],"sourcesContent":["/**\n * What the authorize pages work out: the time a request waiting for\n * approval has left, why a browser got nowhere connecting an MCP client,\n * and the authorization request the pick page carries on to the sign-in.\n */\nimport type { SearchParams } from '../../../lib/gateway-api/page-api';\n\nconst MS_PER_HOUR = 3_600_000;\nconst HOURS_PER_DAY = 24;\n\n/** The time a request has left, in days and hours, as the waiting page's ring shows it. */\nexport function timeLeft(expiresAt: Date, now: Date): string {\n const hours = Math.max(0, Math.floor((expiresAt.getTime() - now.getTime()) / MS_PER_HOUR));\n return `${String(Math.floor(hours / HOURS_PER_DAY))} d ${String(hours % HOURS_PER_DAY)} h`;\n}\n\nconst START_AGAIN = 'Start again from your MCP client.';\n\n/** Why a browser got nowhere, as the gateway's authorize doors name it (src/adapters/http/oauth-routes.ts). */\nconst REASONS: Record<string, string> = {\n invalidClient: `The gateway does not know this MCP client, or the address it asks to be sent back to. ${START_AGAIN}`,\n noPick: 'Pick on the page whether to sign in as yourself or to ask for access for the client.',\n unknownSignIn: `This sign-in is unknown, or took over 10 minutes. ${START_AGAIN}`,\n otherBrowser: `This sign-in was started in another browser, so it is not yours to finish. ${START_AGAIN}`,\n fleetNotServed: 'This gateway does not serve the fleet you signed in to.',\n outsidePartiesOff: \"Your fleet's outside parties are off, so no MCP client can ask for access. Sign in as yourself instead, or ask whoever runs your fleet.\",\n pagasaeRefused: `The sign-in service did not sign you in. ${START_AGAIN}`,\n unknownWaiting: `This request is unknown, or ended long ago. ${START_AGAIN}`,\n otherBrowserWaiting: `This request was made in another browser, so it is not yours to follow. ${START_AGAIN}`,\n noSignIn: 'This gateway signs no one in, so no MCP client can connect to it: its operator sets pagasae first.',\n};\n\nconst UNKNOWN_REASON = `The connection did not go through. ${START_AGAIN}`;\n\nexport function failedReasonText(reason: string | undefined): string {\n return (reason === undefined ? undefined : REASONS[reason]) ?? UNKNOWN_REASON;\n}\n\n/** The gateway's waiting address, which sends the browser on once its request no longer waits. */\nexport const WAITING_DOOR = '/authorize/waiting';\n\n/** The pick the page adds to the request, as the sign-in door reads it. */\nexport const HOLDER_FIELD = 'holder';\n\n/** The door that starts the sign-in through pagasae for the pick. */\nexport const SIGN_IN_DOOR = '/authorize/sign-in';\n\n/** Where a pressed pick sends the browser: the sign-in door, with the request as it came and the pick. */\nexport function signInAddressOf(fields: readonly [string, string][], holder: string): string {\n return `${SIGN_IN_DOOR}?${new URLSearchParams([...fields, [HOLDER_FIELD, holder]]).toString()}`;\n}\n\n/** The request's parameters the browser sent once each, without a pick: the page adds its own. */\nexport function pickFieldsOf(searchParams: SearchParams): [string, string][] {\n return Object.entries(searchParams).flatMap(([name, value]) => (typeof value === 'string' && name !== HOLDER_FIELD ? [[name, value]] : []));\n}\n","'use client';\n\nimport { Button } from '@aeolus-fleet/common/header';\nimport { Hourglass, LogIn } from 'lucide-react';\nimport { useState, type SyntheticEvent } from 'react';\n\nimport { HOLDER_FIELD, SIGN_IN_DOOR, signInAddressOf } from '../services/authorize';\n\ntype Holder = 'account' | 'party';\n\nconst PICKS = [\n { holder: 'account', label: 'Sign in as yourself', detail: 'The client acts as you.', icon: <LogIn aria-hidden /> },\n { holder: 'party', label: 'Ask for access for this client', detail: 'An approver of your fleet decides; the client then acts as its own party.', icon: <Hourglass aria-hidden /> },\n] as const;\n\n/** A pick as a large tile: its icon above its label, what it means below, one column on a phone. */\nconst TILE = 'grid h-auto min-h-28 content-center justify-items-center gap-1 rounded-lg p-4 text-center whitespace-normal hover:border-primary hover:bg-card [&_svg:not([class*=size-])]:size-5';\n\nfunction isHolder(value: unknown): value is Holder {\n return value === 'account' || value === 'party';\n}\n\n/**\n * The two picks (Q1 a), each starting a sign-in through pagasae. The\n * button pressed shows the sign-in on its way at once and takes no second\n * press; as a loading button sends no pick, the page goes to the sign-in\n * door itself. Before the page's script runs, the form sends the pick.\n */\nexport function PickHolder({ fields }: { fields: readonly [string, string][] }) {\n const [picked, setPicked] = useState<Holder | undefined>(undefined);\n const onSubmit = (event: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {\n event.preventDefault();\n const pressed = event.nativeEvent.submitter?.getAttribute('value');\n if (picked !== undefined || !isHolder(pressed)) {\n return;\n }\n setPicked(pressed);\n window.location.assign(signInAddressOf(fields, pressed));\n };\n return (\n <form method=\"get\" action={SIGN_IN_DOOR} onSubmit={onSubmit} className=\"grid gap-3 min-[481px]:grid-cols-2\">\n {fields.map(([name, value]) => (\n <input key={name} type=\"hidden\" name={name} value={value} />\n ))}\n {PICKS.map(({ holder, label, detail, icon }) => (\n <Button key={holder} type=\"submit\" name={HOLDER_FIELD} value={holder} icon={icon} isLoading={picked === holder} disabled={picked !== undefined && picked !== holder} className={TILE} data-testid={`authorize-pick-${holder}`}>\n <strong>{label}</strong>\n <span className=\"font-normal text-muted-foreground\">{detail}</span>\n </Button>\n ))}\n </form>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'hourglass',\n size: 24,\n node: [\n ['path', { d: 'M5 22h14', key: 'ehvnwv' }],\n ['path', { d: 'M5 2h14', key: 'pdyrp9' }],\n [\n 'path',\n {\n d: 'M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22',\n key: '1d314k',\n },\n ],\n [\n 'path',\n {\n d: 'M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2',\n key: '1vvvr6',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Hourglass\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/hourglass\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Hourglass = createLucideIcon(__iconData);\n\nexport default Hourglass;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'log-in',\n size: 24,\n node: [\n ['path', { d: 'm10 17 5-5-5-5', key: '1bsop3' }],\n ['path', { d: 'M15 12H3', key: '6jk70r' }],\n ['path', { d: 'M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4', key: 'u53s6r' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name LogIn\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/log-in\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst LogIn = createLucideIcon(__iconData);\n\nexport default LogIn;\n"],"names":["MS_PER_HOUR","HOURS_PER_DAY","timeLeft","expiresAt","now","hours","Math","max","floor","getTime","String","START_AGAIN","REASONS","invalidClient","noPick","unknownSignIn","otherBrowser","fleetNotServed","outsidePartiesOff","pagasaeRefused","unknownWaiting","otherBrowserWaiting","noSignIn","UNKNOWN_REASON","failedReasonText","reason","undefined","WAITING_DOOR","HOLDER_FIELD","SIGN_IN_DOOR","signInAddressOf","fields","holder","URLSearchParams","toString","pickFieldsOf","searchParams","Object","entries","flatMap","name","value","key"],"mappings":"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","ignoreList":[2,3]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(()=>{"use strict";module.exports=[72704,a=>{var b=a.i(7997),c=a.i(8403);function d({header:a,children:c}){return(0,b.jsxs)("div",{className:"flex min-h-dvh flex-col",children:[(0,b.jsx)("div",{"data-testid":"frame-header",className:"contents",children:a}),(0,b.jsx)("main",{className:"mx-auto w-full max-w-5xl flex-1 px-4 py-6",children:c})]})}var e=a.i(717),f=a.i(66283);async function g(){try{return await (await (0,f.z)(void 0)).account.apps.query()}catch(a){if(void 0!==(0,f.T)(a))return;throw a}}var h=a.i(75416),i=a.i(49310),j=a.i(26972),k=a.i(54757),k=k,l=a.i(27221),m=a.i(89963),n=a.i(83931),o=a.i(29517);let p=i.z.enum(["console","gateway","account","admin"]),q=j.z.object({app:p,url:k.httpUrl()});j.z.object({account:j.z.object({id:h.s,email:l.z.string()}),apps:m.z.array(q),fleets:m.z.array(j.z.object({id:(0,o.f)("fleet"),name:l.z.string(),argo:n.z.boolean(),apps:m.z.array(q)}))});var r=a.i(91156);let s=(0,o.f)("fleet");function t(a){return a.flatMap(({app:a,url:b})=>{let c=p.safeParse(a);return c.success?[{app:c.data,url:b}]:[]})}var u=a.i(73952);function v(){return(0,b.jsx)("header",{"data-testid":"plain-header",className:"flex h-14 items-center border-b border-border px-4",children:(0,b.jsx)("a",{href:"/overview",className:"text-section font-semibold",children:"Aeolus"})})}async function w({theme:a}){let c=await g(),d=void 0===c?[]:function(a){let b=h.s.safeParse(a.account.id),c=a.fleets.map(a=>s.safeParse(a.id));if(!b.success||c.some(a=>!a.success))return[];let d={account:{id:b.data,email:a.account.email},apps:t(a.apps),fleets:a.fleets.flatMap((a,b)=>{let d=c[b];return d?.success===!0?[{id:d.data,name:a.name,argo:!1,apps:t(a.apps)}]:[]})};return d.fleets.map(({id:a,name:b})=>(0,r.f)({list:d,fleet:{id:a,name:b},app:"gateway"}))}(c);return void 0===c||0===d.length?(0,b.jsx)(v,{}):(0,b.jsx)(e.Suspense,{fallback:(0,b.jsx)(v,{}),children:(0,b.jsx)(u.GatewayHeader,{switchers:d,email:c.account.email,accountUrl:c.apps.find(({app:a})=>"account"===a)?.url,theme:a})})}async function x({children:a}){return(0,b.jsx)(d,{header:(0,b.jsx)(w,{theme:await (0,c.f)()}),children:a})}a.s(["f",0,x],72704)},56397,a=>{let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call GatewayHeader() from the server but GatewayHeader is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/web/features/frame/ui/gateway-header.tsx","GatewayHeader");a.s(["GatewayHeader",0,b])},73952,a=>{var b=a.i(56397);a.n(b)}]})();
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=web_features_frame_0pe8cwpxe1egb._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/frame/hooks/read-header.ts","../../../../../web/features/frame/services/header-switchers.ts","../../../../../node_modules/%40aeolus-fleet/common/src/schemas/apps-list.ts","../../../../../web/features/frame/state/header.tsx","../../../../../web/features/frame/ui/plain-header.tsx","../../../../../web/features/frame/state/console-frame.tsx","../../../../../web/features/frame/ui/frame.tsx","../../../../../web/features/frame/ui/gateway-header.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/features/frame/ui/gateway-header.tsx%22%20%7D"],"sourcesContent":["/**\n * What the header shows, read through the gateway's API by the browser's\n * shared sign-in (header design H1): the account and the apps and fleets it\n * may open. A browser signed in to no account, a gateway that signs no one\n * in to its pages, or pagasae not answering, shows the plain bar: the page\n * itself says what to do.\n */\nimport { refusalCodeOf, requestApi } from '../../../lib/gateway-api/page-api';\nimport type { AccountApps } from '../services/header-switchers';\n\nexport async function readHeader(): Promise<AccountApps | undefined> {\n try {\n return await (await requestApi(undefined)).account.apps.query();\n } catch (error) {\n if (refusalCodeOf(error) !== undefined) {\n return undefined;\n }\n throw error;\n }\n}\n","/*\n * The switcher in the title of the header the gateway's pages show\n * (aeolus-fleet, header design H1, H9), from the apps and fleets the account\n * may open as the gateway's API answers them. The fleet in view is the one\n * the page's address names; a layout cannot read the address, so the server\n * offers one switcher per listed fleet and the header picks by the address.\n */\nimport { accountIdSchema, headerAppSchema, idSchema, type AppLink, type AppsList } from '@aeolus-fleet/common';\nimport { appSwitcherOf, type AppSwitcherModel } from '@aeolus-fleet/common/header';\n\n/** The apps and fleets the account may open, as the API's account.apps answers them. */\nexport interface AccountApps {\n account: { id: string; email: string };\n apps: readonly { app: string; url: string }[];\n fleets: readonly { id: string; name: string; apps: readonly { app: string; url: string }[] }[];\n}\n\nconst fleetIdSchema = idSchema('fleet');\n\n/** The apps the header knows (H12), the others left out; the addresses as the API answers them. */\nfunction headerAppsOf(apps: AccountApps['apps']): AppLink[] {\n return apps.flatMap(({ app, url }) => {\n const known = headerAppSchema.safeParse(app);\n return known.success ? [{ app: known.data, url }] : [];\n });\n}\n\n/** The switchers for the gateway, one per listed fleet with it in view; none for an answer with a malformed id. */\nexport function headerSwitchersOf(answer: AccountApps): AppSwitcherModel[] {\n const accountId = accountIdSchema.safeParse(answer.account.id);\n const fleetIds = answer.fleets.map((fleet) => fleetIdSchema.safeParse(fleet.id));\n if (!accountId.success || fleetIds.some((fleetId) => !fleetId.success)) {\n return [];\n }\n const list: AppsList = {\n account: { id: accountId.data, email: answer.account.email },\n apps: headerAppsOf(answer.apps),\n // Whether the account may sign in as argo is the console's alone: the gateway's header never shows it.\n fleets: answer.fleets.flatMap((fleet, index) => {\n const fleetId = fleetIds[index];\n return fleetId?.success === true ? [{ id: fleetId.data, name: fleet.name, argo: false, apps: headerAppsOf(fleet.apps) }] : [];\n }),\n };\n return list.fleets.map(({ id, name }) => appSwitcherOf({ list, fleet: { id, name }, app: 'gateway' }));\n}\n","unable to read source [project]/node_modules/@aeolus-fleet/common/src/schemas/apps-list.ts","import type { Theme } from '@aeolus-fleet/common';\nimport { Suspense } from 'react';\n\nimport { readHeader } from '../hooks/read-header';\nimport { headerSwitchersOf } from '../services/header-switchers';\nimport { GatewayHeader } from '../ui/gateway-header';\nimport { PlainHeader } from '../ui/plain-header';\n\n/** The header for the account signed in, or the plain bar for no account (or one that may open no fleet here, or an answer it cannot read). */\nexport async function Header({ theme }: { theme: Theme }) {\n const answer = await readHeader();\n const switchers = answer === undefined ? [] : headerSwitchersOf(answer);\n if (answer === undefined || switchers.length === 0) {\n return <PlainHeader />;\n }\n return (\n // The header reads the fleet in view from the address.\n <Suspense fallback={<PlainHeader />}>\n <GatewayHeader switchers={switchers} email={answer.account.email} accountUrl={answer.apps.find(({ app }) => app === 'account')?.url} theme={theme} />\n </Suspense>\n );\n}\n","/** The bar of a page shown to no account signed in: the sign-in pages, and a gateway that signs no one in to its pages. */\nexport function PlainHeader() {\n return (\n <header data-testid=\"plain-header\" className=\"flex h-14 items-center border-b border-border px-4\">\n <a href=\"/overview\" className=\"text-section font-semibold\">\n Aeolus\n </a>\n </header>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { readTheme } from '../hooks/read-theme';\nimport { Frame } from '../ui/frame';\nimport { Header } from './header';\n\n/** The frame of the gateway's own pages: the header every Aeolus app shows, for the account signed in. */\nexport async function ConsoleFrame({ children }: { children: ReactNode }) {\n return <Frame header={<Header theme={await readTheme()} />}>{children}</Frame>;\n}\n","import type { ReactNode } from 'react';\n\n/**\n * Every page of the gateway's web app: the header on top, the page below.\n * The header is the one every Aeolus app shows (@aeolus-fleet/common/header,\n * header design H2) for an account signed in, else a plain bar.\n */\nexport function Frame({ header, children }: { header: ReactNode; children: ReactNode }) {\n return (\n <div className=\"flex min-h-dvh flex-col\">\n <div data-testid=\"frame-header\" className=\"contents\">\n {header}\n </div>\n <main className=\"mx-auto w-full max-w-5xl flex-1 px-4 py-6\">{children}</main>\n </div>\n );\n}\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const GatewayHeader = registerClientReference(\n function() { throw new Error(\"Attempted to call GatewayHeader() from the server but GatewayHeader is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/features/frame/ui/gateway-header.tsx\",\n \"GatewayHeader\",\n);\n"],"names":["Frame","header","children","className","GatewayHeader","Error"],"mappings":"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","ignoreList":[2,7]}
|
package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[45648,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};d.node;let e=(0,c.f)(d);var f=a.i(78400),g=a.i(21244),h=a.i(95725),i=a.i(6158),j=a.i(18486);function k({switcher:a,account:c,onSearch:d,searchLabel:l="Search or jump to",children:m,actions:n,className:o}){return(0,b.jsxs)("header",{"data-slot":"app-header",className:(0,j.f)("sticky top-0 z-30 flex h-(--size-header) shrink-0 items-center justify-between gap-4 border-b border-border bg-background px-6",o),children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[void 0===a?(0,b.jsx)("span",{"data-testid":"app-switcher-loading","aria-hidden":!0,className:"h-4 w-36 shrink-0 animate-pulse rounded bg-muted motion-reduce:animate-none"}):(0,b.jsx)(f.AppSwitcher,{switcher:a,layout:"full",className:"shrink-0"}),m]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-3",children:[n,d?(0,b.jsxs)(g.f,{size:"sm",icon:(0,b.jsx)(e,{"aria-hidden":!0}),"data-testid":"header-search",className:"w-60 justify-start font-normal text-muted-foreground max-lg:w-auto",onClick:d,children:[(0,b.jsx)("span",{className:"grow text-left max-lg:sr-only",children:l}),(0,b.jsx)(h.f,{children:"⌘K"})]}):null,(0,b.jsx)(i.AvatarMenu,{...c})]})]})}var l=a.i(50944),m=a.i(72131),n=a.i(5050);let o=(0,n.createServerReference)("40d6872414150cd79fefc55f072b7cad40b6a4a069",n.callServer,void 0,n.findSourceMapURL,"setTheme"),p=["light","dark","system"],q=[{key:"overview",label:"Overview",path:"/overview"},{key:"outside-parties",label:"Outside parties",path:"/outside-parties"},{key:"parties",label:"Parties",path:"/parties"}];function r({fleetId:a}){let c=(0,l.usePathname)();return(0,b.jsx)("nav",{"aria-label":"Gateway",className:"flex shrink-0 items-center gap-1",children:q.map(({key:d,label:e,path:f})=>{let g=c===f||c.startsWith(`${f}/`);return(0,b.jsx)("a",{href:function(a,b){let[c="",d=""]=a.split("?"),e=new URLSearchParams(d);return e.set("fleet",b),`${c}?${e.toString()}`}(f,a),"data-testid":`frame-tab-${d}`,"aria-current":g?"page":void 0,className:`whitespace-nowrap rounded-md px-2 py-1 text-sm ${g?"bg-accent font-semibold":"text-muted-foreground hover:bg-accent"}`,children:e},d)})})}a.s(["GatewayHeader",0,function({switchers:a,email:c,accountUrl:d,theme:e}){let g=(0,l.useSearchParams)().get("fleet"),h=a.find(({fleet:a})=>a.id===g)??a[0],[j,n]=(0,m.useState)(e),[q,s]=(0,m.useState)(!1),t=(0,m.useRef)(null),u={name:c,signedInAs:"account",accountUrl:d,theme:j,themes:p,hasTheme:!0,onThemeChange:a=>{let b;n(a),document.documentElement.dataset.theme=a,b="dark"===a||"system"===a&&window.matchMedia("(prefers-color-scheme: dark)").matches,document.documentElement.classList.toggle("dark",b),o(a)},shortcuts:[],helpUrl:"https://github.com/ThomasHendrickx/aeolus-fleet",onSignOut:()=>{s(!0),t.current?.requestSubmit()},isSigningOut:q};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("form",{ref:t,method:"post",action:"/sign-in/end",hidden:!0}),(0,b.jsx)(k,{switcher:h,account:u,className:"max-sm:hidden",children:void 0===h?null:(0,b.jsx)(r,{fleetId:h.fleet.id})}),(0,b.jsxs)("header",{className:"sticky top-0 z-30 flex h-14 shrink-0 items-center gap-3 border-b border-border bg-background px-4 sm:hidden",children:[void 0===h?null:(0,b.jsx)(f.AppSwitcher,{switcher:h,layout:"compact",className:"min-w-0"}),void 0===h?null:(0,b.jsx)(r,{fleetId:h.fleet.id}),(0,b.jsx)("span",{className:"grow"}),(0,b.jsx)(i.AvatarMenuSheet,{...u})]})]})}],45648)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map
|
package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/frame/ui/gateway-header.tsx","../../../../../web/features/frame/data%3Acccf55%20%3Ctext/javascript%3E","../../../../../web/features/frame/ui/gateway-tabs.tsx","../../../../../node_modules/%40aeolus-fleet/common/src/header/app-header.tsx","../../../../../web/features/frame/theme.ts","../../../../../node_modules/lucide-react/src/icons/search.ts","../../../../../web/lib/gateway-api/page-account.ts"],"sourcesContent":["'use client';\n\nimport type { Theme } from '@aeolus-fleet/common';\nimport { AppHeader, AppSwitcher, AvatarMenuSheet, type AppSwitcherModel, type AvatarMenuProps } from '@aeolus-fleet/common/header';\nimport { useSearchParams } from 'next/navigation';\nimport { useRef, useState } from 'react';\n\nimport { setTheme } from '../actions';\nimport { THEMES } from '../theme';\nimport { GatewayTabs } from './gateway-tabs';\n\n/** Where the avatar menu's Help leads, as in the console. */\nconst HELP_URL = 'https://github.com/ThomasHendrickx/aeolus-fleet';\n\n/** The gateway's server ends the shared sign-in here, in every app at once, for a form sent from its own pages. */\nconst SIGN_OUT_PATH = '/sign-in/end';\n\n/** Applies a theme at once, as the root layout's script does on the next load. */\nfunction applyTheme(theme: Theme): void {\n document.documentElement.dataset.theme = theme;\n const isDark = theme === 'dark' || (theme === 'system' && window.matchMedia('(prefers-color-scheme: dark)').matches);\n document.documentElement.classList.toggle('dark', isDark);\n}\n\ninterface GatewayHeaderProps {\n /** One per fleet the account may open, with it in view; the address picks one. */\n switchers: readonly AppSwitcherModel[];\n email: string;\n /** Account's address, for the avatar menu's Your account, Your rights and Email updates. */\n accountUrl: string | undefined;\n theme: Theme;\n}\n\n/**\n * The header every Aeolus app shows (aeolus-fleet, header design), on the\n * gateway's pages: from 640 px the shared AppHeader, with the switcher in\n * the title and the avatar menu; on phone a bar with the switcher compact\n * and the avatar's bottom Sheet (H6). After the title, the tabs to the\n * overview, the outside parties and the parties. The fleet in view is the one the\n * address names, else the account's first. Sign out ends the shared\n * sign-in in every app and shows \"Signing out\" until the page leaves.\n */\nexport function GatewayHeader({ switchers, email, accountUrl, theme }: GatewayHeaderProps) {\n const requested = useSearchParams().get('fleet');\n const switcher = switchers.find(({ fleet }) => fleet.id === requested) ?? switchers[0];\n const [shownTheme, setShownTheme] = useState(theme);\n const [isSigningOut, setIsSigningOut] = useState(false);\n const signOutForm = useRef<HTMLFormElement>(null);\n\n const account: AvatarMenuProps = {\n name: email,\n signedInAs: 'account',\n accountUrl,\n theme: shownTheme,\n themes: THEMES,\n hasTheme: true,\n onThemeChange: (next) => {\n setShownTheme(next);\n applyTheme(next);\n void setTheme(next);\n },\n shortcuts: [],\n helpUrl: HELP_URL,\n onSignOut: () => {\n setIsSigningOut(true);\n signOutForm.current?.requestSubmit();\n },\n isSigningOut,\n };\n return (\n <>\n <form ref={signOutForm} method=\"post\" action={SIGN_OUT_PATH} hidden />\n <AppHeader switcher={switcher} account={account} className=\"max-sm:hidden\">\n {switcher === undefined ? null : <GatewayTabs fleetId={switcher.fleet.id} />}\n </AppHeader>\n <header className=\"sticky top-0 z-30 flex h-14 shrink-0 items-center gap-3 border-b border-border bg-background px-4 sm:hidden\">\n {switcher === undefined ? null : <AppSwitcher switcher={switcher} layout=\"compact\" className=\"min-w-0\" />}\n {switcher === undefined ? null : <GatewayTabs fleetId={switcher.fleet.id} />}\n <span className=\"grow\" />\n <AvatarMenuSheet {...account} />\n </header>\n </>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40d6872414150cd79fefc55f072b7cad40b6a4a069\":{\"name\":\"setTheme\"}},\"web/features/frame/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d6872414150cd79fefc55f072b7cad40b6a4a069\",callServer,void 0,findSourceMapURL,\"setTheme\");export{$$RSC_SERVER_ACTION_0 as setTheme};","'use client';\n\nimport { usePathname } from 'next/navigation';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\n\n/** The gateway's pages a person goes between. */\nconst TABS = [\n { key: 'overview', label: 'Overview', path: '/overview' },\n { key: 'outside-parties', label: 'Outside parties', path: '/outside-parties' },\n { key: 'parties', label: 'Parties', path: '/parties' },\n] as const;\n\n/** Whether the page at this path is the tab's page or one of its own. */\nfunction isTabOf(pathname: string, path: string): boolean {\n return pathname === path || pathname.startsWith(`${path}/`);\n}\n\n/** The header's tabs: the overview, the outside parties and the parties of the fleet in view, the page shown current. */\nexport function GatewayTabs({ fleetId }: { fleetId: string }) {\n const pathname = usePathname();\n return (\n <nav aria-label=\"Gateway\" className=\"flex shrink-0 items-center gap-1\">\n {TABS.map(({ key, label, path }) => {\n const isCurrent = isTabOf(pathname, path);\n return (\n <a\n key={key}\n href={inFleet(path, fleetId)}\n data-testid={`frame-tab-${key}`}\n aria-current={isCurrent ? 'page' : undefined}\n className={`whitespace-nowrap rounded-md px-2 py-1 text-sm ${isCurrent ? 'bg-accent font-semibold' : 'text-muted-foreground hover:bg-accent'}`}\n >\n {label}\n </a>\n );\n })}\n </nav>\n );\n}\n","unable to read source [project]/node_modules/@aeolus-fleet/common/src/header/app-header.tsx","/**\n * The theme this browser chose for the gateway's pages (header design H13:\n * each app keeps its own), System until chosen.\n */\nimport type { Theme } from '@aeolus-fleet/common';\n\n/** The themes, as common names them: written here so the header's browser code loads no schema (decision 0033). */\nexport const THEMES: readonly Theme[] = ['light', 'dark', 'system'];\n\n/** The cookie that keeps it. */\nexport const THEME_COOKIE = 'aeolus_gateway_theme';\n\nexport function isTheme(value: unknown): value is Theme {\n return THEMES.some((theme) => theme === value);\n}\n\n/** The theme a cookie names, or System. */\nexport function themeFrom(value: string | undefined): Theme {\n return isTheme(value) ? value : 'system';\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'search',\n size: 24,\n node: [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/search\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Search = createLucideIcon(__iconData);\n\nexport default Search;\n","/**\n * What a page of the web app does with the API's account.inView (header\n * design H5, H9): show its fleet as the account signed in, or send the\n * browser where it may go: the same page in the fleet the account may open,\n * the app it may open there, or sign-in and back to the page.\n */\n\n/** The API's answer to account.inView. */\nexport type InView =\n | { kind: 'signedIn'; fleetId: string; accountId: string; scopes: string[] }\n | { kind: 'goTo'; fleetId: string }\n | { kind: 'elsewhere'; url: string };\n\n/** The API's refusals of account.inView a page answers: signed in to no account, and no shared sign-in at this gateway. */\nexport type InViewRefusal = 'UNAUTHORIZED' | 'NOT_FOUND';\n\nexport type PageAccount = { kind: 'signedIn'; fleetId: string; scopes: readonly string[] } | { kind: 'goTo'; location: string } | { kind: 'noSignIn' };\n\nconst SIGN_IN_START = '/sign-in/start';\n\n/** The parameter a page names its fleet by. */\nexport const FLEET_PARAMETER = 'fleet';\n\n/** A page of the web app in a fleet: every link keeps the fleet in its address. */\nexport function inFleet(page: string, fleetId: string): string {\n const [path = '', query = ''] = page.split('?');\n const parameters = new URLSearchParams(query);\n parameters.set(FLEET_PARAMETER, fleetId);\n return `${path}?${parameters.toString()}`;\n}\n\n/** Reads the answer for the page asked for, its path and query as the browser sent them. */\nexport function pageAccountOf(read: { inView: InView } | { refusal: InViewRefusal }, page: string): PageAccount {\n if ('refusal' in read) {\n return read.refusal === 'UNAUTHORIZED' ? { kind: 'goTo', location: `${SIGN_IN_START}?${new URLSearchParams({ return_to: page }).toString()}` } : { kind: 'noSignIn' };\n }\n const { inView } = read;\n switch (inView.kind) {\n case 'signedIn':\n return { kind: 'signedIn', fleetId: inView.fleetId, scopes: inView.scopes };\n case 'goTo':\n return { kind: 'goTo', location: inFleet(page, inView.fleetId) };\n case 'elsewhere':\n return { kind: 'goTo', location: inView.url };\n }\n}\n"],"names":["node","cx","key"],"mappings":"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","ignoreList":[3,5]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[18434,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(77237),h=a.i(5050);let i=(0,h.createServerReference)("
|
|
1
|
+
module.exports=[18434,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(77237),h=a.i(5050);let i=(0,h.createServerReference)("608aa10f54f0e14d9b925587194219713a446668e4",h.callServer,void 0,h.findSourceMapURL,"switchOutsideParties"),j={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};function k({tone:a,label:c}){return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full border px-2 text-caption ${j[a]}`,children:c})}a.s(["SwitchCard",0,function({isOn:a,canSwitch:h,fleetId:j}){let[l,m]=(0,c.useActionState)(i,d.Q);return(0,b.jsxs)("section",{className:`${e.r} grid gap-3`,"data-testid":"outside-parties-switch",children:[(0,b.jsxs)("h2",{className:"flex items-center gap-2 text-section font-semibold",children:["Outside parties are ",a?"on":"off"," ",a?(0,b.jsx)(k,{tone:"ok",label:"On"}):(0,b.jsx)(k,{tone:"ended",label:"Off"})]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:a?"Approved outside MCP servers and clients reach the fleet, as its network rules allow.":"No outside MCP server or client reaches the fleet, and no request for one can be approved."}),"openNetwork"===l.kind?(0,b.jsxs)("form",{action:m,role:"alert",className:"grid gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg p-4 text-tone-attention-fg",children:[(0,b.jsx)("h3",{className:"font-semibold",children:"Open network"}),(0,b.jsx)("p",{children:l.message}),(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"isOn",value:"true"}),(0,b.jsx)("input",{type:"hidden",name:"isOpenNetworkConfirmed",value:"true"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(g.f,{kind:"destructive",pending:"Turning on…",testId:"outside-parties-turn-on-anyway",children:"Turn on anyway"}),(0,b.jsx)("a",{className:e.x.secondary,href:"",children:"Keep off"})]})]}):h?(0,b.jsxs)("form",{action:m,children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"isOn",value:String(!a)}),(0,b.jsx)(g.f,{kind:a?"secondary":"primary",pending:a?"Turning off…":"Turning on…",testId:"outside-parties-turn",children:a?"Turn off":"Turn on"})]}):(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Turning them on or off needs ","fleet:network","."]}),"openNetwork"===l.kind?null:(0,b.jsx)(f.f,{state:l})]})}],18434)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/outside-parties/ui/switch-card.tsx","../../../../../web/features/outside-parties/data%
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/outside-parties/ui/switch-card.tsx","../../../../../web/features/outside-parties/data%3A7dc171%20%3Ctext/javascript%3E","../../../../../web/features/outside-parties/ui/status-badge.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD, IDLE } from '../../forms/form-state';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { switchOutsideParties } from '../actions';\nimport { StatusBadge } from './status-badge';\n\n/** The scope that turns outside parties on or off (0056). */\nconst SWITCHING_SCOPE = 'fleet:network';\n\n/**\n * Whether the fleet's outside parties are on, and the switch for an account\n * holding fleet:network. An open network's warning asks to confirm, or to\n * keep them off.\n */\nexport function SwitchCard({ isOn, canSwitch, fleetId }: { isOn: boolean; canSwitch: boolean; fleetId: string }) {\n const [state, formAction] = useActionState(switchOutsideParties, IDLE);\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"outside-parties-switch\">\n <h2 className=\"flex items-center gap-2 text-section font-semibold\">\n Outside parties are {isOn ? 'on' : 'off'} {isOn ? <StatusBadge tone=\"ok\" label=\"On\" /> : <StatusBadge tone=\"ended\" label=\"Off\" />}\n </h2>\n <p className=\"text-muted-foreground\">\n {isOn ? 'Approved outside MCP servers and clients reach the fleet, as its network rules allow.' : 'No outside MCP server or client reaches the fleet, and no request for one can be approved.'}\n </p>\n {state.kind === 'openNetwork' ? (\n <form action={formAction} role=\"alert\" className=\"grid gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg p-4 text-tone-attention-fg\">\n <h3 className=\"font-semibold\">Open network</h3>\n <p>{state.message}</p>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"isOn\" value=\"true\" />\n <input type=\"hidden\" name=\"isOpenNetworkConfirmed\" value=\"true\" />\n <div className=\"flex gap-2\">\n <SubmitButton kind=\"destructive\" pending=\"Turning on…\" testId=\"outside-parties-turn-on-anyway\">\n Turn on anyway\n </SubmitButton>\n <a className={BUTTONS.secondary} href=\"\">\n Keep off\n </a>\n </div>\n </form>\n ) : canSwitch ? (\n <form action={formAction}>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"isOn\" value={String(!isOn)} />\n <SubmitButton kind={isOn ? 'secondary' : 'primary'} pending={isOn ? 'Turning off…' : 'Turning on…'} testId=\"outside-parties-turn\">\n {isOn ? 'Turn off' : 'Turn on'}\n </SubmitButton>\n </form>\n ) : (\n <p className=\"text-muted-foreground\">Turning them on or off needs {SWITCHING_SCOPE}.</p>\n )}\n {state.kind === 'openNetwork' ? null : <Outcome state={state} />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"608aa10f54f0e14d9b925587194219713a446668e4\":{\"name\":\"switchOutsideParties\"}},\"web/features/outside-parties/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"608aa10f54f0e14d9b925587194219713a446668e4\",callServer,void 0,findSourceMapURL,\"switchOutsideParties\");export{$$RSC_SERVER_ACTION_0 as switchOutsideParties};","import type { Tone } from '../party-kinds';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, as the console shows one. */\nexport function StatusBadge({ tone, label }: { tone: Tone; label: string }) {\n return <span className={`inline-flex items-center rounded-full border px-2 text-caption ${TONES[tone]}`}>{label}</span>;\n}\n\n/** A plain tag: a protocol, a side, an id. */\nexport function Tag({ children, isMono = false }: { children: React.ReactNode; isMono?: boolean }) {\n return <span className={`inline-flex items-center rounded-md border border-border px-2 text-caption ${isMono ? 'font-mono' : ''}`}>{children}</span>;\n}\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
|
package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[94705,18379,a=>{"use strict";var b=a.i(37936);a.i(70396);var c=a.i(73727),d=a.i(55476),e=a.i(66283),f=a.i(1324),g=a.i(72913),h=a.i(29517);let i=["messages:send","messages:receive"],j="scope:",k="scopesShown";function l(a,b){let c,{form:d,scopes:e}=b,f=d.ownerShipId?.trim();if(void 0!==f&&f!==a.ownerShipId){let a=(0,h.f)("ship").safeParse(f);if(!a.success)return{kind:"refused",message:"The owner's ship id is not a ship id (shp_...)"};c=a.data}let g=void 0===c?{}:{ownerShipId:c},l=a.scopes;if("true"!==d[k]||null===l)return{kind:"changes",...g,grant:[],revoke:[]};let m=e.filter(a=>!i.includes(a)),n=a=>void 0!==d[`${j}${a}`];return{kind:"changes",...g,grant:m.filter(a=>n(a)&&!l.includes(a)),revoke:m.filter(a=>!n(a)&&l.includes(a))}}a.s(["_",0,i,"e",0,k,"u",0,j,"t",0,l],18379);var m=a.i(13095);let n="name";async function o(a,b){let h=(0,f.v)(b,f.H),i=(0,f.v)(b,n),j=await (0,e.z)(h);try{let[a,c]=await Promise.all([j.parties.get.query({name:i}),j.account.inView.query()]),d=l(a,{form:(0,f.O)(b),scopes:"signedIn"===c.kind?c.scopes:[]});if("refused"===d.kind)return d;void 0!==d.ownerShipId&&await j.parties.changeOwner.mutate({name:i,ownerShipId:d.ownerShipId}),(d.grant.length>0||d.revoke.length>0)&&await j.parties.changeScopes.mutate({name:i,grant:d.grant,revoke:d.revoke})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)((0,g.N)(i),h))}async function p(a,b){let h=(0,f.v)(b,f.H),i=await (0,e.z)(h);try{await i.parties.retire.mutate({name:(0,f.v)(b,n)})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)(g.$,h))}(0,m.ensureServerEntryExports)([o,p]),(0,b.registerServerReference)(o,"
|
|
1
|
+
module.exports=[94705,18379,a=>{"use strict";var b=a.i(37936);a.i(70396);var c=a.i(73727),d=a.i(55476),e=a.i(66283),f=a.i(1324),g=a.i(72913),h=a.i(29517);let i=["messages:send","messages:receive"],j="scope:",k="scopesShown";function l(a,b){let c,{form:d,scopes:e}=b,f=d.ownerShipId?.trim();if(void 0!==f&&f!==a.ownerShipId){let a=(0,h.f)("ship").safeParse(f);if(!a.success)return{kind:"refused",message:"The owner's ship id is not a ship id (shp_...)"};c=a.data}let g=void 0===c?{}:{ownerShipId:c},l=a.scopes;if("true"!==d[k]||null===l)return{kind:"changes",...g,grant:[],revoke:[]};let m=e.filter(a=>!i.includes(a)),n=a=>void 0!==d[`${j}${a}`];return{kind:"changes",...g,grant:m.filter(a=>n(a)&&!l.includes(a)),revoke:m.filter(a=>!n(a)&&l.includes(a))}}a.s(["_",0,i,"e",0,k,"u",0,j,"t",0,l],18379);var m=a.i(13095);let n="name";async function o(a,b){let h=(0,f.v)(b,f.H),i=(0,f.v)(b,n),j=await (0,e.z)(h);try{let[a,c]=await Promise.all([j.parties.get.query({name:i}),j.account.inView.query()]),d=l(a,{form:(0,f.O)(b),scopes:"signedIn"===c.kind?c.scopes:[]});if("refused"===d.kind)return d;void 0!==d.ownerShipId&&await j.parties.changeOwner.mutate({name:i,ownerShipId:d.ownerShipId}),(d.grant.length>0||d.revoke.length>0)&&await j.parties.changeScopes.mutate({name:i,grant:d.grant,revoke:d.revoke})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)((0,g.N)(i),h))}async function p(a,b){let h=(0,f.v)(b,f.H),i=await (0,e.z)(h);try{await i.parties.retire.mutate({name:(0,f.v)(b,n)})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)(g.$,h))}(0,m.ensureServerEntryExports)([o,p]),(0,b.registerServerReference)(o,"6055c013d3bc3980de78711f60a45056e2d2b03c76",null),(0,b.registerServerReference)(p,"6095c15cea5fe1433a5aedd78c98e302d54a585ba2",null),a.s(["v",0,o,"t",0,p],94705)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[4757,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558);a.i(70396);var e=a.i(73727),f=a.i(55476),g=a.i(66283),h=a.i(54757),h=h,i=a.i(27221),j=a.i(26972),k=h,l=a.i(89963),m=h,n=h;let o=h.int().min(1),p=i.z.string().min(1),q=j.z.object({key:o,label:p,detail:i.z.string().default("")}),r=j.z.object({id:k.uuid(),title:p,context:i.z.string(),options:l.z.array(q).min(1),pick:j.z.object({option:o,why:p})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]});j.z.object({questionId:k.uuid()}),j.z.object({questionId:k.uuid(),question:r}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]}),m.union([j.z.object({option:o,note:p.optional()}),j.z.object({note:p})]);let s=m.union([j.z.object({questionId:k.uuid(),option:o,note:p.optional()}),j.z.object({questionId:k.uuid(),note:p})]),t=j.z.object({messageId:(0,c.f)("message"),sentAt:n.iso.datetime(),option:o.nullable(),note:i.z.string().nullable()});j.z.object({id:k.uuid(),title:i.z.string(),context:i.z.string(),options:l.z.array(q),pick:j.z.object({option:o,why:i.z.string()}),answer:t.nullable()});var u=a.i(11393),v=a.i(10351);async function w(a,b){let c;try{c={isOk:!0,value:await b(await (0,g.z)(a))}}catch(c){let b=(0,g.T)(c);if("UNAUTHORIZED"===b)return(0,e.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${v.K}?${new URLSearchParams({[f.n]:a}).toString()}`}).toString()}`);return{isOk:!1,message:void 0===b?"The gateway did not answer: try again in a moment":(0,g.s)(c)}}return(0,d.revalidatePath)(v.K),c}async function x(a,b){return w(a,async a=>{let{contentType:c,payload:d,...e}=await a.people.open.mutate({deliveryId:b});return{...e,payload:d,question:function(a){if("application/vnd.aeolus.question+json"===function(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}(a.contentType))try{let b=r.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}({contentType:c,payload:d})}})}async function y({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=s.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?w(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function z(a,b){return w(a,async a=>{await a.people.done.mutate({deliveryId:b})})}async function A({fleet:a,requestId:b,input:d}){if("deny"===d.kind)return w(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let e=(0,c.f)("ship").safeParse(d.ownerShipId.trim());if(!e.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:d.name,ownerShipId:e.data,scopes:[...new Set([...u._,...d.scopes])]},{server:g}=d,h=void 0===g?void 0:"clientCredentials"===g.credentialKind?{kind:"clientCredentials",clientId:g.clientId,clientSecret:g.clientSecret,issuer:g.issuer,...""===g.scope?{}:{scope:g.scope}}:{kind:"bearer",token:g.token};return w(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([x,y,z,A]),(0,b.registerServerReference)(x,"
|
|
1
|
+
module.exports=[4757,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558);a.i(70396);var e=a.i(73727),f=a.i(55476),g=a.i(66283),h=a.i(54757),h=h,i=a.i(27221),j=a.i(26972),k=h,l=a.i(89963),m=h,n=h;let o=h.int().min(1),p=i.z.string().min(1),q=j.z.object({key:o,label:p,detail:i.z.string().default("")}),r=j.z.object({id:k.uuid(),title:p,context:i.z.string(),options:l.z.array(q).min(1),pick:j.z.object({option:o,why:p})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]});j.z.object({questionId:k.uuid()}),j.z.object({questionId:k.uuid(),question:r}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]}),m.union([j.z.object({option:o,note:p.optional()}),j.z.object({note:p})]);let s=m.union([j.z.object({questionId:k.uuid(),option:o,note:p.optional()}),j.z.object({questionId:k.uuid(),note:p})]),t=j.z.object({messageId:(0,c.f)("message"),sentAt:n.iso.datetime(),option:o.nullable(),note:i.z.string().nullable()});j.z.object({id:k.uuid(),title:i.z.string(),context:i.z.string(),options:l.z.array(q),pick:j.z.object({option:o,why:i.z.string()}),answer:t.nullable()});var u=a.i(11393),v=a.i(10351);async function w(a,b){let c;try{c={isOk:!0,value:await b(await (0,g.z)(a))}}catch(c){let b=(0,g.T)(c);if("UNAUTHORIZED"===b)return(0,e.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${v.K}?${new URLSearchParams({[f.n]:a}).toString()}`}).toString()}`);return{isOk:!1,message:void 0===b?"The gateway did not answer: try again in a moment":(0,g.s)(c)}}return(0,d.revalidatePath)(v.K),c}async function x(a,b){return w(a,async a=>{let{contentType:c,payload:d,...e}=await a.people.open.mutate({deliveryId:b});return{...e,payload:d,question:function(a){if("application/vnd.aeolus.question+json"===function(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}(a.contentType))try{let b=r.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}({contentType:c,payload:d})}})}async function y({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=s.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?w(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function z(a,b){return w(a,async a=>{await a.people.done.mutate({deliveryId:b})})}async function A({fleet:a,requestId:b,input:d}){if("deny"===d.kind)return w(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let e=(0,c.f)("ship").safeParse(d.ownerShipId.trim());if(!e.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:d.name,ownerShipId:e.data,scopes:[...new Set([...u._,...d.scopes])]},{server:g}=d,h=void 0===g?void 0:"clientCredentials"===g.credentialKind?{kind:"clientCredentials",clientId:g.clientId,clientSecret:g.clientSecret,issuer:g.issuer,...""===g.scope?{}:{scope:g.scope}}:{kind:"bearer",token:g.token};return w(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([x,y,z,A]),(0,b.registerServerReference)(x,"60c5f3659aad6966b26d46ff4ed48172052fc42a6a",null),(0,b.registerServerReference)(y,"403e0b04e60dfe1d24c4ecc52b215e8e12e99da16b",null),(0,b.registerServerReference)(z,"60cd31f366bb1d6ef873aca1dd9dd6a97a6fc52519",null),(0,b.registerServerReference)(A,"40fb5ea5dfa363fa3f1d6ec32115e8bfd1bd454758",null),a.s(["q",0,y,"Q",0,A,"G",0,z,"v",0,x],4757)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[91445,a=>{"use strict";var b=a.i(87924),c=a.i(50944),d=a.i(72131),e=a.i(5050);let f=(0,e.createServerReference)("
|
|
1
|
+
module.exports=[91445,a=>{"use strict";var b=a.i(87924),c=a.i(50944),d=a.i(72131),e=a.i(5050);let f=(0,e.createServerReference)("40fb5ea5dfa363fa3f1d6ec32115e8bfd1bd454758",e.callServer,void 0,e.findSourceMapURL,"decideRequest");var g=a.i(35149);let h=["messages:send","messages:receive"],i={"messages:send":"Send","messages:receive":"Receive","fleet:read":"Read the fleet"};var j=a.i(1542),k=a.i(24229);let l="rounded-md border border-input bg-background px-2 py-1.5";function m({scope:a,isLocked:c}){return(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[c?(0,b.jsx)("input",{type:"checkbox",checked:!0,disabled:!0,"aria-label":i[a]??a}):(0,b.jsx)("input",{type:"checkbox",name:"scope",value:a,"aria-label":i[a]??a}),(0,b.jsx)("span",{children:i[a]??a}),(0,b.jsx)("span",{className:"font-mono text-caption text-muted-foreground",children:a}),c?(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"(always)"}):null]})}function n(a,b){let c=a.get(b);return"string"==typeof c?c:""}function o({request:a,heldScopes:c,owners:e,working:f,failure:i,onDecide:p}){let[q,r]=(0,d.useState)("bearer"),s=function(a){switch(a.subject.kind){case"client":return a.subject.clientName;case"server":return URL.canParse(a.subject.url)?new URL(a.subject.url).host:a.subject.url}}(a),t="server"===a.subject.kind;return(0,b.jsxs)("section",{className:"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm",children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Approve ",s]}),(0,b.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=new FormData(a.currentTarget),c=b.getAll("scope").filter(a=>"string"==typeof a);p({kind:"approve",name:n(b,"name"),ownerShipId:n(b,"ownerShipId"),scopes:c,server:t?{credentialKind:"clientCredentials"===n(b,"credentialKind")?"clientCredentials":"bearer",token:n(b,"token"),clientId:n(b,"clientId"),clientSecret:n(b,"clientSecret"),issuer:n(b,"issuer"),scope:n(b,"scope-requested"),concurrencyLimit:Number(n(b,"concurrencyLimit"))}:void 0})},className:"grid gap-3",children:[(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{name:"name",defaultValue:s.toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,""),required:!0,className:l})]}),(0,b.jsx)(g.f,{choices:e.isOk?e.value:[],current:null,help:"A person ship or argo. It answers for this party.",refusal:e.isOk?void 0:e.refusal}),(0,b.jsxs)("fieldset",{className:"grid gap-1",children:[(0,b.jsx)("legend",{children:"Scopes"}),h.map(a=>(0,b.jsx)(m,{scope:a,isLocked:!0},a)),c.filter(a=>!h.includes(a)).map(a=>(0,b.jsx)(m,{scope:a,isLocked:!1},a))]}),t?(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{children:"The server's credential"}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsxs)("select",{name:"credentialKind",value:q,onChange:a=>{r("clientCredentials"===a.target.value?"clientCredentials":"bearer")},className:l,children:[(0,b.jsx)("option",{value:"bearer",children:"Bearer token"}),(0,b.jsx)("option",{value:"clientCredentials",children:"OAuth client credentials"})]})]}),"bearer"===q?(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{type:"password",name:"token",className:l})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{name:"clientId",className:l})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{type:"password",name:"clientSecret",className:l})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{type:"url",name:"issuer",className:l})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{name:"scope-requested",className:l})]})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:4,className:l})]})]}):null,void 0===i?null:(0,b.jsx)(k.f,{message:i,isFailure:!0}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(j.f,{type:"submit",variant:"primary","data-testid":"overview-approve",isPending:"approve"===f,pendingLabel:"Approving...",disabled:void 0!==f,children:"Approve"}),(0,b.jsx)(j.f,{type:"button","data-testid":"overview-deny",isPending:"deny"===f,pendingLabel:"Denying...",disabled:void 0!==f,onClick:()=>{p({kind:"deny"})},children:"Deny"})]})]})]})}a.s(["DecisionPanel",0,function({fleetId:a,request:e,heldScopes:g,owners:h}){let i=(0,c.useRouter)(),[j,k]=(0,d.useState)(),[l,m]=(0,d.useState)(),[,n]=(0,d.useTransition)();return(0,b.jsx)(o,{request:e,heldScopes:g,owners:h,working:j,failure:l,onDecide:b=>{k(b.kind),m(void 0),n(async()=>{let c=await f({fleet:a,requestId:e.requestId,input:b});c.isOk?i.push(`/overview?${new URLSearchParams({fleet:a,decided:b.kind}).toString()}`):(k(void 0),m(c.message))})}})}],91445)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/overview/state/decision-panel.tsx","../../../../../web/features/overview/hooks/data%3A20669f%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/decision-form.tsx","../../../../../web/features/overview/services/requests.ts"],"sourcesContent":["'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useState, useTransition } from 'react';\n\nimport type { OwnerChoices } from '../../forms/ui/owner-field';\nimport { decideRequest } from '../hooks/overview-actions';\nimport type { DecisionInput, ShownRequest } from '../services/requests';\nimport { DecisionForm } from '../ui/decision-form';\n\n/** Decides one request as the signed-in approver, then goes back to the Overview, which says nothing more waits here. */\nexport function DecisionPanel({ fleetId, request, heldScopes, owners }: { fleetId: string; request: ShownRequest; heldScopes: readonly string[]; owners: OwnerChoices }) {\n const router = useRouter();\n const [working, setWorking] = useState<DecisionInput['kind'] | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const decide = (decision: DecisionInput) => {\n setWorking(decision.kind);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await decideRequest({ fleet: fleetId, requestId: request.requestId, input: decision });\n if (outcome.isOk) {\n router.push(`/overview?${new URLSearchParams({ fleet: fleetId, decided: decision.kind }).toString()}`);\n return;\n }\n setWorking(undefined);\n setFailure(outcome.message);\n });\n };\n return <DecisionForm request={request} heldScopes={heldScopes} owners={owners} working={working} failure={failure} onDecide={decide} />;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40e3b1ad8f9fb8e176b3525a47087f36b14fbcba6e\":{\"name\":\"decideRequest\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40e3b1ad8f9fb8e176b3525a47087f36b14fbcba6e\",callServer,void 0,findSourceMapURL,\"decideRequest\");export{$$RSC_SERVER_ACTION_3 as decideRequest};","'use client';\n\nimport { useState, type SyntheticEvent } from 'react';\n\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { EVERY_APP_SHIP_SCOPES, scopeLabel, subjectName, suggestedName, type DecisionInput, type ServerCredentialInput, type ShownRequest } from '../services/requests';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nconst CONCURRENCY_LIMIT_DEFAULT = 4;\n\nconst FIELD = 'rounded-md border border-input bg-background px-2 py-1.5';\n\nfunction ScopeRow({ scope, isLocked }: { scope: string; isLocked: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n {isLocked ? <input type=\"checkbox\" checked disabled aria-label={scopeLabel(scope)} /> : <input type=\"checkbox\" name=\"scope\" value={scope} aria-label={scopeLabel(scope)} />}\n <span>{scopeLabel(scope)}</span>\n <span className=\"font-mono text-caption text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-caption text-muted-foreground\">(always)</span> : null}\n </label>\n );\n}\n\nfunction text(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\nfunction serverOf(form: FormData): ServerCredentialInput {\n return {\n credentialKind: text(form, 'credentialKind') === 'clientCredentials' ? 'clientCredentials' : 'bearer',\n token: text(form, 'token'),\n clientId: text(form, 'clientId'),\n clientSecret: text(form, 'clientSecret'),\n issuer: text(form, 'issuer'),\n scope: text(form, 'scope-requested'),\n concurrencyLimit: Number(text(form, 'concurrencyLimit')),\n };\n}\n\n/**\n * The decision on a request: approving names the proxy ship and its owner,\n * and offers as scope rows only the scopes the approver holds, messages:send\n * and messages:receive locked on (0046, 0053); a server's credential too.\n * What was typed stays when the API refuses.\n */\nexport function DecisionForm({\n request,\n heldScopes,\n owners,\n working,\n failure,\n onDecide,\n}: {\n request: ShownRequest;\n heldScopes: readonly string[];\n owners: OwnerChoices;\n working: DecisionInput['kind'] | undefined;\n failure: string | undefined;\n onDecide: (decision: DecisionInput) => void;\n}) {\n const [credentialKind, setCredentialKind] = useState<ServerCredentialInput['credentialKind']>('bearer');\n const name = subjectName(request);\n const isServer = request.subject.kind === 'server';\n const approve = (event: SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n const form = new FormData(event.currentTarget);\n const scopes = form.getAll('scope').filter((scope) => typeof scope === 'string');\n onDecide({ kind: 'approve', name: text(form, 'name'), ownerShipId: text(form, 'ownerShipId'), scopes, server: isServer ? serverOf(form) : undefined });\n };\n return (\n <section className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <h2 className=\"text-heading font-semibold\">Approve {name}</h2>\n <form onSubmit={approve} className=\"grid gap-3\">\n <label className=\"grid gap-1\">\n <span>Proxy ship's name</span>\n <input name=\"name\" defaultValue={suggestedName(name)} required className={FIELD} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this party.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <fieldset className=\"grid gap-1\">\n <legend>Scopes</legend>\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {heldScopes\n .filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope))\n .map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked={false} />\n ))}\n </fieldset>\n {isServer ? (\n <fieldset className=\"grid gap-2\">\n <legend>The server's credential</legend>\n <label className=\"grid gap-1\">\n <span>Credential</span>\n <select name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(event.target.value === 'clientCredentials' ? 'clientCredentials' : 'bearer'); }} className={FIELD}>\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\n </select>\n </label>\n {credentialKind === 'bearer' ? (\n <label className=\"grid gap-1\">\n <span>Bearer token</span>\n <input type=\"password\" name=\"token\" className={FIELD} />\n </label>\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>Client id</span>\n <input name=\"clientId\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Client secret</span>\n <input type=\"password\" name=\"clientSecret\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Issuer</span>\n <input type=\"url\" name=\"issuer\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Scope</span>\n <input name=\"scope-requested\" className={FIELD} />\n </label>\n </>\n )}\n <label className=\"grid gap-1\">\n <span>Calls at once</span>\n <input type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={CONCURRENCY_LIMIT_DEFAULT} className={FIELD} />\n </label>\n </fieldset>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex gap-2\">\n <ActionButton type=\"submit\" variant=\"primary\" data-testid=\"overview-approve\" isPending={working === 'approve'} pendingLabel=\"Approving...\" disabled={working !== undefined}>\n Approve\n </ActionButton>\n <ActionButton type=\"button\" data-testid=\"overview-deny\" isPending={working === 'deny'} pendingLabel=\"Denying...\" disabled={working !== undefined} onClick={() => { onDecide({ kind: 'deny' }); }}>\n Deny\n </ActionButton>\n </div>\n </form>\n </section>\n );\n}\n","/**\n * How the Overview names and states a request for an outside party (design\n * B, Signal): pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\n\n/** A request as the API shows it. */\nexport type ShownRequest = inferRouterOutputs<GatewayRouter>['requests']['toDecide'][number];\n\n/** The tones a status shows, from the design tokens; a status always has its words too. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\nexport interface Status {\n readonly tone: Tone;\n readonly label: string;\n}\n\nconst DAY_MS = 86_400_000;\n\n/** How an outside party is named before it has a proxy ship: a client by its name, a server by its host. */\nexport function subjectName(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return request.subject.clientName;\n case 'server':\n return URL.canParse(request.subject.url) ? new URL(request.subject.url).host : request.subject.url;\n }\n}\n\nexport function subjectKind(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return 'MCP client';\n case 'server':\n return 'MCP server';\n }\n}\n\n/** Days left of the 7 a request is kept, counted up, so its last day reads as such, in the attention tone. */\nexport function daysLeft(request: ShownRequest, now: Date): Status {\n const days = Math.ceil((Date.parse(request.expiresAt) - now.getTime()) / DAY_MS);\n return days <= 1 ? { tone: 'attention', label: 'Last day' } : { tone: 'waiting', label: `${String(days)} d left` };\n}\n\n/** A request's state as the console shows a status; one still pending shows its days left. */\nexport function requestStatus(request: ShownRequest, now: Date): Status {\n switch (request.state) {\n case 'pending':\n return daysLeft(request, now);\n case 'approving':\n return { tone: 'active', label: 'Approving' };\n case 'approved':\n return { tone: 'ok', label: 'Approved' };\n case 'denied':\n return { tone: 'ended', label: 'Denied' };\n case 'expired':\n return { tone: 'ended', label: 'Expired' };\n }\n}\n\n/** A proxy ship's name offered from the party's own: lower case letters, digits and dashes. */\nexport function suggestedName(name: string): string {\n return name\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, '-')\n .replaceAll(/^-+|-+$/g, '');\n}\n\n/** The scopes every app ship gets (0046): shown locked on, and always sent. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** A scope's plain label, shown beside the scope itself. */\nexport function scopeLabel(scope: string): string {\n return SCOPE_LABELS[scope] ?? scope;\n}\n\n/** The server's credential as the decision form takes it. */\nexport interface ServerCredentialInput {\n readonly credentialKind: 'bearer' | 'clientCredentials';\n readonly token: string;\n readonly clientId: string;\n readonly clientSecret: string;\n readonly issuer: string;\n readonly scope: string;\n readonly concurrencyLimit: number;\n}\n\nexport type DecisionInput = { readonly kind: 'deny' } | { readonly kind: 'approve'; readonly name: string; readonly ownerShipId: string; readonly scopes: readonly string[]; readonly server: ServerCredentialInput | undefined };\n"],"names":["$$RSC_SERVER_ACTION_3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/overview/state/decision-panel.tsx","../../../../../web/features/overview/hooks/data%3Adc6b82%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/decision-form.tsx","../../../../../web/features/overview/services/requests.ts"],"sourcesContent":["'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useState, useTransition } from 'react';\n\nimport type { OwnerChoices } from '../../forms/ui/owner-field';\nimport { decideRequest } from '../hooks/overview-actions';\nimport type { DecisionInput, ShownRequest } from '../services/requests';\nimport { DecisionForm } from '../ui/decision-form';\n\n/** Decides one request as the signed-in approver, then goes back to the Overview, which says nothing more waits here. */\nexport function DecisionPanel({ fleetId, request, heldScopes, owners }: { fleetId: string; request: ShownRequest; heldScopes: readonly string[]; owners: OwnerChoices }) {\n const router = useRouter();\n const [working, setWorking] = useState<DecisionInput['kind'] | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const decide = (decision: DecisionInput) => {\n setWorking(decision.kind);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await decideRequest({ fleet: fleetId, requestId: request.requestId, input: decision });\n if (outcome.isOk) {\n router.push(`/overview?${new URLSearchParams({ fleet: fleetId, decided: decision.kind }).toString()}`);\n return;\n }\n setWorking(undefined);\n setFailure(outcome.message);\n });\n };\n return <DecisionForm request={request} heldScopes={heldScopes} owners={owners} working={working} failure={failure} onDecide={decide} />;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40fb5ea5dfa363fa3f1d6ec32115e8bfd1bd454758\":{\"name\":\"decideRequest\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"40fb5ea5dfa363fa3f1d6ec32115e8bfd1bd454758\",callServer,void 0,findSourceMapURL,\"decideRequest\");export{$$RSC_SERVER_ACTION_3 as decideRequest};","'use client';\n\nimport { useState, type SyntheticEvent } from 'react';\n\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { EVERY_APP_SHIP_SCOPES, scopeLabel, subjectName, suggestedName, type DecisionInput, type ServerCredentialInput, type ShownRequest } from '../services/requests';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nconst CONCURRENCY_LIMIT_DEFAULT = 4;\n\nconst FIELD = 'rounded-md border border-input bg-background px-2 py-1.5';\n\nfunction ScopeRow({ scope, isLocked }: { scope: string; isLocked: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n {isLocked ? <input type=\"checkbox\" checked disabled aria-label={scopeLabel(scope)} /> : <input type=\"checkbox\" name=\"scope\" value={scope} aria-label={scopeLabel(scope)} />}\n <span>{scopeLabel(scope)}</span>\n <span className=\"font-mono text-caption text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-caption text-muted-foreground\">(always)</span> : null}\n </label>\n );\n}\n\nfunction text(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\nfunction serverOf(form: FormData): ServerCredentialInput {\n return {\n credentialKind: text(form, 'credentialKind') === 'clientCredentials' ? 'clientCredentials' : 'bearer',\n token: text(form, 'token'),\n clientId: text(form, 'clientId'),\n clientSecret: text(form, 'clientSecret'),\n issuer: text(form, 'issuer'),\n scope: text(form, 'scope-requested'),\n concurrencyLimit: Number(text(form, 'concurrencyLimit')),\n };\n}\n\n/**\n * The decision on a request: approving names the proxy ship and its owner,\n * and offers as scope rows only the scopes the approver holds, messages:send\n * and messages:receive locked on (0046, 0053); a server's credential too.\n * What was typed stays when the API refuses.\n */\nexport function DecisionForm({\n request,\n heldScopes,\n owners,\n working,\n failure,\n onDecide,\n}: {\n request: ShownRequest;\n heldScopes: readonly string[];\n owners: OwnerChoices;\n working: DecisionInput['kind'] | undefined;\n failure: string | undefined;\n onDecide: (decision: DecisionInput) => void;\n}) {\n const [credentialKind, setCredentialKind] = useState<ServerCredentialInput['credentialKind']>('bearer');\n const name = subjectName(request);\n const isServer = request.subject.kind === 'server';\n const approve = (event: SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n const form = new FormData(event.currentTarget);\n const scopes = form.getAll('scope').filter((scope) => typeof scope === 'string');\n onDecide({ kind: 'approve', name: text(form, 'name'), ownerShipId: text(form, 'ownerShipId'), scopes, server: isServer ? serverOf(form) : undefined });\n };\n return (\n <section className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <h2 className=\"text-heading font-semibold\">Approve {name}</h2>\n <form onSubmit={approve} className=\"grid gap-3\">\n <label className=\"grid gap-1\">\n <span>Proxy ship's name</span>\n <input name=\"name\" defaultValue={suggestedName(name)} required className={FIELD} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this party.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <fieldset className=\"grid gap-1\">\n <legend>Scopes</legend>\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {heldScopes\n .filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope))\n .map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked={false} />\n ))}\n </fieldset>\n {isServer ? (\n <fieldset className=\"grid gap-2\">\n <legend>The server's credential</legend>\n <label className=\"grid gap-1\">\n <span>Credential</span>\n <select name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(event.target.value === 'clientCredentials' ? 'clientCredentials' : 'bearer'); }} className={FIELD}>\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\n </select>\n </label>\n {credentialKind === 'bearer' ? (\n <label className=\"grid gap-1\">\n <span>Bearer token</span>\n <input type=\"password\" name=\"token\" className={FIELD} />\n </label>\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>Client id</span>\n <input name=\"clientId\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Client secret</span>\n <input type=\"password\" name=\"clientSecret\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Issuer</span>\n <input type=\"url\" name=\"issuer\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Scope</span>\n <input name=\"scope-requested\" className={FIELD} />\n </label>\n </>\n )}\n <label className=\"grid gap-1\">\n <span>Calls at once</span>\n <input type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={CONCURRENCY_LIMIT_DEFAULT} className={FIELD} />\n </label>\n </fieldset>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex gap-2\">\n <ActionButton type=\"submit\" variant=\"primary\" data-testid=\"overview-approve\" isPending={working === 'approve'} pendingLabel=\"Approving...\" disabled={working !== undefined}>\n Approve\n </ActionButton>\n <ActionButton type=\"button\" data-testid=\"overview-deny\" isPending={working === 'deny'} pendingLabel=\"Denying...\" disabled={working !== undefined} onClick={() => { onDecide({ kind: 'deny' }); }}>\n Deny\n </ActionButton>\n </div>\n </form>\n </section>\n );\n}\n","/**\n * How the Overview names and states a request for an outside party (design\n * B, Signal): pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\n\n/** A request as the API shows it. */\nexport type ShownRequest = inferRouterOutputs<GatewayRouter>['requests']['toDecide'][number];\n\n/** The tones a status shows, from the design tokens; a status always has its words too. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\nexport interface Status {\n readonly tone: Tone;\n readonly label: string;\n}\n\nconst DAY_MS = 86_400_000;\n\n/** How an outside party is named before it has a proxy ship: a client by its name, a server by its host. */\nexport function subjectName(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return request.subject.clientName;\n case 'server':\n return URL.canParse(request.subject.url) ? new URL(request.subject.url).host : request.subject.url;\n }\n}\n\nexport function subjectKind(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return 'MCP client';\n case 'server':\n return 'MCP server';\n }\n}\n\n/** Days left of the 7 a request is kept, counted up, so its last day reads as such, in the attention tone. */\nexport function daysLeft(request: ShownRequest, now: Date): Status {\n const days = Math.ceil((Date.parse(request.expiresAt) - now.getTime()) / DAY_MS);\n return days <= 1 ? { tone: 'attention', label: 'Last day' } : { tone: 'waiting', label: `${String(days)} d left` };\n}\n\n/** A request's state as the console shows a status; one still pending shows its days left. */\nexport function requestStatus(request: ShownRequest, now: Date): Status {\n switch (request.state) {\n case 'pending':\n return daysLeft(request, now);\n case 'approving':\n return { tone: 'active', label: 'Approving' };\n case 'approved':\n return { tone: 'ok', label: 'Approved' };\n case 'denied':\n return { tone: 'ended', label: 'Denied' };\n case 'expired':\n return { tone: 'ended', label: 'Expired' };\n }\n}\n\n/** A proxy ship's name offered from the party's own: lower case letters, digits and dashes. */\nexport function suggestedName(name: string): string {\n return name\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, '-')\n .replaceAll(/^-+|-+$/g, '');\n}\n\n/** The scopes every app ship gets (0046): shown locked on, and always sent. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** A scope's plain label, shown beside the scope itself. */\nexport function scopeLabel(scope: string): string {\n return SCOPE_LABELS[scope] ?? scope;\n}\n\n/** The server's credential as the decision form takes it. */\nexport interface ServerCredentialInput {\n readonly credentialKind: 'bearer' | 'clientCredentials';\n readonly token: string;\n readonly clientId: string;\n readonly clientSecret: string;\n readonly issuer: string;\n readonly scope: string;\n readonly concurrencyLimit: number;\n}\n\nexport type DecisionInput = { readonly kind: 'deny' } | { readonly kind: 'approve'; readonly name: string; readonly ownerShipId: string; readonly scopes: readonly string[]; readonly server: ServerCredentialInput | undefined };\n"],"names":["$$RSC_SERVER_ACTION_3"],"mappings":"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"}
|
package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[72839,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("
|
|
1
|
+
module.exports=[72839,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("403e0b04e60dfe1d24c4ecc52b215e8e12e99da16b",d.callServer,void 0,d.findSourceMapURL,"answerDelivery"),f=(0,d.createServerReference)("60cd31f366bb1d6ef873aca1dd9dd6a97a6fc52519",d.callServer,void 0,d.findSourceMapURL,"doneDelivery"),g=(0,d.createServerReference)("60c5f3659aad6966b26d46ff4ed48172052fc42a6a",d.callServer,void 0,d.findSourceMapURL,"openDelivery");var h=a.i(1542),i=a.i(24229);function j({delivery:a,note:c,working:d,failure:e,onNoteChange:f,onAnswer:g,onDone:k,onBack:l}){let{question:m}=a,n=void 0!==d,o=m?.options.find(a=>a.key===m.pick.option);return(0,b.jsxs)("section",{"data-testid":"overview-delivery",className:"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm",children:[(0,b.jsxs)("span",{className:"text-caption text-muted-foreground",children:[a.from," · ",new Date(a.sentAt).toUTCString()]}),(0,b.jsx)("h2",{className:"text-heading font-semibold",children:m?.title??a.title}),void 0===m?void 0===a.payload?(0,b.jsx)("p",{className:"text-muted-foreground",children:"You opened this before; its content was shown to you then."}):(0,b.jsx)("pre",{className:"whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-caption",children:a.payload}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:"whitespace-pre-wrap",children:m.context}),(0,b.jsx)("div",{className:"flex flex-wrap gap-2",children:m.options.map(a=>(0,b.jsx)(h.f,{title:a.detail,variant:a.key===m.pick.option?"primary":"secondary",className:a.key===m.pick.option?"outline-2 outline-offset-2 outline-dashed outline-ring":"",isPending:d?.kind==="option"&&d.option===a.key,pendingLabel:"Sending...",disabled:n,onClick:()=>{g(a.key)},children:a.label},a.key))}),void 0===o?null:(0,b.jsxs)("p",{className:"text-muted-foreground",children:[o.label," is the pick of ",a.from,": ",m.pick.why]})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:void 0===m?"Your answer":"Note"}),(0,b.jsx)("textarea",{"data-testid":"overview-note",rows:2,value:c,onChange:a=>{f(a.target.value)},placeholder:void 0===m?"":"Optional, sent with your answer",className:"rounded-md border border-input bg-background p-2"})]}),void 0===e?null:(0,b.jsx)(i.f,{message:e,isFailure:!0}),(0,b.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,b.jsx)(h.f,{"data-testid":"overview-answer",variant:void 0===m?"primary":"secondary",isPending:d?.kind==="note",pendingLabel:"Sending...",disabled:n,onClick:()=>{g(void 0)},children:void 0===m?"Answer":"Send the note alone"}),void 0===m?(0,b.jsx)(h.f,{"data-testid":"overview-done",isPending:d?.kind==="done",pendingLabel:"Marking done...",disabled:n,onClick:k,children:"Done"}):null,(0,b.jsx)("button",{type:"button",onClick:l,disabled:n,className:"inline-flex h-9 items-center rounded-md px-4 text-muted-foreground hover:bg-accent disabled:opacity-70",children:"Back to the inbox"})]})]})}function k({entry:a}){return(0,b.jsxs)("span",{className:"flex min-w-0 flex-1 flex-col text-left",children:[(0,b.jsx)("span",{className:"truncate",children:a.title}),(0,b.jsxs)("span",{className:"text-caption text-muted-foreground",children:["from ",a.from]})]})}function l({waitingCount:a,waiting:c,opened:d,openingId:e,failure:f,onOpen:g,onFocus:j}){return(0,b.jsxs)("div",{className:"grid gap-6",children:[0===c.length?null:(0,b.jsxs)("section",{className:"grid gap-2",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:["Next · ",a]}),c.map(a=>(0,b.jsxs)("div",{className:"grid gap-2 rounded-md border border-border bg-card p-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsx)(k,{entry:a}),(0,b.jsx)(h.f,{"data-testid":"overview-open",isPending:e===a.deliveryId,pendingLabel:"Opening...",disabled:void 0!==e,onClick:()=>{g(a)},children:"Open"})]}),f?.deliveryId===a.deliveryId?(0,b.jsx)(i.f,{message:f.message,isFailure:!0}):null]},a.deliveryId))]}),0===d.length?null:(0,b.jsxs)("section",{className:"grid gap-2",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:["Opened, not yet dealt with · ",d.length]}),d.map(a=>(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-md border border-border bg-card p-3",children:[(0,b.jsx)(k,{entry:a}),(0,b.jsx)("button",{type:"button","data-testid":"overview-deal",onClick:()=>{j(a)},className:"inline-flex h-9 items-center rounded-md border border-border px-4 hover:bg-accent",children:"Answer or be done"})]},a.deliveryId))]})]})}a.s(["InboxPanel",0,function({fleetId:a,inbox:d}){let[h,k]=(0,c.useState)(),[m,n]=(0,c.useState)(""),[o,p]=(0,c.useState)(),[q,r]=(0,c.useState)(),[s,t]=(0,c.useState)(),[u,v]=(0,c.useState)(),[w,x]=(0,c.useState)(),[,y]=(0,c.useTransition)(),z=a=>{k(a),n(""),v(void 0),x(void 0)},A=({control:a,action:b,said:c})=>{r(a),v(void 0),y(async()=>{let a=await b();r(void 0),a.isOk?(k(void 0),x(c)):v(a.message)})};return void 0!==h?(0,b.jsx)(j,{delivery:h,note:m,working:q,failure:u,onNoteChange:n,onAnswer:b=>{A({control:void 0===b?{kind:"note"}:{kind:"option",option:b},action:()=>e({fleet:a,deliveryId:h.deliveryId,input:{questionId:h.question?.id,option:b,note:m}}),said:`Your answer went to ${h.from}.`})},onDone:()=>{A({control:{kind:"done"},action:()=>f(a,h.deliveryId),said:`Done with “${h.title}”.`})},onBack:()=>{k(void 0)}}):(0,b.jsxs)("div",{className:"grid gap-4",children:[void 0===w?null:(0,b.jsx)(i.f,{message:w,isFailure:!1}),(0,b.jsx)(l,{waitingCount:d.waiting,waiting:d.deliveries,opened:d.opened,openingId:o,failure:s,onOpen:b=>{p(b.deliveryId),t(void 0),x(void 0),y(async()=>{let c=await g(a,b.deliveryId);p(void 0),c.isOk?z(c.value):t({deliveryId:b.deliveryId,message:c.message})})},onFocus:a=>{z({...a,payload:void 0,question:void 0})}})]})}],72839)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map
|