@aeolus-fleet/gateway 0.36.0 → 0.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/person-waiters.js +3 -1
  2. package/dist/person-waiters.js.map +1 -1
  3. package/package.json +1 -1
  4. package/web/.next/BUILD_ID +1 -1
  5. package/web/.next/build-manifest.json +3 -3
  6. package/web/.next/diagnostics/route-bundle-stats.json +40 -40
  7. package/web/.next/fallback-build-manifest.json +3 -3
  8. package/web/.next/prerender-manifest.json +3 -3
  9. package/web/.next/server/app/(console)/bridge/basket/page/server-reference-manifest.json +7 -7
  10. package/web/.next/server/app/(console)/bridge/basket/page.js.nft.json +1 -1
  11. package/web/.next/server/app/(console)/bridge/basket/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(console)/bridge/done/page/server-reference-manifest.json +7 -7
  13. package/web/.next/server/app/(console)/bridge/done/page.js.nft.json +1 -1
  14. package/web/.next/server/app/(console)/bridge/done/page_client-reference-manifest.js +1 -1
  15. package/web/.next/server/app/(console)/bridge/page/server-reference-manifest.json +6 -6
  16. package/web/.next/server/app/(console)/bridge/page.js.nft.json +1 -1
  17. package/web/.next/server/app/(console)/bridge/page_client-reference-manifest.js +1 -1
  18. package/web/.next/server/app/(console)/bridge/settings/page/server-reference-manifest.json +1 -1
  19. package/web/.next/server/app/(console)/bridge/settings/page.js.nft.json +1 -1
  20. package/web/.next/server/app/(console)/bridge/settings/page_client-reference-manifest.js +1 -1
  21. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +2 -2
  22. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(console)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(console)/bridge/settings/routing/page/server-reference-manifest.json +5 -5
  25. package/web/.next/server/app/(console)/bridge/settings/routing/page.js.nft.json +1 -1
  26. package/web/.next/server/app/(console)/bridge/settings/routing/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  28. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  31. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +17 -17
  34. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +8 -8
  37. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +17 -17
  40. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +10 -10
  43. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  46. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  49. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  52. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
  55. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  56. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  57. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  58. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +11 -11
  61. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
  62. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +11 -11
  64. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
  65. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +11 -11
  67. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +11 -11
  70. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/_global-error.html +1 -1
  73. package/web/.next/server/app/_global-error.rsc +1 -1
  74. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  75. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  76. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  77. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  78. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  79. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  81. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  82. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  84. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  85. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  86. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  87. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  88. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js +1 -1
  90. package/web/.next/server/chunks/ssr/01fr_app_(console)_bridge_settings_requests_[requestId]_page_actions_1au-p5lgnv5e-.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js +1 -1
  92. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_bridge_settings_routing_page_actions_136lm_jip4d_x.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  94. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  96. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  98. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  100. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  101. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  102. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__18v7b5ga58a9n._.js +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  120. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/_0a_nsm-ye2r6v._.js +1 -1
  122. package/web/.next/server/chunks/ssr/_0a_nsm-ye2r6v._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  124. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  126. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  128. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/_10-gn6g9yc63s._.js +3 -0
  130. package/web/.next/server/chunks/ssr/{_0swrejvekuzfx._.js.map → _10-gn6g9yc63s._.js.map} +1 -1
  131. package/web/.next/server/chunks/ssr/_177fdczus39s7._.js +3 -0
  132. package/web/.next/server/chunks/ssr/{_1qdpkpsskm5wj._.js.map → _177fdczus39s7._.js.map} +1 -1
  133. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  134. package/web/.next/server/chunks/ssr/_1e2o809f0ekry._.js +1 -1
  135. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  136. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  137. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  138. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  139. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  140. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js +1 -1
  142. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_basket_page_actions_102xk3g8eko_q.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js +1 -1
  144. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_done_page_actions_0mm90xd2feta2.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js +1 -1
  146. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_bridge_page_actions_082880qz6xa5k.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/web_features_16cy3vmcijydk._.js +3 -0
  148. package/web/.next/server/chunks/ssr/{web_features_1je122n6carea._.js.map → web_features_16cy3vmcijydk._.js.map} +1 -1
  149. package/web/.next/server/chunks/ssr/web_features_1iiqi6dhrst33._.js +3 -0
  150. package/web/.next/server/chunks/ssr/{web_features_1nrnskep6p8ci._.js.map → web_features_1iiqi6dhrst33._.js.map} +1 -1
  151. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  152. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  154. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  156. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +1 -1
  158. package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js +1 -1
  159. package/web/.next/server/chunks/ssr/web_features_bridge_state_0354e3wb0dzx1._.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +1 -1
  161. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +1 -1
  163. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -1
  164. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +1 -1
  165. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -1
  166. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  167. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  168. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  169. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  170. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  171. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  173. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  174. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
  175. package/web/.next/server/middleware-build-manifest.js +3 -3
  176. package/web/.next/server/pages/500.html +1 -1
  177. package/web/.next/server/preview-props.json +3 -3
  178. package/web/.next/server/server-reference-manifest.js +1 -1
  179. package/web/.next/server/server-reference-manifest.json +50 -50
  180. package/web/.next/static/chunks/0az9upwm-8_q9.js +1 -0
  181. package/web/.next/static/chunks/0gbozvd_yh421.js +1 -0
  182. package/web/.next/static/chunks/{1lyv8ukt_q3ph.js → 0l9_oie6xi0kd.js} +1 -1
  183. package/web/.next/static/chunks/{3rt603msircrl.js → 0m512dxdcrv-b.js} +1 -1
  184. package/web/.next/static/chunks/{2799kv0y5g2va.js → 1485slb5zus5p.js} +1 -1
  185. package/web/.next/static/chunks/{36fnm0ezsx1eh.js → 24olc0btcvn7q.js} +1 -1
  186. package/web/.next/static/chunks/{1ymfhxs-xqiy6.js → 296w-74ry5lzk.js} +1 -1
  187. package/web/.next/static/chunks/{40j58bya72xh1.js → 2z2auwx1s2mgl.js} +1 -1
  188. package/web/.next/static/chunks/{0fu7je2vzzzh7.js → 397zvdr6xr5pq.js} +1 -1
  189. package/web/.next/static/chunks/{3hvw5n04pbwg8.js → 3db90zxmny2y-.js} +1 -1
  190. package/web/.next/static/chunks/{322fzslly9wpf.js → 3x0p-z3zdrk_b.js} +1 -1
  191. package/web/.next/static/chunks/{1ehmzxr697ifa.js → 3yq9jt4p_0uid.js} +1 -1
  192. package/web/.next/trace +1 -1
  193. package/web/.next/trace-build +1 -1
  194. package/web/.next/server/chunks/ssr/_0swrejvekuzfx._.js +0 -3
  195. package/web/.next/server/chunks/ssr/_1qdpkpsskm5wj._.js +0 -3
  196. package/web/.next/server/chunks/ssr/web_features_1je122n6carea._.js +0 -3
  197. package/web/.next/server/chunks/ssr/web_features_1nrnskep6p8ci._.js +0 -3
  198. package/web/.next/static/chunks/2jr8r6g9kk42a.js +0 -1
  199. package/web/.next/static/chunks/3f2trjz7_wrzh.js +0 -1
  200. /package/web/.next/static/{IMWKx2sJwt7EwwpStr8tb → CMppMkysNciqc8k4TWwia}/_buildManifest.js +0 -0
  201. /package/web/.next/static/{IMWKx2sJwt7EwwpStr8tb → CMppMkysNciqc8k4TWwia}/_clientMiddlewareManifest.js +0 -0
  202. /package/web/.next/static/{IMWKx2sJwt7EwwpStr8tb → CMppMkysNciqc8k4TWwia}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/bridge/hooks/data%3A295c5e%20%3Ctext/javascript%3E","../../../../../web/features/bridge/state/item-focus.tsx","../../../../../web/features/bridge/ui/delivery-card.tsx","../../../../../web/features/bridge/state/record-unreadable.tsx","../../../../../web/features/meeting/paths.ts","../../../../../web/features/bridge/hooks/data%3Ae3e416%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A65d48d%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A78203e%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3Aeb01f1%20%3Ctext/javascript%3E"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"60573c940559fe36ec3489b04906d9407ddf5822ef\":{\"name\":\"removeFromBasket\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"60573c940559fe36ec3489b04906d9407ddf5822ef\",callServer,void 0,findSourceMapURL,\"removeFromBasket\");export{$$RSC_SERVER_ACTION_4 as removeFromBasket};","'use client';\n\nimport { useState, useTransition, type ReactNode } from 'react';\n\nimport { meetingPathOf } from '../../meeting/paths';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { answerDelivery, doneDelivery, openDelivery, putInBasket, removeFromBasket, type ActionOutcome } from '../hooks/bridge-actions';\nimport { BRIDGE_BASKET_PATH } from '../paths';\nimport type { FocusedDelivery } from '../services/deliveries';\nimport type { HomeItem } from '../services/items';\nimport { DeliveryCard, type DeliveryControl, type InBasket } from '../ui/delivery-card';\nimport { Notice } from '../ui/notice';\n\n/** An item to open: by its delivery, with its job, and the answer to it in the basket, if any. */\nexport interface ToOpen {\n readonly deliveryId: string;\n readonly job: HomeItem['job'];\n readonly inBasket?: InBasket | null;\n}\n\n/** What a list of items gets to open one: the press, the one opening, and why one could not be opened. */\nexport interface ItemOpening {\n readonly open: (item: ToOpen) => void;\n readonly openingId: string | undefined;\n readonly failure: { deliveryId: string; message: string } | undefined;\n}\n\n/**\n * A list of Bridge's items with one in focus at a time. Opening is the\n * person's own act, so it is a press, never a link: the gateway acknowledges\n * the item for them, and it is shown whole. An alert or a notice seen is\n * done at once (CC16), so it shows with no answer to give, as does a\n * question its asker withdrew or replaced; a replaced one opens its\n * replacement. A step ends done or cannot with the note, sent at once,\n * never through the basket (CC23). A question's answer goes in the basket (CC24), and comes\n * out of it there. Answering, being done or putting in the basket says so\n * in place, and the page reads itself again.\n */\nexport function ItemFocus({ fleetId, children }: { fleetId: string; children: (opening: ItemOpening) => ReactNode }) {\n const [focus, setFocus] = useState<{ delivery: FocusedDelivery; isDoneOnSeeing: boolean; inBasket: InBasket | null } | undefined>();\n const [note, setNote] = useState('');\n const [openingId, setOpeningId] = useState<string | undefined>();\n const [working, setWorking] = useState<DeliveryControl | undefined>();\n const [openFailure, setOpenFailure] = useState<{ deliveryId: string; message: string } | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [done, setDone] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n const open = (item: ToOpen) => {\n setOpeningId(item.deliveryId);\n setOpenFailure(undefined);\n setDone(undefined);\n startTransition(async () => {\n const outcome = await openDelivery(fleetId, item.deliveryId);\n setOpeningId(undefined);\n if (outcome.isOk) {\n const inBasket = item.inBasket ?? null;\n setFocus({ delivery: outcome.value, isDoneOnSeeing: item.job === 'stay-aware', inBasket });\n setNote(inBasket?.note ?? '');\n setFailure(undefined);\n } else {\n setOpenFailure({ deliveryId: item.deliveryId, message: outcome.message });\n }\n });\n };\n\n const settle = ({ control, action, said }: { control: DeliveryControl; action: () => Promise<ActionOutcome<undefined>>; said: string }) => {\n setWorking(control);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await action();\n setWorking(undefined);\n if (outcome.isOk) {\n setFocus(undefined);\n setDone(said);\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n if (focus !== undefined) {\n const { delivery, inBasket } = focus;\n const questionId = delivery.question?.id;\n return (\n <DeliveryCard\n key={delivery.deliveryId}\n delivery={delivery}\n isDoneOnSeeing={focus.isDoneOnSeeing}\n meetingHref={delivery.meetingId === undefined ? undefined : meetingPathOf({ fleetId, meetingId: delivery.meetingId })}\n basketHref={inFleet(BRIDGE_BASKET_PATH, fleetId)}\n inBasket={inBasket}\n note={note}\n working={working}\n failure={failure}\n onNoteChange={setNote}\n onAnswer={(option) => { settle({ control: option === undefined ? { kind: 'note' } : { kind: 'option', option }, action: () => answerDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId, input: { questionId: delivery.question?.id, option, note } }), said: `Your answer went to ${delivery.from}.` }); }\n }\n onPut={(option) => { settle({ control: { kind: 'option', option }, action: () => putInBasket({ fleet: fleetId, deliveryId: delivery.deliveryId, option, note }), said: `Option ${String(option)} is in the basket, not sent: ${delivery.from} receives it when you send the basket.` }); }}\n onRemove={() => {\n if (questionId !== undefined) {\n settle({ control: { kind: 'remove' }, action: () => removeFromBasket(fleetId, questionId), said: `Your answer to “${delivery.title}” is out of the basket; the question still waits on you.` });\n }\n }}\n onDone={() => { settle({ control: { kind: 'done' }, action: () => doneDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId }), said: `Done with “${delivery.title}”.` }); }}\n onFinishStep={(outcome) => {\n settle({\n control: { kind: outcome },\n action: () => doneDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId, step: { outcome, note } }),\n said: outcome === 'done' ? `Done: ${delivery.from} is told “${delivery.title}” is done.` : `Cannot: ${delivery.from} is told you cannot do “${delivery.title}”.`,\n });\n }}\n onOpen={(deliveryId) => { open({ deliveryId, job: 'decide' }); }}\n onBack={() => { setFocus(undefined); }}\n />\n );\n }\n return (\n <div className=\"grid gap-4\">\n {done === undefined ? null : <Notice message={done} isFailure={false} />}\n {children({ open, openingId, failure: openFailure })}\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport type { Question } from '@aeolus-fleet/common';\n\nimport type { FocusedDelivery, Stale, StepView } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\n/** Which of the card's controls is working: an option of the question put in the basket, its entry removed, the note alone, done, or a step's cannot. */\nexport type DeliveryControl = { kind: 'option'; option: number } | { kind: 'remove' } | { kind: 'note' } | { kind: 'done' } | { kind: 'cannot' };\n\n/** How the person ends a step: they did it, or cannot. */\nexport type StepOutcome = 'done' | 'cannot';\n\n/** The answer to a question in the basket (Bridge, section 9): its option and its note, none when the person wrote none. */\nexport interface InBasket {\n readonly option: number;\n readonly note: string | null;\n}\n\n/** What a question in the basket says: in it, not sent, with its note; picking another option changes it. */\nfunction InBasketNotice({ inBasket, basketHref, isRemoving, isWorking, onRemove }: { inBasket: InBasket; basketHref: string; isRemoving: boolean; isWorking: boolean; onRemove: () => void }) {\n return (\n <div data-testid=\"bridge-in-basket\" className=\"grid gap-2 rounded-md border border-border bg-muted p-3\">\n <span className=\"font-medium\">In the basket: option {inBasket.option}, not sent</span>\n {inBasket.note === null ? null : <span className=\"text-caption\">“{inBasket.note}”</span>}\n <span className=\"text-caption text-muted-foreground\">Pick another option to change it.</span>\n <div className=\"flex flex-wrap gap-2\">\n <a data-testid=\"bridge-basket-open\" href={basketHref} className=\"inline-flex h-9 items-center rounded-md border border-border px-4 hover:bg-accent\">\n Open the basket\n </a>\n <ActionButton data-testid=\"bridge-basket-remove\" isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={onRemove}>\n Remove\n </ActionButton>\n </div>\n </div>\n );\n}\n\n/** The options of a question, one to choose, the asker's pick marked; none to choose once it is stale. */\nfunction QuestionOptions({ question, chosen, isStale, onChoose }: { question: Question; chosen: number | undefined; isStale: boolean; onChoose: (option: number) => void }) {\n return (\n <fieldset className={`grid gap-2 ${isStale ? 'opacity-60' : ''}`} disabled={isStale}>\n <legend className=\"sr-only\">Options</legend>\n {question.options.map((option) => (\n <label key={option.key} className={`flex items-start gap-3 rounded-md border p-3 ${option.key === chosen && !isStale ? 'border-ring bg-accent' : 'border-border'}`}>\n <input type=\"radio\" name=\"option\" value={option.key} checked={option.key === chosen && !isStale} onChange={() => { onChoose(option.key); }} className=\"mt-1\" />\n <span className=\"grid flex-1 gap-0.5\">\n <span className=\"font-medium\">\n {option.key}. {option.label}\n </span>\n {option.detail === '' ? null : <span className=\"text-caption text-muted-foreground\">{option.detail}</span>}\n </span>\n {option.key === question.pick.option ? <span className=\"rounded-sm border border-border px-1.5 text-caption\">Their pick</span> : null}\n </label>\n ))}\n </fieldset>\n );\n}\n\n/** What a stale question says: withdrawn, done; or replaced, with the replacement to open. */\nfunction StaleNotice({ stale, from, onOpen }: { stale: Stale; from: string; onOpen: (deliveryId: string) => void }) {\n const { replacementId } = stale;\n return (\n <div data-testid=\"bridge-stale\" className=\"grid gap-2 rounded-md border border-border bg-muted p-3\">\n <span>{stale.kind === 'withdrawn' ? `Withdrawn by ${from}. Nothing to answer: it is done.` : `Replaced by ${from}. Answer the new question.`}</span>\n {replacementId === null ? null : (\n <ActionButton data-testid=\"bridge-replacement\" className=\"justify-self-start\" isPending={false} pendingLabel=\"Opening...\" onClick={() => { onOpen(replacementId); }}>\n Open the new question\n </ActionButton>\n )}\n </div>\n );\n}\n\n/** What a step asks: why, and the link where it is done, shown with its host and opened only by the person's own press (Bridge, section 9). */\nfunction StepAsked({ step }: { step: StepView }) {\n return (\n <>\n <p className=\"whitespace-pre-wrap\">{step.why}</p>\n {step.link === undefined ? null : (\n <a data-testid=\"bridge-step-link\" href={step.link.href} target=\"_blank\" rel=\"noopener noreferrer\" className=\"inline-flex h-9 items-center justify-self-start rounded-md border border-border px-4 hover:bg-accent\">\n Open on {step.link.host}\n </a>\n )}\n </>\n );\n}\n\n/** A step's note field, shown before Done or Cannot is pressed, and the two: the outcome goes to the asker at once, with the note (CC14, CC23). */\nfunction StepControls({ from, note, working, failure, onNoteChange, onFinish }: { from: string; note: string; working: DeliveryControl | undefined; failure: string | undefined; onNoteChange: (note: string) => void; onFinish: (outcome: StepOutcome) => void }) {\n const isWorking = working !== undefined;\n return (\n <>\n <label className=\"grid gap-1\">\n <span>Note</span>\n <textarea\n data-testid=\"bridge-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder=\"Optional, goes with Done or Cannot\"\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"grid gap-1\">\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"bridge-step-done\" variant=\"primary\" isPending={working?.kind === 'done'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onFinish('done'); }}>\n Done\n </ActionButton>\n <ActionButton data-testid=\"bridge-step-cannot\" isPending={working?.kind === 'cannot'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onFinish('cannot'); }}>\n Cannot\n </ActionButton>\n </div>\n <span className=\"text-caption text-muted-foreground\">{from} is told at once, with your note.</span>\n </div>\n </>\n );\n}\n\n/**\n * One item in focus (design B, Signal). A question opens with the asker's\n * pick chosen (CC11), or the option in the basket; its one button puts that\n * option in the basket with the note, if any, and sends nothing (CC24): the\n * person sends the basket. A step (CC14) shows why and its link, then its\n * note field before Done and Cannot, each sending its outcome at once with\n * the note. Any other item may get a note as its answer, and may\n * be done with; one of a meeting leads to the meeting. An alert or a notice\n * is done once seen (Bridge, CC16): it asks nothing more. So is a question\n * its asker withdrew or replaced: stale, nothing to send, a replaced one\n * leading to its replacement.\n */\nexport function DeliveryCard({\n delivery,\n isDoneOnSeeing,\n meetingHref,\n basketHref,\n inBasket,\n note,\n working,\n failure,\n onNoteChange,\n onAnswer,\n onPut,\n onRemove,\n onDone,\n onFinishStep,\n onOpen,\n onBack,\n}: {\n delivery: FocusedDelivery;\n /** Whether seeing it was all it asked, so it is done: an alert or a notice. */\n isDoneOnSeeing: boolean;\n /** The page of the meeting it belongs to, if it belongs to one. */\n meetingHref: string | undefined;\n /** Bridge's basket. */\n basketHref: string;\n /** The answer to the question in the basket, if any. */\n inBasket: InBasket | null;\n note: string;\n working: DeliveryControl | undefined;\n failure: string | undefined;\n onNoteChange: (note: string) => void;\n /** Answers any item but a question with the note. */\n onAnswer: (option: number | undefined) => void;\n /** Puts the option chosen of a question in the basket, with the note. */\n onPut: (option: number) => void;\n /** Takes the question's answer out of the basket. */\n onRemove: () => void;\n onDone: () => void;\n /** Ends a step done or cannot, with the note. */\n onFinishStep: (outcome: StepOutcome) => void;\n /** Opens another item: a replaced question's replacement. */\n onOpen: (deliveryId: string) => void;\n onBack: () => void;\n}) {\n const { question, step, stale } = delivery;\n const [chosen, setChosen] = useState(inBasket?.option ?? question?.pick.option);\n const isWorking = working !== undefined;\n return (\n <section data-testid=\"bridge-delivery\" className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <span className=\"text-caption text-muted-foreground\">\n {delivery.from} · {new Date(delivery.sentAt).toUTCString()}\n </span>\n <h2 className=\"text-heading font-semibold\">{question?.title ?? delivery.title}</h2>\n {meetingHref === undefined ? null : (\n <a data-testid=\"bridge-meeting\" href={meetingHref} className=\"inline-flex h-9 items-center justify-self-start rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\">\n Go to the meeting\n </a>\n )}\n {step !== undefined ? (\n <StepAsked step={step} />\n ) : question === undefined ? (\n <pre className=\"whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-caption\">{delivery.body}</pre>\n ) : (\n <>\n <p className=\"whitespace-pre-wrap\">{question.context}</p>\n <QuestionOptions question={question} chosen={chosen} isStale={stale !== null} onChoose={setChosen} />\n <p className=\"text-caption text-muted-foreground\">\n {delivery.from} picks {question.pick.option}: {question.pick.why}\n </p>\n </>\n )}\n {stale === null ? null : <StaleNotice stale={stale} from={delivery.from} onOpen={onOpen} />}\n {inBasket === null || stale !== null ? null : <InBasketNotice inBasket={inBasket} basketHref={basketHref} isRemoving={working?.kind === 'remove'} isWorking={isWorking} onRemove={onRemove} />}\n {isDoneOnSeeing ? (\n <p data-testid=\"bridge-seen-done\" className=\"text-muted-foreground\">\n Seen now, so done: it asks nothing more.\n </p>\n ) : stale !== null ? null : step !== undefined ? (\n <StepControls from={delivery.from} note={note} working={working} failure={failure} onNoteChange={onNoteChange} onFinish={onFinishStep} />\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>{question === undefined ? 'Your answer' : 'Note'}</span>\n <textarea\n data-testid=\"bridge-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder={question === undefined ? '' : 'Optional, goes with the answer'}\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {question === undefined ? (\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"bridge-answer\" variant=\"primary\" isPending={working?.kind === 'note'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onAnswer(undefined); }}>\n Answer\n </ActionButton>\n <ActionButton data-testid=\"bridge-done\" isPending={working?.kind === 'done'} pendingLabel=\"Marking done...\" disabled={isWorking} onClick={onDone}>\n Done\n </ActionButton>\n </div>\n ) : chosen === undefined ? null : (\n <div className=\"grid gap-1\">\n <ActionButton data-testid=\"bridge-put-in-basket\" variant=\"primary\" className=\"justify-self-start\" isPending={working?.kind === 'option'} pendingLabel=\"Putting in the basket...\" disabled={isWorking} onClick={() => { onPut(chosen); }}>\n Put option {chosen} in the basket\n </ActionButton>\n <span className=\"text-caption text-muted-foreground\">Nothing is sent yet. {delivery.from} receives this answer when you send the basket.</span>\n </div>\n )}\n </>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <button type=\"button\" onClick={onBack} disabled={isWorking} className=\"inline-flex h-9 items-center rounded-md px-4 text-muted-foreground hover:bg-accent disabled:opacity-70\">\n Back\n </button>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useEffect } from 'react';\n\n/** How long Bridge waits before it reads the record again by itself. */\nconst TRY_AGAIN_MS = 10_000;\n\n/**\n * The record cannot be read now (Bridge, section 9: core does not answer):\n * why, that nothing is lost, since nothing was acknowledged, and the page\n * reads itself again every 10 seconds, or at once on Try now.\n */\nexport function RecordUnreadable({ message }: { message: string }) {\n const router = useRouter();\n useEffect(() => {\n const again = setInterval(() => {\n router.refresh();\n }, TRY_AGAIN_MS);\n return () => {\n clearInterval(again);\n };\n }, [router]);\n return (\n <section role=\"alert\" data-testid=\"bridge-unreadable\" className=\"flex flex-wrap items-center gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"font-semibold\">The record cannot be read now</span>\n <span className=\"text-caption\">\n {message} Nothing was opened or answered, so nothing is lost: Bridge tries again in 10 s.\n </span>\n </span>\n <button type=\"button\" data-testid=\"bridge-try-now\" onClick={() => { router.refresh(); }} className=\"inline-flex h-9 items-center rounded-md border border-border bg-card px-4 text-card-foreground hover:bg-accent\">\n Try now\n </button>\n </section>\n );\n}\n","/** Where a meeting's page is, for server and client code alike. */\n\n/** The meeting page's address, before the meeting's id. */\nexport const MEETINGS_PATH = '/meetings';\n\n/** The address of a meeting's page in a fleet, at the page of contributions after the cursor, if one is given. */\nexport function meetingPathOf(meeting: { fleetId: string; meetingId: string; cursor?: string }): string {\n const query = new URLSearchParams({ fleet: meeting.fleetId, ...(meeting.cursor === undefined ? {} : { cursor: meeting.cursor }) });\n return `${MEETINGS_PATH}/${encodeURIComponent(meeting.meetingId)}?${query.toString()}`;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40edad5bc6caa482ec57bdf504a9545c453e286344\":{\"name\":\"answerDelivery\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"40edad5bc6caa482ec57bdf504a9545c453e286344\",callServer,void 0,findSourceMapURL,\"answerDelivery\");export{$$RSC_SERVER_ACTION_2 as answerDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"409343274cfb1997696f97d13e70128feeaadc81b0\":{\"name\":\"doneDelivery\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"409343274cfb1997696f97d13e70128feeaadc81b0\",callServer,void 0,findSourceMapURL,\"doneDelivery\");export{$$RSC_SERVER_ACTION_6 as doneDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"6013ebd954e4b9b9c2c4a85c94c4fc1f4786952324\":{\"name\":\"openDelivery\"}},\"web/features/bridge/hooks/bridge-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(\"6013ebd954e4b9b9c2c4a85c94c4fc1f4786952324\",callServer,void 0,findSourceMapURL,\"openDelivery\");export{$$RSC_SERVER_ACTION_1 as openDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"408a5fadf58977f6b55557119e3557d884605ebbcf\":{\"name\":\"putInBasket\"}},\"web/features/bridge/hooks/bridge-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(\"408a5fadf58977f6b55557119e3557d884605ebbcf\",callServer,void 0,findSourceMapURL,\"putInBasket\");export{$$RSC_SERVER_ACTION_3 as putInBasket};"],"names":["$$RSC_SERVER_ACTION_4","InBasketNotice","inBasket","basketHref","isRemoving","isWorking","onRemove","className","option","note","href","isPending","pendingLabel","disabled","onClick","QuestionOptions","question","chosen","isStale","onChoose","options","map","key","type","name","value","checked","onChange","label","detail","pick","StaleNotice","stale","from","onOpen","replacementId","kind","StepAsked","step","why","link","undefined","target","rel","host","StepControls","working","failure","onNoteChange","onFinish","rows","event","placeholder","message","isFailure","variant","DeliveryCard","delivery","isDoneOnSeeing","meetingHref","onAnswer","onPut","onDone","onFinishStep","onBack","setChosen","Date","sentAt","toUTCString","title","body","context","TRY_AGAIN_MS","RecordUnreadable","router","again","setInterval","refresh","clearInterval","role","MEETINGS_PATH","meetingPathOf","meeting","query","URLSearchParams","fleet","fleetId","cursor","encodeURIComponent","meetingId","toString"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/bridge/hooks/data%3Af66dea%20%3Ctext/javascript%3E","../../../../../web/features/bridge/state/item-focus.tsx","../../../../../web/features/bridge/ui/delivery-card.tsx","../../../../../web/features/bridge/state/record-unreadable.tsx","../../../../../web/features/meeting/paths.ts","../../../../../web/features/bridge/hooks/data%3Acc8e61%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A40dcc4%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3Ab02790%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A2985b6%20%3Ctext/javascript%3E"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"60cb932106ab7fdcbd18e33041be499ed83080592f\":{\"name\":\"removeFromBasket\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"60cb932106ab7fdcbd18e33041be499ed83080592f\",callServer,void 0,findSourceMapURL,\"removeFromBasket\");export{$$RSC_SERVER_ACTION_4 as removeFromBasket};","'use client';\n\nimport { useState, useTransition, type ReactNode } from 'react';\n\nimport { meetingPathOf } from '../../meeting/paths';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { answerDelivery, doneDelivery, openDelivery, putInBasket, removeFromBasket, type ActionOutcome } from '../hooks/bridge-actions';\nimport { BRIDGE_BASKET_PATH } from '../paths';\nimport type { FocusedDelivery } from '../services/deliveries';\nimport type { HomeItem } from '../services/items';\nimport { DeliveryCard, type DeliveryControl, type InBasket } from '../ui/delivery-card';\nimport { Notice } from '../ui/notice';\n\n/** An item to open: by its delivery, with its job, and the answer to it in the basket, if any. */\nexport interface ToOpen {\n readonly deliveryId: string;\n readonly job: HomeItem['job'];\n readonly inBasket?: InBasket | null;\n}\n\n/** What a list of items gets to open one: the press, the one opening, and why one could not be opened. */\nexport interface ItemOpening {\n readonly open: (item: ToOpen) => void;\n readonly openingId: string | undefined;\n readonly failure: { deliveryId: string; message: string } | undefined;\n}\n\n/**\n * A list of Bridge's items with one in focus at a time. Opening is the\n * person's own act, so it is a press, never a link: the gateway acknowledges\n * the item for them, and it is shown whole. An alert or a notice seen is\n * done at once (CC16), so it shows with no answer to give, as does a\n * question its asker withdrew or replaced; a replaced one opens its\n * replacement. A step ends done or cannot with the note, sent at once,\n * never through the basket (CC23). A question's answer goes in the basket (CC24), and comes\n * out of it there. Answering, being done or putting in the basket says so\n * in place, and the page reads itself again.\n */\nexport function ItemFocus({ fleetId, children }: { fleetId: string; children: (opening: ItemOpening) => ReactNode }) {\n const [focus, setFocus] = useState<{ delivery: FocusedDelivery; isDoneOnSeeing: boolean; inBasket: InBasket | null } | undefined>();\n const [note, setNote] = useState('');\n const [openingId, setOpeningId] = useState<string | undefined>();\n const [working, setWorking] = useState<DeliveryControl | undefined>();\n const [openFailure, setOpenFailure] = useState<{ deliveryId: string; message: string } | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [done, setDone] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n const open = (item: ToOpen) => {\n setOpeningId(item.deliveryId);\n setOpenFailure(undefined);\n setDone(undefined);\n startTransition(async () => {\n const outcome = await openDelivery(fleetId, item.deliveryId);\n setOpeningId(undefined);\n if (outcome.isOk) {\n const inBasket = item.inBasket ?? null;\n setFocus({ delivery: outcome.value, isDoneOnSeeing: item.job === 'stay-aware', inBasket });\n setNote(inBasket?.note ?? '');\n setFailure(undefined);\n } else {\n setOpenFailure({ deliveryId: item.deliveryId, message: outcome.message });\n }\n });\n };\n\n const settle = ({ control, action, said }: { control: DeliveryControl; action: () => Promise<ActionOutcome<undefined>>; said: string }) => {\n setWorking(control);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await action();\n setWorking(undefined);\n if (outcome.isOk) {\n setFocus(undefined);\n setDone(said);\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n if (focus !== undefined) {\n const { delivery, inBasket } = focus;\n const questionId = delivery.question?.id;\n return (\n <DeliveryCard\n key={delivery.deliveryId}\n delivery={delivery}\n isDoneOnSeeing={focus.isDoneOnSeeing}\n meetingHref={delivery.meetingId === undefined ? undefined : meetingPathOf({ fleetId, meetingId: delivery.meetingId })}\n basketHref={inFleet(BRIDGE_BASKET_PATH, fleetId)}\n inBasket={inBasket}\n note={note}\n working={working}\n failure={failure}\n onNoteChange={setNote}\n onAnswer={(option) => { settle({ control: option === undefined ? { kind: 'note' } : { kind: 'option', option }, action: () => answerDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId, input: { questionId: delivery.question?.id, option, note } }), said: `Your answer went to ${delivery.from}.` }); }\n }\n onPut={(option) => { settle({ control: { kind: 'option', option }, action: () => putInBasket({ fleet: fleetId, deliveryId: delivery.deliveryId, option, note }), said: `Option ${String(option)} is in the basket, not sent: ${delivery.from} receives it when you send the basket.` }); }}\n onRemove={() => {\n if (questionId !== undefined) {\n settle({ control: { kind: 'remove' }, action: () => removeFromBasket(fleetId, questionId), said: `Your answer to “${delivery.title}” is out of the basket; the question still waits on you.` });\n }\n }}\n onDone={() => { settle({ control: { kind: 'done' }, action: () => doneDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId }), said: `Done with “${delivery.title}”.` }); }}\n onFinishStep={(outcome) => {\n settle({\n control: { kind: outcome },\n action: () => doneDelivery({ fleet: fleetId, deliveryId: delivery.deliveryId, step: { outcome, note } }),\n said: outcome === 'done' ? `Done: ${delivery.from} is told “${delivery.title}” is done.` : `Cannot: ${delivery.from} is told you cannot do “${delivery.title}”.`,\n });\n }}\n onOpen={(deliveryId) => { open({ deliveryId, job: 'decide' }); }}\n onBack={() => { setFocus(undefined); }}\n />\n );\n }\n return (\n <div className=\"grid gap-4\">\n {done === undefined ? null : <Notice message={done} isFailure={false} />}\n {children({ open, openingId, failure: openFailure })}\n </div>\n );\n}\n","import { useState } from 'react';\n\nimport type { Question } from '@aeolus-fleet/common';\n\nimport type { FocusedDelivery, Stale, StepView } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\n/** Which of the card's controls is working: an option of the question put in the basket, its entry removed, the note alone, done, or a step's cannot. */\nexport type DeliveryControl = { kind: 'option'; option: number } | { kind: 'remove' } | { kind: 'note' } | { kind: 'done' } | { kind: 'cannot' };\n\n/** How the person ends a step: they did it, or cannot. */\nexport type StepOutcome = 'done' | 'cannot';\n\n/** The answer to a question in the basket (Bridge, section 9): its option and its note, none when the person wrote none. */\nexport interface InBasket {\n readonly option: number;\n readonly note: string | null;\n}\n\n/** What a question in the basket says: in it, not sent, with its note; picking another option changes it. */\nfunction InBasketNotice({ inBasket, basketHref, isRemoving, isWorking, onRemove }: { inBasket: InBasket; basketHref: string; isRemoving: boolean; isWorking: boolean; onRemove: () => void }) {\n return (\n <div data-testid=\"bridge-in-basket\" className=\"grid gap-2 rounded-md border border-border bg-muted p-3\">\n <span className=\"font-medium\">In the basket: option {inBasket.option}, not sent</span>\n {inBasket.note === null ? null : <span className=\"text-caption\">“{inBasket.note}”</span>}\n <span className=\"text-caption text-muted-foreground\">Pick another option to change it.</span>\n <div className=\"flex flex-wrap gap-2\">\n <a data-testid=\"bridge-basket-open\" href={basketHref} className=\"inline-flex h-9 items-center rounded-md border border-border px-4 hover:bg-accent\">\n Open the basket\n </a>\n <ActionButton data-testid=\"bridge-basket-remove\" isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={onRemove}>\n Remove\n </ActionButton>\n </div>\n </div>\n );\n}\n\n/** The options of a question, one to choose, the asker's pick marked; none to choose once it is stale. */\nfunction QuestionOptions({ question, chosen, isStale, onChoose }: { question: Question; chosen: number | undefined; isStale: boolean; onChoose: (option: number) => void }) {\n return (\n <fieldset className={`grid gap-2 ${isStale ? 'opacity-60' : ''}`} disabled={isStale}>\n <legend className=\"sr-only\">Options</legend>\n {question.options.map((option) => (\n <label key={option.key} className={`flex items-start gap-3 rounded-md border p-3 ${option.key === chosen && !isStale ? 'border-ring bg-accent' : 'border-border'}`}>\n <input type=\"radio\" name=\"option\" value={option.key} checked={option.key === chosen && !isStale} onChange={() => { onChoose(option.key); }} className=\"mt-1\" />\n <span className=\"grid flex-1 gap-0.5\">\n <span className=\"font-medium\">\n {option.key}. {option.label}\n </span>\n {option.detail === '' ? null : <span className=\"text-caption text-muted-foreground\">{option.detail}</span>}\n </span>\n {option.key === question.pick.option ? <span className=\"rounded-sm border border-border px-1.5 text-caption\">Their pick</span> : null}\n </label>\n ))}\n </fieldset>\n );\n}\n\n/** What a stale question says: withdrawn, done; or replaced, with the replacement to open. */\nfunction StaleNotice({ stale, from, onOpen }: { stale: Stale; from: string; onOpen: (deliveryId: string) => void }) {\n const { replacementId } = stale;\n return (\n <div data-testid=\"bridge-stale\" className=\"grid gap-2 rounded-md border border-border bg-muted p-3\">\n <span>{stale.kind === 'withdrawn' ? `Withdrawn by ${from}. Nothing to answer: it is done.` : `Replaced by ${from}. Answer the new question.`}</span>\n {replacementId === null ? null : (\n <ActionButton data-testid=\"bridge-replacement\" className=\"justify-self-start\" isPending={false} pendingLabel=\"Opening...\" onClick={() => { onOpen(replacementId); }}>\n Open the new question\n </ActionButton>\n )}\n </div>\n );\n}\n\n/** What a step asks: why, and the link where it is done, shown with its host and opened only by the person's own press (Bridge, section 9). */\nfunction StepAsked({ step }: { step: StepView }) {\n return (\n <>\n <p className=\"whitespace-pre-wrap\">{step.why}</p>\n {step.link === undefined ? null : (\n <a data-testid=\"bridge-step-link\" href={step.link.href} target=\"_blank\" rel=\"noopener noreferrer\" className=\"inline-flex h-9 items-center justify-self-start rounded-md border border-border px-4 hover:bg-accent\">\n Open on {step.link.host}\n </a>\n )}\n </>\n );\n}\n\n/** A step's note field, shown before Done or Cannot is pressed, and the two: the outcome goes to the asker at once, with the note (CC14, CC23). */\nfunction StepControls({ from, note, working, failure, onNoteChange, onFinish }: { from: string; note: string; working: DeliveryControl | undefined; failure: string | undefined; onNoteChange: (note: string) => void; onFinish: (outcome: StepOutcome) => void }) {\n const isWorking = working !== undefined;\n return (\n <>\n <label className=\"grid gap-1\">\n <span>Note</span>\n <textarea\n data-testid=\"bridge-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder=\"Optional, goes with Done or Cannot\"\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"grid gap-1\">\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"bridge-step-done\" variant=\"primary\" isPending={working?.kind === 'done'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onFinish('done'); }}>\n Done\n </ActionButton>\n <ActionButton data-testid=\"bridge-step-cannot\" isPending={working?.kind === 'cannot'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onFinish('cannot'); }}>\n Cannot\n </ActionButton>\n </div>\n <span className=\"text-caption text-muted-foreground\">{from} is told at once, with your note.</span>\n </div>\n </>\n );\n}\n\n/**\n * One item in focus (design B, Signal). A question opens with the asker's\n * pick chosen (CC11), or the option in the basket; its one button puts that\n * option in the basket with the note, if any, and sends nothing (CC24): the\n * person sends the basket. A step (CC14) shows why and its link, then its\n * note field before Done and Cannot, each sending its outcome at once with\n * the note. Any other item may get a note as its answer, and may\n * be done with; one of a meeting leads to the meeting. An alert or a notice\n * is done once seen (Bridge, CC16): it asks nothing more. So is a question\n * its asker withdrew or replaced: stale, nothing to send, a replaced one\n * leading to its replacement.\n */\nexport function DeliveryCard({\n delivery,\n isDoneOnSeeing,\n meetingHref,\n basketHref,\n inBasket,\n note,\n working,\n failure,\n onNoteChange,\n onAnswer,\n onPut,\n onRemove,\n onDone,\n onFinishStep,\n onOpen,\n onBack,\n}: {\n delivery: FocusedDelivery;\n /** Whether seeing it was all it asked, so it is done: an alert or a notice. */\n isDoneOnSeeing: boolean;\n /** The page of the meeting it belongs to, if it belongs to one. */\n meetingHref: string | undefined;\n /** Bridge's basket. */\n basketHref: string;\n /** The answer to the question in the basket, if any. */\n inBasket: InBasket | null;\n note: string;\n working: DeliveryControl | undefined;\n failure: string | undefined;\n onNoteChange: (note: string) => void;\n /** Answers any item but a question with the note. */\n onAnswer: (option: number | undefined) => void;\n /** Puts the option chosen of a question in the basket, with the note. */\n onPut: (option: number) => void;\n /** Takes the question's answer out of the basket. */\n onRemove: () => void;\n onDone: () => void;\n /** Ends a step done or cannot, with the note. */\n onFinishStep: (outcome: StepOutcome) => void;\n /** Opens another item: a replaced question's replacement. */\n onOpen: (deliveryId: string) => void;\n onBack: () => void;\n}) {\n const { question, step, stale } = delivery;\n const [chosen, setChosen] = useState(inBasket?.option ?? question?.pick.option);\n const isWorking = working !== undefined;\n return (\n <section data-testid=\"bridge-delivery\" className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <span className=\"text-caption text-muted-foreground\">\n {delivery.from} · {new Date(delivery.sentAt).toUTCString()}\n </span>\n <h2 className=\"text-heading font-semibold\">{question?.title ?? delivery.title}</h2>\n {meetingHref === undefined ? null : (\n <a data-testid=\"bridge-meeting\" href={meetingHref} className=\"inline-flex h-9 items-center justify-self-start rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\">\n Go to the meeting\n </a>\n )}\n {step !== undefined ? (\n <StepAsked step={step} />\n ) : question === undefined ? (\n <pre className=\"whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-caption\">{delivery.body}</pre>\n ) : (\n <>\n <p className=\"whitespace-pre-wrap\">{question.context}</p>\n <QuestionOptions question={question} chosen={chosen} isStale={stale !== null} onChoose={setChosen} />\n <p className=\"text-caption text-muted-foreground\">\n {delivery.from} picks {question.pick.option}: {question.pick.why}\n </p>\n </>\n )}\n {stale === null ? null : <StaleNotice stale={stale} from={delivery.from} onOpen={onOpen} />}\n {inBasket === null || stale !== null ? null : <InBasketNotice inBasket={inBasket} basketHref={basketHref} isRemoving={working?.kind === 'remove'} isWorking={isWorking} onRemove={onRemove} />}\n {isDoneOnSeeing ? (\n <p data-testid=\"bridge-seen-done\" className=\"text-muted-foreground\">\n Seen now, so done: it asks nothing more.\n </p>\n ) : stale !== null ? null : step !== undefined ? (\n <StepControls from={delivery.from} note={note} working={working} failure={failure} onNoteChange={onNoteChange} onFinish={onFinishStep} />\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>{question === undefined ? 'Your answer' : 'Note'}</span>\n <textarea\n data-testid=\"bridge-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder={question === undefined ? '' : 'Optional, goes with the answer'}\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {question === undefined ? (\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"bridge-answer\" variant=\"primary\" isPending={working?.kind === 'note'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onAnswer(undefined); }}>\n Answer\n </ActionButton>\n <ActionButton data-testid=\"bridge-done\" isPending={working?.kind === 'done'} pendingLabel=\"Marking done...\" disabled={isWorking} onClick={onDone}>\n Done\n </ActionButton>\n </div>\n ) : chosen === undefined ? null : (\n <div className=\"grid gap-1\">\n <ActionButton data-testid=\"bridge-put-in-basket\" variant=\"primary\" className=\"justify-self-start\" isPending={working?.kind === 'option'} pendingLabel=\"Putting in the basket...\" disabled={isWorking} onClick={() => { onPut(chosen); }}>\n Put option {chosen} in the basket\n </ActionButton>\n <span className=\"text-caption text-muted-foreground\">Nothing is sent yet. {delivery.from} receives this answer when you send the basket.</span>\n </div>\n )}\n </>\n )}\n <div className=\"flex flex-wrap gap-2\">\n <button type=\"button\" onClick={onBack} disabled={isWorking} className=\"inline-flex h-9 items-center rounded-md px-4 text-muted-foreground hover:bg-accent disabled:opacity-70\">\n Back\n </button>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useEffect } from 'react';\n\n/** How long Bridge waits before it reads the record again by itself. */\nconst TRY_AGAIN_MS = 10_000;\n\n/**\n * The record cannot be read now (Bridge, section 9: core does not answer):\n * why, that nothing is lost, since nothing was acknowledged, and the page\n * reads itself again every 10 seconds, or at once on Try now.\n */\nexport function RecordUnreadable({ message }: { message: string }) {\n const router = useRouter();\n useEffect(() => {\n const again = setInterval(() => {\n router.refresh();\n }, TRY_AGAIN_MS);\n return () => {\n clearInterval(again);\n };\n }, [router]);\n return (\n <section role=\"alert\" data-testid=\"bridge-unreadable\" className=\"flex flex-wrap items-center gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"font-semibold\">The record cannot be read now</span>\n <span className=\"text-caption\">\n {message} Nothing was opened or answered, so nothing is lost: Bridge tries again in 10 s.\n </span>\n </span>\n <button type=\"button\" data-testid=\"bridge-try-now\" onClick={() => { router.refresh(); }} className=\"inline-flex h-9 items-center rounded-md border border-border bg-card px-4 text-card-foreground hover:bg-accent\">\n Try now\n </button>\n </section>\n );\n}\n","/** Where a meeting's page is, for server and client code alike. */\n\n/** The meeting page's address, before the meeting's id. */\nexport const MEETINGS_PATH = '/meetings';\n\n/** The address of a meeting's page in a fleet, at the page of contributions after the cursor, if one is given. */\nexport function meetingPathOf(meeting: { fleetId: string; meetingId: string; cursor?: string }): string {\n const query = new URLSearchParams({ fleet: meeting.fleetId, ...(meeting.cursor === undefined ? {} : { cursor: meeting.cursor }) });\n return `${MEETINGS_PATH}/${encodeURIComponent(meeting.meetingId)}?${query.toString()}`;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40312d708ed123f3bff12a0e5d5ab7bdd456131901\":{\"name\":\"answerDelivery\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"40312d708ed123f3bff12a0e5d5ab7bdd456131901\",callServer,void 0,findSourceMapURL,\"answerDelivery\");export{$$RSC_SERVER_ACTION_2 as answerDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"407cf7e8bf1a43e93e600808ccd1631dfd13c9b490\":{\"name\":\"doneDelivery\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"407cf7e8bf1a43e93e600808ccd1631dfd13c9b490\",callServer,void 0,findSourceMapURL,\"doneDelivery\");export{$$RSC_SERVER_ACTION_6 as doneDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"60c205c99f267754b5cb7b09118fdaf91f419555a5\":{\"name\":\"openDelivery\"}},\"web/features/bridge/hooks/bridge-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(\"60c205c99f267754b5cb7b09118fdaf91f419555a5\",callServer,void 0,findSourceMapURL,\"openDelivery\");export{$$RSC_SERVER_ACTION_1 as openDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"40c05f98915a7c9661aa8f801d392296ba8350eeba\":{\"name\":\"putInBasket\"}},\"web/features/bridge/hooks/bridge-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(\"40c05f98915a7c9661aa8f801d392296ba8350eeba\",callServer,void 0,findSourceMapURL,\"putInBasket\");export{$$RSC_SERVER_ACTION_3 as putInBasket};"],"names":["$$RSC_SERVER_ACTION_4","InBasketNotice","inBasket","basketHref","isRemoving","isWorking","onRemove","className","option","note","href","isPending","pendingLabel","disabled","onClick","QuestionOptions","question","chosen","isStale","onChoose","options","map","key","type","name","value","checked","onChange","label","detail","pick","StaleNotice","stale","from","onOpen","replacementId","kind","StepAsked","step","why","link","undefined","target","rel","host","StepControls","working","failure","onNoteChange","onFinish","rows","event","placeholder","message","isFailure","variant","DeliveryCard","delivery","isDoneOnSeeing","meetingHref","onAnswer","onPut","onDone","onFinishStep","onBack","setChosen","Date","sentAt","toUTCString","title","body","context","TRY_AGAIN_MS","RecordUnreadable","router","again","setInterval","refresh","clearInterval","role","MEETINGS_PATH","meetingPathOf","meeting","query","URLSearchParams","fleet","fleetId","cursor","encodeURIComponent","meetingId","toString"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("6076aa2e7bb55e2ef41915944adf76318c50c9d874",k.callServer,void 0,k.findSourceMapURL,"addA2aAgent"),m={kind:"idle"};a.s(["A2aAgentForm",0,function({fleetId:a,requestId:k,owners:n,scopes:o}){let[p,q]=(0,c.useActionState)(l,m),r="refused"===p.kind?p.fields:{};return(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-agent-form",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:k}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A agent"}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",defaultValue:r.name??"",required:!0})]}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Card address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"cardUrl",defaultValue:r.cardUrl??"",placeholder:"https://agent.example.com/.well-known/agent-card.json",required:!0}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"The gateway reads the card first: an agent whose card it cannot state is not added."})]}),(0,b.jsx)(e.f,{legend:"The agent's credential",fields:r,noneHelp:"The gateway sends no credential: for an agent that asks for none."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Messages in flight at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:r.concurrencyLimit??"4"})]}),(0,b.jsx)(h.f,{choices:n.isOk?n.value:[],current:null,help:"A person ship or argo. It answers for this agent.",refusal:n.isOk?void 0:n.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`,defaultChecked:void 0!==r[`${j.f}${a}`]}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Reading the card…",children:"Add"})})]})}],96001)}];
1
+ module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("608ddc2429cd652b9135768f59e77d96531624d7b3",k.callServer,void 0,k.findSourceMapURL,"addA2aAgent"),m={kind:"idle"};a.s(["A2aAgentForm",0,function({fleetId:a,requestId:k,owners:n,scopes:o}){let[p,q]=(0,c.useActionState)(l,m),r="refused"===p.kind?p.fields:{};return(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-agent-form",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:k}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A agent"}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",defaultValue:r.name??"",required:!0})]}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Card address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"cardUrl",defaultValue:r.cardUrl??"",placeholder:"https://agent.example.com/.well-known/agent-card.json",required:!0}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"The gateway reads the card first: an agent whose card it cannot state is not added."})]}),(0,b.jsx)(e.f,{legend:"The agent's credential",fields:r,noneHelp:"The gateway sends no credential: for an agent that asks for none."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Messages in flight at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:r.concurrencyLimit??"4"})]}),(0,b.jsx)(h.f,{choices:n.isOk?n.value:[],current:null,help:"A person ship or argo. It answers for this agent.",refusal:n.isOk?void 0:n.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`,defaultChecked:void 0!==r[`${j.f}${a}`]}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Reading the card…",children:"Add"})})]})}],96001)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%3Ad36bec%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aAgent, type AddA2aAgentState } from '../actions';\n\nconst IDLE: AddA2aAgentState = { kind: 'idle' };\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The form that adds an A2A agent: its name, card address, credential and calls at once, its owner and the approver's own scopes to tick. */\nexport function A2aAgentForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aAgent, IDLE);\n const fields = state.kind === 'refused' ? state.fields : {};\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-agent-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A agent</h1>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" defaultValue={fields.name ?? ''} required />\n </label>\n <label className={LABEL}>\n <span>Card address</span>\n <input className={INPUT} type=\"url\" name=\"cardUrl\" defaultValue={fields.cardUrl ?? ''} placeholder=\"https://agent.example.com/.well-known/agent-card.json\" required />\n <span className=\"text-caption text-muted-foreground\">The gateway reads the card first: an agent whose card it cannot state is not added.</span>\n </label>\n <CredentialFields legend=\"The agent's credential\" fields={fields} noneHelp=\"The gateway sends no credential: for an agent that asks for none.\" />\n <label className={LABEL}>\n <span>Messages in flight at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this agent.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} defaultChecked={fields[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Reading the card…\">Add</SubmitButton>\n </div>\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6076aa2e7bb55e2ef41915944adf76318c50c9d874\":{\"name\":\"addA2aAgent\"}},\"web/features/add-a2a-agent/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(\"6076aa2e7bb55e2ef41915944adf76318c50c9d874\",callServer,void 0,findSourceMapURL,\"addA2aAgent\");export{$$RSC_SERVER_ACTION_0 as addA2aAgent};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%3A5fd1dd%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aAgent, type AddA2aAgentState } from '../actions';\n\nconst IDLE: AddA2aAgentState = { kind: 'idle' };\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The form that adds an A2A agent: its name, card address, credential and calls at once, its owner and the approver's own scopes to tick. */\nexport function A2aAgentForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aAgent, IDLE);\n const fields = state.kind === 'refused' ? state.fields : {};\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-agent-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A agent</h1>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" defaultValue={fields.name ?? ''} required />\n </label>\n <label className={LABEL}>\n <span>Card address</span>\n <input className={INPUT} type=\"url\" name=\"cardUrl\" defaultValue={fields.cardUrl ?? ''} placeholder=\"https://agent.example.com/.well-known/agent-card.json\" required />\n <span className=\"text-caption text-muted-foreground\">The gateway reads the card first: an agent whose card it cannot state is not added.</span>\n </label>\n <CredentialFields legend=\"The agent's credential\" fields={fields} noneHelp=\"The gateway sends no credential: for an agent that asks for none.\" />\n <label className={LABEL}>\n <span>Messages in flight at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this agent.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} defaultChecked={fields[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Reading the card…\">Add</SubmitButton>\n </div>\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"608ddc2429cd652b9135768f59e77d96531624d7b3\":{\"name\":\"addA2aAgent\"}},\"web/features/add-a2a-agent/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(\"608ddc2429cd652b9135768f59e77d96531624d7b3\",callServer,void 0,findSourceMapURL,\"addA2aAgent\");export{$$RSC_SERVER_ACTION_0 as addA2aAgent};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(48242),k=a.i(64943),l=a.i(5050);let m=(0,l.createServerReference)("60273996ed174fc68ab891889576f8698711d3d38a",l.callServer,void 0,l.findSourceMapURL,"addA2aClient"),n={kind:"idle"};function o({name:a,bearer:c,fleetId:e}){return(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-added",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," is added"]}),(0,b.jsx)("p",{children:"Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again."}),(0,b.jsx)("code",{className:"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code","data-testid":"add-a2a-client-bearer",children:c}),(0,b.jsx)("p",{children:(0,b.jsx)("a",{href:(0,d.f)((0,j.f)(a),e),className:"text-primary hover:underline",children:"Its card addresses"})})]})}a.s(["A2aClientForm",0,function({fleetId:a,requestId:d,owners:j,scopes:l}){let[p,q]=(0,c.useActionState)(m,n);return"added"===p.kind?(0,b.jsx)(o,{name:p.name,bearer:p.bearer,fleetId:a}):(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-form",children:[(0,b.jsx)("input",{type:"hidden",name:e.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:d}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A client"}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",required:!0})]}),(0,b.jsx)(h.f,{choices:j.isOk?j.value:[],current:null,help:"A person ship or argo. It answers for this client.",refusal:j.isOk?void 0:j.refusal}),0===l.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),l.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${k.f}${a}`}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Adding…",children:"Add"})}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}})]})}],90344)}];
1
+ module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(48242),k=a.i(64943),l=a.i(5050);let m=(0,l.createServerReference)("600996d1c8be3b57419d4f4c5c7afb4f599f261823",l.callServer,void 0,l.findSourceMapURL,"addA2aClient"),n={kind:"idle"};function o({name:a,bearer:c,fleetId:e}){return(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-added",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," is added"]}),(0,b.jsx)("p",{children:"Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again."}),(0,b.jsx)("code",{className:"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code","data-testid":"add-a2a-client-bearer",children:c}),(0,b.jsx)("p",{children:(0,b.jsx)("a",{href:(0,d.f)((0,j.f)(a),e),className:"text-primary hover:underline",children:"Its card addresses"})})]})}a.s(["A2aClientForm",0,function({fleetId:a,requestId:d,owners:j,scopes:l}){let[p,q]=(0,c.useActionState)(m,n);return"added"===p.kind?(0,b.jsx)(o,{name:p.name,bearer:p.bearer,fleetId:a}):(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-form",children:[(0,b.jsx)("input",{type:"hidden",name:e.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:d}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A client"}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",required:!0})]}),(0,b.jsx)(h.f,{choices:j.isOk?j.value:[],current:null,help:"A person ship or argo. It answers for this client.",refusal:j.isOk?void 0:j.refusal}),0===l.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),l.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${k.f}${a}`}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Adding…",children:"Add"})}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}})]})}],90344)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/add-a2a-client/data%3Aec2e31%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { partyPath } from '../../outside-parties/paths';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aClient, type AddA2aClientState } from '../actions';\n\nconst IDLE: AddA2aClientState = { kind: 'idle' };\n\n/** The bearer, shown this once: the gateway keeps only its hash. */\nfunction Added({ name, bearer, fleetId }: { name: string; bearer: string; fleetId: string }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-added\">\n <h2 className=\"text-section font-semibold\">{name} is added</h2>\n <p>Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again.</p>\n <code className=\"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code\" data-testid=\"add-a2a-client-bearer\">\n {bearer}\n </code>\n <p>\n <a href={inFleet(partyPath(name), fleetId)} className=\"text-primary hover:underline\">\n Its card addresses\n </a>\n </p>\n </section>\n );\n}\n\n/** The form that adds an A2A client: its name, owner and the approver's own scopes to tick; then its bearer. */\nexport function A2aClientForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aClient, IDLE);\n if (state.kind === 'added') {\n return <Added name={state.name} bearer={state.bearer} fleetId={fleetId} />;\n }\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A client</h1>\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this client.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Adding…\">Add</SubmitButton>\n </div>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60273996ed174fc68ab891889576f8698711d3d38a\":{\"name\":\"addA2aClient\"}},\"web/features/add-a2a-client/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(\"60273996ed174fc68ab891889576f8698711d3d38a\",callServer,void 0,findSourceMapURL,\"addA2aClient\");export{$$RSC_SERVER_ACTION_0 as addA2aClient};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/add-a2a-client/data%3A63fadf%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { partyPath } from '../../outside-parties/paths';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aClient, type AddA2aClientState } from '../actions';\n\nconst IDLE: AddA2aClientState = { kind: 'idle' };\n\n/** The bearer, shown this once: the gateway keeps only its hash. */\nfunction Added({ name, bearer, fleetId }: { name: string; bearer: string; fleetId: string }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-added\">\n <h2 className=\"text-section font-semibold\">{name} is added</h2>\n <p>Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again.</p>\n <code className=\"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code\" data-testid=\"add-a2a-client-bearer\">\n {bearer}\n </code>\n <p>\n <a href={inFleet(partyPath(name), fleetId)} className=\"text-primary hover:underline\">\n Its card addresses\n </a>\n </p>\n </section>\n );\n}\n\n/** The form that adds an A2A client: its name, owner and the approver's own scopes to tick; then its bearer. */\nexport function A2aClientForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aClient, IDLE);\n if (state.kind === 'added') {\n return <Added name={state.name} bearer={state.bearer} fleetId={fleetId} />;\n }\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A client</h1>\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this client.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Adding…\">Add</SubmitButton>\n </div>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"600996d1c8be3b57419d4f4c5c7afb4f599f261823\":{\"name\":\"addA2aClient\"}},\"web/features/add-a2a-client/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(\"600996d1c8be3b57419d4f4c5c7afb4f599f261823\",callServer,void 0,findSourceMapURL,\"addA2aClient\");export{$$RSC_SERVER_ACTION_0 as addA2aClient};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("6017da4704ef1e4dbcd358dccf1419a47cda9928b2",d.callServer,void 0,d.findSourceMapURL,"approveServer"),f=(0,d.createServerReference)("603323a3622f7b8700ab5fb0828fbd34c064b0ea9d",d.callServer,void 0,d.findSourceMapURL,"checkServer");var g=a.i(30587),h=a.i(51636),i=a.i(60224),j=a.i(88412),k=a.i(77237);let l=["Address","Check","Owner"],m=["Address","Owner","Sign in"];var n=a.i(36855);function o({refusal:a}){return void 0===a?null:(0,b.jsx)(n.f,{state:{kind:"refused",message:a}})}function p({names:a,at:c}){return(0,b.jsx)("ol",{className:"flex gap-4",children:a.map((a,d)=>(0,b.jsxs)("li",{"aria-current":d===c?"step":void 0,className:d<=c?"font-medium":"text-muted-foreground",children:[d+1," ",a]},a))})}function q({state:a,action:d,fleetId:e}){let[f,n]=(0,c.useState)((0,h.G)(a.fields.credentialKind??"")),r=f===h.m.kind;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:f===h.m.kind?m:l,at:0}),(0,b.jsxs)("form",{action:d,className:`${j.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:g.H,value:e}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:j.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsx)(i.f,{legend:"The server's credential",fields:a.fields,noneHelp:"The gateway sends no credential: for a server reached only on a private network.",canEachPersonSignIn:!0,onKindChange:n}),(0,b.jsx)("div",{children:(0,b.jsx)(k.f,{pending:r?"Next…":"Checking the server…",testId:"add-server-check",children:r?"Next":"Check the server"})})]})]})}var r=a.i(35149),s=a.i(10020),t=a.i(47763);function u({tool:a,control:c,testId:d}){let{name:e,description:f,isReadOnly:g,isNew:h=!1}=a,i=void 0===f?"":f.split("\n").map(a=>a.trim()).find(a=>""!==a)??"",j=void 0!==f&&f.trim()!==i;return(0,b.jsxs)("li",{className:"grid gap-1 border-b border-border py-2 last:border-b-0","data-testid":d,children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[c,(0,b.jsx)("span",{className:"font-mono",children:e}),g?(0,b.jsx)(t.E,{children:"reads only"}):null,h?(0,b.jsx)(t.T,{tone:"attention",label:"New"}):null]}),""===i?null:j?(0,b.jsxs)("details",{className:"text-muted-foreground",children:[(0,b.jsx)("summary",{className:"cursor-pointer",children:i}),(0,b.jsx)("p",{className:"mt-1 whitespace-pre-line",children:f})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:i})]})}function v({tools:a,canSwitch:d}){let[e,f]=(0,c.useState)(new Set),g=a.length-e.size;return(0,b.jsxs)("section",{className:"grid gap-2","data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"flex flex-wrap justify-between gap-2 text-section font-semibold",children:[(0,b.jsxs)("span",{children:["The server answers: ",a.length," ",1===a.length?"tool":"tools"]}),d?(0,b.jsxs)("span",{role:"status",className:"font-normal text-muted-foreground","data-testid":"add-server-tools-on",children:[g," of ",a.length," on"]}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:d?"The fleet may call only the tools switched on. A tool the server adds later starts off.":"Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page."}),(0,b.jsx)("ul",{className:"grid",children:a.map(a=>{let c=!e.has(a.name);return(0,b.jsx)(u,{tool:a,testId:"add-server-tool",control:d?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("input",{type:"hidden",name:"toolShown",value:a.name}),c?(0,b.jsx)("input",{type:"hidden",name:"toolOn",value:a.name}):null,(0,b.jsx)(s.f,{isOn:c,label:a.name,onClick:()=>{var b;b=a.name,f(a=>{let c=new Set(a);return c.delete(b)||c.add(b),c})}})]}):null},a.name)})})]})}let w=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function x({state:a,refused:d,action:e,onBack:f,fleetId:h,canSwitchTools:i}){let n,q="refused"===d.kind&&d.requestId===a.requestId,s=q?d.fields:a.fields,t=s.url??"",[u,y]=(0,c.useState)(s.name??function(a){if(!URL.canParse(a))return"";let{hostname:b}=new URL(a);return/^\d+(\.\d+){3}$/.test(b)||b.startsWith("[")?"":(b.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,"")}(t)),z=a.tools;return(0,b.jsxs)(b.Fragment,{children:[null===z?(0,b.jsx)(p,{names:m,at:1}):(0,b.jsx)(p,{names:l,at:2}),(0,b.jsxs)("form",{action:e,className:`${j.r} grid gap-3`,"data-testid":"add-server-owner",children:[null===z?null:(0,b.jsx)(v,{tools:z,canSwitch:i}),(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:q?d.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:h}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),w.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:s[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:t}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:j.w,type:"text",name:"name",value:u,onChange:a=>{y(a.target.value)},required:!0})]}),(0,b.jsx)(r.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===s.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:j.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:s.concurrencyLimit??"4"})]}),null===z?(0,b.jsx)("p",{className:"text-muted-foreground",children:"Its tools show once someone signs in."}):null,(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(k.f,{pending:null===z?"Checking the sign-in…":"Adding…",testId:"add-server-approve",children:""===(n=u.trim())?"Add as outside party":n.length>20?`Add ${n.slice(0,20)}…`:`Add ${n}`}),(0,b.jsx)("button",{type:"button",className:j.x.secondary,onClick:f,children:"Back to the address"})]})]})]})}var y=a.i(25959),z=a.i(48242),A=a.i(43833);function B({fleetId:a,name:d}){let[e,f]=(0,c.useActionState)(A.f,g.Q);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:m,at:2}),(0,b.jsxs)("form",{action:f,className:`${j.r} grid gap-3`,"data-testid":"add-server-sign-in",children:[(0,b.jsx)(n.f,{state:{kind:"done",message:`${d} is added.`}}),(0,b.jsx)(n.f,{state:e}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"name",value:d}),(0,b.jsxs)("p",{children:["Sign in to ",d," for yourself. Its tools show after the first sign-in."]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(k.f,{pending:`Opening ${d}…`,testId:"add-server-sign-in-start",children:["Sign in to ",d]}),(0,b.jsx)("a",{href:(0,y.f)((0,z.f)(d),a),className:j.x.secondary,children:"Later"})]})]})]})}a.s(["AddServer",0,function({fleetId:a,canSwitchTools:d}){let[g,h]=(0,c.useActionState)(f,{step:"address",fields:{}}),[i,j]=(0,c.useActionState)(e,{kind:"idle"}),[k,l]=(0,c.useState)(void 0),m="owner"===g.step&&k!==g.requestId?g: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"}),"added"===i.kind?(0,b.jsx)(B,{fleetId:a,name:i.name}):void 0===m?(0,b.jsx)(q,{state:g,action:h,fleetId:a}):(0,b.jsx)(x,{state:m,refused:i,action:j,onBack:()=>{l(m.requestId)},fleetId:a,canSwitchTools:d})]})}],29372)}];
1
+ module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("603c1c8bc58d771628bd6e97e00ea17b677893c09e",d.callServer,void 0,d.findSourceMapURL,"approveServer"),f=(0,d.createServerReference)("60d88dd4308d5d5dab2e7b91e11e99a312ec2cffe2",d.callServer,void 0,d.findSourceMapURL,"checkServer");var g=a.i(30587),h=a.i(51636),i=a.i(60224),j=a.i(88412),k=a.i(77237);let l=["Address","Check","Owner"],m=["Address","Owner","Sign in"];var n=a.i(36855);function o({refusal:a}){return void 0===a?null:(0,b.jsx)(n.f,{state:{kind:"refused",message:a}})}function p({names:a,at:c}){return(0,b.jsx)("ol",{className:"flex gap-4",children:a.map((a,d)=>(0,b.jsxs)("li",{"aria-current":d===c?"step":void 0,className:d<=c?"font-medium":"text-muted-foreground",children:[d+1," ",a]},a))})}function q({state:a,action:d,fleetId:e}){let[f,n]=(0,c.useState)((0,h.G)(a.fields.credentialKind??"")),r=f===h.m.kind;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:f===h.m.kind?m:l,at:0}),(0,b.jsxs)("form",{action:d,className:`${j.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:g.H,value:e}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:j.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsx)(i.f,{legend:"The server's credential",fields:a.fields,noneHelp:"The gateway sends no credential: for a server reached only on a private network.",canEachPersonSignIn:!0,onKindChange:n}),(0,b.jsx)("div",{children:(0,b.jsx)(k.f,{pending:r?"Next…":"Checking the server…",testId:"add-server-check",children:r?"Next":"Check the server"})})]})]})}var r=a.i(35149),s=a.i(10020),t=a.i(47763);function u({tool:a,control:c,testId:d}){let{name:e,description:f,isReadOnly:g,isNew:h=!1}=a,i=void 0===f?"":f.split("\n").map(a=>a.trim()).find(a=>""!==a)??"",j=void 0!==f&&f.trim()!==i;return(0,b.jsxs)("li",{className:"grid gap-1 border-b border-border py-2 last:border-b-0","data-testid":d,children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[c,(0,b.jsx)("span",{className:"font-mono",children:e}),g?(0,b.jsx)(t.E,{children:"reads only"}):null,h?(0,b.jsx)(t.T,{tone:"attention",label:"New"}):null]}),""===i?null:j?(0,b.jsxs)("details",{className:"text-muted-foreground",children:[(0,b.jsx)("summary",{className:"cursor-pointer",children:i}),(0,b.jsx)("p",{className:"mt-1 whitespace-pre-line",children:f})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:i})]})}function v({tools:a,canSwitch:d}){let[e,f]=(0,c.useState)(new Set),g=a.length-e.size;return(0,b.jsxs)("section",{className:"grid gap-2","data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"flex flex-wrap justify-between gap-2 text-section font-semibold",children:[(0,b.jsxs)("span",{children:["The server answers: ",a.length," ",1===a.length?"tool":"tools"]}),d?(0,b.jsxs)("span",{role:"status",className:"font-normal text-muted-foreground","data-testid":"add-server-tools-on",children:[g," of ",a.length," on"]}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:d?"The fleet may call only the tools switched on. A tool the server adds later starts off.":"Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page."}),(0,b.jsx)("ul",{className:"grid",children:a.map(a=>{let c=!e.has(a.name);return(0,b.jsx)(u,{tool:a,testId:"add-server-tool",control:d?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("input",{type:"hidden",name:"toolShown",value:a.name}),c?(0,b.jsx)("input",{type:"hidden",name:"toolOn",value:a.name}):null,(0,b.jsx)(s.f,{isOn:c,label:a.name,onClick:()=>{var b;b=a.name,f(a=>{let c=new Set(a);return c.delete(b)||c.add(b),c})}})]}):null},a.name)})})]})}let w=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function x({state:a,refused:d,action:e,onBack:f,fleetId:h,canSwitchTools:i}){let n,q="refused"===d.kind&&d.requestId===a.requestId,s=q?d.fields:a.fields,t=s.url??"",[u,y]=(0,c.useState)(s.name??function(a){if(!URL.canParse(a))return"";let{hostname:b}=new URL(a);return/^\d+(\.\d+){3}$/.test(b)||b.startsWith("[")?"":(b.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,"")}(t)),z=a.tools;return(0,b.jsxs)(b.Fragment,{children:[null===z?(0,b.jsx)(p,{names:m,at:1}):(0,b.jsx)(p,{names:l,at:2}),(0,b.jsxs)("form",{action:e,className:`${j.r} grid gap-3`,"data-testid":"add-server-owner",children:[null===z?null:(0,b.jsx)(v,{tools:z,canSwitch:i}),(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:q?d.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:h}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),w.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:s[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:t}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:j.w,type:"text",name:"name",value:u,onChange:a=>{y(a.target.value)},required:!0})]}),(0,b.jsx)(r.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===s.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:j.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:s.concurrencyLimit??"4"})]}),null===z?(0,b.jsx)("p",{className:"text-muted-foreground",children:"Its tools show once someone signs in."}):null,(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(k.f,{pending:null===z?"Checking the sign-in…":"Adding…",testId:"add-server-approve",children:""===(n=u.trim())?"Add as outside party":n.length>20?`Add ${n.slice(0,20)}…`:`Add ${n}`}),(0,b.jsx)("button",{type:"button",className:j.x.secondary,onClick:f,children:"Back to the address"})]})]})]})}var y=a.i(25959),z=a.i(48242),A=a.i(4344);function B({fleetId:a,name:d}){let[e,f]=(0,c.useActionState)(A.f,g.Q);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:m,at:2}),(0,b.jsxs)("form",{action:f,className:`${j.r} grid gap-3`,"data-testid":"add-server-sign-in",children:[(0,b.jsx)(n.f,{state:{kind:"done",message:`${d} is added.`}}),(0,b.jsx)(n.f,{state:e}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"name",value:d}),(0,b.jsxs)("p",{children:["Sign in to ",d," for yourself. Its tools show after the first sign-in."]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(k.f,{pending:`Opening ${d}…`,testId:"add-server-sign-in-start",children:["Sign in to ",d]}),(0,b.jsx)("a",{href:(0,y.f)((0,z.f)(d),a),className:j.x.secondary,children:"Later"})]})]})]})}a.s(["AddServer",0,function({fleetId:a,canSwitchTools:d}){let[g,h]=(0,c.useActionState)(f,{step:"address",fields:{}}),[i,j]=(0,c.useActionState)(e,{kind:"idle"}),[k,l]=(0,c.useState)(void 0),m="owner"===g.step&&k!==g.requestId?g: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"}),"added"===i.kind?(0,b.jsx)(B,{fleetId:a,name:i.name}):void 0===m?(0,b.jsx)(q,{state:g,action:h,fleetId:a}):(0,b.jsx)(x,{state:m,refused:i,action:j,onBack:()=>{l(m.requestId)},fleetId:a,canSwitchTools:d})]})}],29372)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3Aaf03cf%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3Aa9dc10%20%3Ctext/javascript%3E","../../../../../web/features/add-server/ui/address-step.tsx","../../../../../web/features/add-server/steps.ts","../../../../../web/features/add-server/ui/refused.tsx","../../../../../web/features/add-server/ui/steps.tsx","../../../../../web/features/add-server/ui/owner-step.tsx","../../../../../web/features/add-server/suggested-name.ts","../../../../../web/features/add-server/ui/tools-section.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/ui/sign-in-step.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { approveServer, checkServer } from '../actions';\nimport { AddressStep } from './address-step';\nimport { OwnerStep } from './owner-step';\nimport { SignInStep } from './sign-in-step';\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. A server\n * where each person signs in is added unchecked, then the approver signs in\n * to it for themselves (M1, decision 0067). Each button says at once that its\n * step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [approved, 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 {approved.kind === 'added' ? (\n <SignInStep fleetId={fleetId} name={approved.name} />\n ) : owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={approved} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6017da4704ef1e4dbcd358dccf1419a47cda9928b2\":{\"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(\"6017da4704ef1e4dbcd358dccf1419a47cda9928b2\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"603323a3622f7b8700ab5fb0828fbd34c064b0ea9d\":{\"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(\"603323a3622f7b8700ab5fb0828fbd34c064b0ea9d\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { addedCredentialKindOf, SIGN_IN_CREDENTIAL } from '../../forms/server-credential';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { stepsOf } from '../steps';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\n\n/**\n * The first step: the server's address and its credential, with the check's\n * refusal where it was refused. A server where each person signs in goes on\n * to its owner with Next, unchecked; any other is checked first.\n */\nexport function AddressStep({ state, action, fleetId }: { state: { fields: Readonly<Record<string, string>>; refusal?: string | undefined }; action: (form: FormData) => void; fleetId: string }) {\n const [kind, setKind] = useState(addedCredentialKindOf(state.fields.credentialKind ?? ''));\n const isSignIn = kind === SIGN_IN_CREDENTIAL.kind;\n return (\n <>\n <Steps names={stepsOf(kind)} at={0} />\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 <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" canEachPersonSignIn onKindChange={setKind} />\n <div>\n <SubmitButton pending={isSignIn ? 'Next…' : 'Checking the server…'} testId=\"add-server-check\">\n {isSignIn ? 'Next' : 'Check the server'}\n </SubmitButton>\n </div>\n </form>\n </>\n );\n}\n","/**\n * The steps of adding a server, as M1 numbers them. A server where each\n * person signs in has no tools to check before someone signs in, so the\n * gateway checks its sign-in when it is added, and the approver's own sign-in\n * comes last (decision 0067, Q15).\n */\nimport { SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../forms/server-credential';\n\nexport const CHECKED_STEPS = ['Address', 'Check', 'Owner'] as const;\n\nexport const SIGN_IN_STEPS = ['Address', 'Owner', 'Sign in'] as const;\n\n/** The steps for a server with this credential. */\nexport function stepsOf(kind: AddedCredentialKind): typeof CHECKED_STEPS | typeof SIGN_IN_STEPS {\n return kind === SIGN_IN_CREDENTIAL.kind ? SIGN_IN_STEPS : CHECKED_STEPS;\n}\n","import { Outcome } from '../../forms/ui/outcome';\n\n/** Why the API refused a step, said on that step; nothing while it was not refused. */\nexport function Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n","/** The steps of adding a server, as the design numbers them, the one at marked current. */\nexport function Steps({ names, at }: { names: readonly string[]; at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {names.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","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport type { AddServerState, ApproveState } from '../actions';\nimport { CHECKED_STEPS, SIGN_IN_STEPS } from '../steps';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\nimport { ToolsSection } from './tools-section';\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\n/**\n * The step that names the server's proxy ship and its owner, below the tools\n * the check answered. A server where each person signs in has no tools to\n * show yet: Add checks its sign-in, and says a refusal in place.\n */\nexport function OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\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 url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n const tools = state.tools;\n return (\n <>\n {tools === null ? <Steps names={SIGN_IN_STEPS} at={1} /> : <Steps names={CHECKED_STEPS} at={2} />}\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n {tools === null ? null : <ToolsSection tools={tools} canSwitch={canSwitchTools} />}\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&apos;s name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} 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 {tools === null ? <p className=\"text-muted-foreground\">Its tools show once someone signs in.</p> : null}\n <div className=\"flex gap-2\">\n <SubmitButton pending={tools === null ? 'Checking the sign-in…' : 'Adding…'} testId=\"add-server-approve\">\n {addButtonLabel(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","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport type { CheckedTool } from '../actions';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nexport function ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","'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 { inFleet } from '../../../lib/gateway-api/page-account';\nimport { partyPath } from '../../outside-parties/paths';\nimport { signInToParty } from '../../outside-party/actions';\nimport { SIGN_IN_STEPS } from '../steps';\nimport { Steps } from './steps';\n\n/**\n * The last step of adding a server where each person signs in: the\n * approver signs in to it for themselves, and their sign-in reads its tools\n * (Q15). Later goes to its page, where they sign in when they choose.\n */\nexport function SignInStep({ fleetId, name }: { fleetId: string; name: string }) {\n const [refused, signIn] = useActionState(signInToParty, IDLE);\n return (\n <>\n <Steps names={SIGN_IN_STEPS} at={2} />\n <form action={signIn} className={`${CARD} grid gap-3`} data-testid=\"add-server-sign-in\">\n <Outcome state={{ kind: 'done', message: `${name} is added.` }} />\n <Outcome state={refused} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"name\" value={name} />\n <p>Sign in to {name} for yourself. Its tools show after the first sign-in.</p>\n <div className=\"flex gap-2\">\n <SubmitButton pending={`Opening ${name}…`} testId=\"add-server-sign-in-start\">\n Sign in to {name}\n </SubmitButton>\n <a href={inFleet(partyPath(name), fleetId)} className={BUTTONS.secondary}>\n Later\n </a>\n </div>\n </form>\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3Af67749%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A2a803c%20%3Ctext/javascript%3E","../../../../../web/features/add-server/ui/address-step.tsx","../../../../../web/features/add-server/steps.ts","../../../../../web/features/add-server/ui/refused.tsx","../../../../../web/features/add-server/ui/steps.tsx","../../../../../web/features/add-server/ui/owner-step.tsx","../../../../../web/features/add-server/suggested-name.ts","../../../../../web/features/add-server/ui/tools-section.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/ui/sign-in-step.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { approveServer, checkServer } from '../actions';\nimport { AddressStep } from './address-step';\nimport { OwnerStep } from './owner-step';\nimport { SignInStep } from './sign-in-step';\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. A server\n * where each person signs in is added unchecked, then the approver signs in\n * to it for themselves (M1, decision 0067). Each button says at once that its\n * step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [approved, 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 {approved.kind === 'added' ? (\n <SignInStep fleetId={fleetId} name={approved.name} />\n ) : owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={approved} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"603c1c8bc58d771628bd6e97e00ea17b677893c09e\":{\"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(\"603c1c8bc58d771628bd6e97e00ea17b677893c09e\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"60d88dd4308d5d5dab2e7b91e11e99a312ec2cffe2\":{\"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(\"60d88dd4308d5d5dab2e7b91e11e99a312ec2cffe2\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { addedCredentialKindOf, SIGN_IN_CREDENTIAL } from '../../forms/server-credential';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { stepsOf } from '../steps';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\n\n/**\n * The first step: the server's address and its credential, with the check's\n * refusal where it was refused. A server where each person signs in goes on\n * to its owner with Next, unchecked; any other is checked first.\n */\nexport function AddressStep({ state, action, fleetId }: { state: { fields: Readonly<Record<string, string>>; refusal?: string | undefined }; action: (form: FormData) => void; fleetId: string }) {\n const [kind, setKind] = useState(addedCredentialKindOf(state.fields.credentialKind ?? ''));\n const isSignIn = kind === SIGN_IN_CREDENTIAL.kind;\n return (\n <>\n <Steps names={stepsOf(kind)} at={0} />\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 <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" canEachPersonSignIn onKindChange={setKind} />\n <div>\n <SubmitButton pending={isSignIn ? 'Next…' : 'Checking the server…'} testId=\"add-server-check\">\n {isSignIn ? 'Next' : 'Check the server'}\n </SubmitButton>\n </div>\n </form>\n </>\n );\n}\n","/**\n * The steps of adding a server, as M1 numbers them. A server where each\n * person signs in has no tools to check before someone signs in, so the\n * gateway checks its sign-in when it is added, and the approver's own sign-in\n * comes last (decision 0067, Q15).\n */\nimport { SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../forms/server-credential';\n\nexport const CHECKED_STEPS = ['Address', 'Check', 'Owner'] as const;\n\nexport const SIGN_IN_STEPS = ['Address', 'Owner', 'Sign in'] as const;\n\n/** The steps for a server with this credential. */\nexport function stepsOf(kind: AddedCredentialKind): typeof CHECKED_STEPS | typeof SIGN_IN_STEPS {\n return kind === SIGN_IN_CREDENTIAL.kind ? SIGN_IN_STEPS : CHECKED_STEPS;\n}\n","import { Outcome } from '../../forms/ui/outcome';\n\n/** Why the API refused a step, said on that step; nothing while it was not refused. */\nexport function Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n","/** The steps of adding a server, as the design numbers them, the one at marked current. */\nexport function Steps({ names, at }: { names: readonly string[]; at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {names.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","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport type { AddServerState, ApproveState } from '../actions';\nimport { CHECKED_STEPS, SIGN_IN_STEPS } from '../steps';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\nimport { ToolsSection } from './tools-section';\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\n/**\n * The step that names the server's proxy ship and its owner, below the tools\n * the check answered. A server where each person signs in has no tools to\n * show yet: Add checks its sign-in, and says a refusal in place.\n */\nexport function OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\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 url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n const tools = state.tools;\n return (\n <>\n {tools === null ? <Steps names={SIGN_IN_STEPS} at={1} /> : <Steps names={CHECKED_STEPS} at={2} />}\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n {tools === null ? null : <ToolsSection tools={tools} canSwitch={canSwitchTools} />}\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&apos;s name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} 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 {tools === null ? <p className=\"text-muted-foreground\">Its tools show once someone signs in.</p> : null}\n <div className=\"flex gap-2\">\n <SubmitButton pending={tools === null ? 'Checking the sign-in…' : 'Adding…'} testId=\"add-server-approve\">\n {addButtonLabel(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","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport type { CheckedTool } from '../actions';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nexport function ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","'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 { inFleet } from '../../../lib/gateway-api/page-account';\nimport { partyPath } from '../../outside-parties/paths';\nimport { signInToParty } from '../../outside-party/actions';\nimport { SIGN_IN_STEPS } from '../steps';\nimport { Steps } from './steps';\n\n/**\n * The last step of adding a server where each person signs in: the\n * approver signs in to it for themselves, and their sign-in reads its tools\n * (Q15). Later goes to its page, where they sign in when they choose.\n */\nexport function SignInStep({ fleetId, name }: { fleetId: string; name: string }) {\n const [refused, signIn] = useActionState(signInToParty, IDLE);\n return (\n <>\n <Steps names={SIGN_IN_STEPS} at={2} />\n <form action={signIn} className={`${CARD} grid gap-3`} data-testid=\"add-server-sign-in\">\n <Outcome state={{ kind: 'done', message: `${name} is added.` }} />\n <Outcome state={refused} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"name\" value={name} />\n <p>Sign in to {name} for yourself. Its tools show after the first sign-in.</p>\n <div className=\"flex gap-2\">\n <SubmitButton pending={`Opening ${name}…`} testId=\"add-server-sign-in-start\">\n Sign in to {name}\n </SubmitButton>\n <a href={inFleet(partyPath(name), fleetId)} className={BUTTONS.secondary}>\n Later\n </a>\n </div>\n </form>\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[43889,a=>{"use strict";var b,c,d=a.i(37936),e=a.i(29517),f=a.i(18558);a.i(70396);var g=a.i(73727),h=a.i(55476),i=a.i(66283),j=a.i(29493),k=a.i(49310),l=a.i(54757),l=l,m=l,n=l,o=a.i(27221),p=a.i(83931),q=a.i(26972),r=l,s=l,t=l,u=l,v=a.i(30174);let w=new TextEncoder;function x(a){return w.encode(a).byteLength}var m=l,y=a.i(89963),z=l,A=l,B=a.i(11365),n=l,l=l,m=l;let C=k.z.enum(["working","blocked","idle"]),D=`A note is one line of at most ${String(200)} characters`;new TextEncoder;let E=z.record(o.z.string(),A.json()),F=q.z.object({kind:o.z.string()}).catchall(A.json()),G=q.z.object({at:B.z.number(),of:B.z.number()});q.z.object({state:C,note:o.z.string().trim().max(200,D).refine(function(a){return!/[\r\n]/.test(a)},D).optional(),details:E.nullable().optional(),detailsPatch:E.nullable().optional(),task:F.nullable().optional(),step:G.nullable().optional()}).refine(a=>void 0===a.details||void 0===a.detailsPatch,{message:"Give details or detailsPatch, not both",path:["detailsPatch"]}),n.strictObject({});let H=q.z.object({state:C,note:o.z.string().nullable(),task:F.nullable(),taskView:q.z.object({canOpen:p.z.boolean(),fleetName:o.z.string().nullable()}).optional(),step:G.nullable(),reportedAt:l.iso.datetime(),reportChangedAt:l.iso.datetime(),detailsVersion:m.int().min(0)}).extend({details:E.nullable()});q.z.object({report:H.nullable(),previousCrew:H.nullable()});let I=k.z.enum(["crew-request-unassigned","delivery-unacknowledged","delivery-overdue","ping-unanswered","report-unchanged","task-not-done"]),J=l.iso.datetime({offset:!0}),K=m.int().min(1),L=n.strictObject({settingsVersion:m.int().min(1),minutes:K,reason:o.z.string().nullable()}),M=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),state:k.z.enum(["pending","received","handed"]),awaitingCrew:p.z.boolean(),minutes:K}),N=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),overdueEventId:(0,e.f)("event")}),O=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),minutes:K}),P=n.strictObject({reportChangedAt:J,state:k.z.enum(["working","blocked"]),minutes:K,setBy:(0,e.f)("ship")}),Q=n.strictObject({task:F,doneBy:J,setBy:(0,e.f)("ship")}),R=[q.z.object({signal:r.literal("crew-request-unassigned"),facts:L}),q.z.object({signal:r.literal("delivery-unacknowledged"),facts:M}),q.z.object({signal:r.literal("delivery-overdue"),facts:N}),q.z.object({signal:r.literal("ping-unanswered"),facts:O}),q.z.object({signal:r.literal("report-unchanged"),facts:P}),q.z.object({signal:r.literal("task-not-done"),facts:Q})],S=s.discriminatedUnion("signal",R);t.intersection(q.z.object({alertId:(0,e.f)("alert"),headline:o.z.string().min(1).max(80),body:o.z.string().refine(a=>2048>=x(a),`A body is at most ${String(2048)} bytes`),ship:q.z.object({id:(0,e.f)("ship"),name:o.z.string()}),fleetId:(0,e.f)("fleet"),toldAs:k.z.enum(["owner","setter"]),since:J,raisedAt:J}),S).refine(a=>8192>=x(JSON.stringify(a)),`An alert message is at most ${String(8192)} bytes`),q.z.object({shipId:(0,e.f)("ship"),signal:I,facts:u.union([L,M,N,O,P,Q]),occurrenceKey:o.z.string().min(1).max(200),since:J}).transform(({shipId:a,signal:b,facts:c,occurrenceKey:d,since:e},f)=>{let g=S.safeParse({signal:b,facts:c});return g.success?{shipId:a,occurrenceKey:d,since:e,...g.data}:(f.addIssue({code:"custom",message:"The facts are not the signal's",path:["facts"]}),v.z.NEVER)}),q.z.object({alertId:(0,e.f)("alert")});let T=k.z.enum(["cleared","retired"]),U=t.intersection(q.z.object({id:(0,e.f)("alert"),ship:q.z.object({id:(0,e.f)("ship"),name:o.z.string()}),occurrenceKey:o.z.string(),ownerShipId:(0,e.f)("ship").nullable(),since:l.iso.datetime(),raisedAt:l.iso.datetime(),cleared:q.z.object({at:l.iso.datetime(),why:T}).nullable()}),S);(b=(0,e.f)("alert"),q.z.object({cursor:b.optional(),limit:m.int().min(1).max(500).optional()})).optional(),c=(0,e.f)("alert"),q.z.object({items:y.z.array(U),nextCursor:c.nullable()});var m=l,V=l,u=l,l=l;function W(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let X=m.int().min(1),Y=o.z.string().min(1),Z=q.z.object({key:X,label:Y,detail:o.z.string().default("")}),$=q.z.object({id:V.uuid(),title:Y,context:o.z.string(),options:y.z.array(Z).min(1),pick:q.z.object({option:X,why:Y})}).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"]}),_=q.z.object({questionId:V.uuid()}),aa=q.z.object({questionId:V.uuid(),question:$}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});u.union([q.z.object({option:X,note:Y.optional()}),q.z.object({note:Y})]);let ab=u.union([q.z.object({questionId:V.uuid(),option:X,note:Y.optional()}),q.z.object({questionId:V.uuid(),note:Y})]),ac=q.z.object({messageId:(0,e.f)("message"),sentAt:l.iso.datetime(),option:X.nullable(),note:o.z.string().nullable()});function ad(a){try{return JSON.parse(a)}catch{return}}q.z.object({id:V.uuid(),title:o.z.string(),context:o.z.string(),options:y.z.array(Z),pick:q.z.object({option:X,why:o.z.string()}),answer:ac.nullable()});var ae=l;let af=q.z.object({title:o.z.string().min(1),why:o.z.string(),link:ae.url({protocol:/^https?$/}).optional()}),ag=new Set(["application/vnd.aeolus.alert+json","application/vnd.aeolus.notice+json"]),ah=q.z.object({body:o.z.string()});var ai=a.i(94705),aj=a.i(29660);async function ak(a,b){let c;try{c={isOk:!0,value:await b(await (0,i.z)(a))}}catch(c){let b=(0,i.U)(c);if("UNAUTHORIZED"===b)return(0,g.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${aj.P}?${new URLSearchParams({[h.n]:a}).toString()}`}).toString()}`);return{isOk:!1,message:void 0===b?"The gateway did not answer: try again in a moment":(0,i.s)(c)}}return(0,f.revalidatePath)(aj.P,"layout"),c}async function al(a,b){return ak(a,a=>a.people.record.query({cursor:b}))}async function am(a,b){return ak(a,async a=>{let{contentType:c,payload:d,meetingId:e,...f}=await a.people.open.mutate({deliveryId:b});return{...f,payload:d,body:function(a){let[b=""]=a.contentType.split(";");if(!ag.has(b.trim().toLowerCase()))return a.payload;try{return ah.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:c,payload:d}),question:function(a){if("application/vnd.aeolus.question+json"!==W(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===W(a)){let a=_.safeParse(ad(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===W(a)){let a=aa.safeParse(ad(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=$.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}({contentType:c,payload:d}),step:function(a){let[b=""]=a.contentType.split(";");if("application/vnd.aeolus.step+json"===b.trim().toLowerCase())try{let b=af.safeParse(JSON.parse(a.payload));if(!b.success)return;let{title:c,why:d,link:e}=b.data;return{title:c,why:d,link:void 0===e?void 0:{href:e,host:new URL(e).host}}}catch{return}}({contentType:c,payload:d}),meetingId:e??void 0}})}async function an({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=ab.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?ak(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function ao({fleet:a,deliveryId:b,option:c,note:d}){return ak(a,async a=>{await a.people.putInBasket.mutate({deliveryId:b,option:c,note:d})})}async function ap(a,b){return ak(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function aq(a){return ak(a,a=>a.people.sendBasket.mutate())}async function ar({fleet:a,deliveryId:b,step:c}){return ak(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function as({fleet:a,job:b,place:c,isOn:d}){return ak(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function at(a,b){return ak(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function au(a,b){return ak(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function av(a){return ak(a,async a=>{await a.slack.unlink.mutate()})}async function aw({fleet:a,requestId:b,input:c}){if("deny"===c.kind)return ak(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let d=(0,e.f)("ship").safeParse(c.ownerShipId.trim());if(!d.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:c.name,ownerShipId:d.data,scopes:[...new Set([...ai._,...c.scopes])]},{server:g}=c,h=void 0===g?void 0:(0,j.y)(g);return ak(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)([al,am,an,ao,ap,aq,ar,as,at,au,av,aw]),(0,d.registerServerReference)(al,"603b4af3b6ef322d88de132c92a8286173f7a791b6",null),(0,d.registerServerReference)(am,"6013ebd954e4b9b9c2c4a85c94c4fc1f4786952324",null),(0,d.registerServerReference)(an,"40edad5bc6caa482ec57bdf504a9545c453e286344",null),(0,d.registerServerReference)(ao,"408a5fadf58977f6b55557119e3557d884605ebbcf",null),(0,d.registerServerReference)(ap,"60573c940559fe36ec3489b04906d9407ddf5822ef",null),(0,d.registerServerReference)(aq,"40b44086e3707ca8b788d4ad4b3ef6615138ffe27a",null),(0,d.registerServerReference)(ar,"409343274cfb1997696f97d13e70128feeaadc81b0",null),(0,d.registerServerReference)(as,"40720a2e7f7a70673a75e3a4c0d8b553caf05d2f9f",null),(0,d.registerServerReference)(at,"60c97fa100defe2ce2abac96196c23f10c622fd02d",null),(0,d.registerServerReference)(au,"60eaa9c806d6593a0208abff2bc4d470472e235af0",null),(0,d.registerServerReference)(av,"40bc48a9fabe75ea0125a8969f993153e9f0a9f644",null),(0,d.registerServerReference)(aw,"4080e6f6510c124a1b0598c7303e7858de44a8b40b",null),a.s(["q",0,an,"Q",0,aw,"G",0,ar,"v",0,am,"y",0,ao,"F",0,al,"D",0,ap,"K",0,aq,"W",0,au,"z",0,at,"e",0,as,"Z",0,av],43889)}];
1
+ module.exports=[43889,a=>{"use strict";var b,c,d=a.i(37936),e=a.i(29517),f=a.i(18558);a.i(70396);var g=a.i(73727),h=a.i(55476),i=a.i(66283),j=a.i(29493),k=a.i(49310),l=a.i(54757),l=l,m=l,n=l,o=a.i(27221),p=a.i(83931),q=a.i(26972),r=l,s=l,t=l,u=l,v=a.i(30174);let w=new TextEncoder;function x(a){return w.encode(a).byteLength}var m=l,y=a.i(89963),z=l,A=l,B=a.i(11365),n=l,l=l,m=l;let C=k.z.enum(["working","blocked","idle"]),D=`A note is one line of at most ${String(200)} characters`;new TextEncoder;let E=z.record(o.z.string(),A.json()),F=q.z.object({kind:o.z.string()}).catchall(A.json()),G=q.z.object({at:B.z.number(),of:B.z.number()});q.z.object({state:C,note:o.z.string().trim().max(200,D).refine(function(a){return!/[\r\n]/.test(a)},D).optional(),details:E.nullable().optional(),detailsPatch:E.nullable().optional(),task:F.nullable().optional(),step:G.nullable().optional()}).refine(a=>void 0===a.details||void 0===a.detailsPatch,{message:"Give details or detailsPatch, not both",path:["detailsPatch"]}),n.strictObject({});let H=q.z.object({state:C,note:o.z.string().nullable(),task:F.nullable(),taskView:q.z.object({canOpen:p.z.boolean(),fleetName:o.z.string().nullable()}).optional(),step:G.nullable(),reportedAt:l.iso.datetime(),reportChangedAt:l.iso.datetime(),detailsVersion:m.int().min(0)}).extend({details:E.nullable()});q.z.object({report:H.nullable(),previousCrew:H.nullable()});let I=k.z.enum(["crew-request-unassigned","delivery-unacknowledged","delivery-overdue","ping-unanswered","report-unchanged","task-not-done"]),J=l.iso.datetime({offset:!0}),K=m.int().min(1),L=n.strictObject({settingsVersion:m.int().min(1),minutes:K,reason:o.z.string().nullable()}),M=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),state:k.z.enum(["pending","received","handed"]),awaitingCrew:p.z.boolean(),minutes:K}),N=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),overdueEventId:(0,e.f)("event")}),O=n.strictObject({deliveryId:(0,e.f)("delivery"),messageId:(0,e.f)("message"),minutes:K}),P=n.strictObject({reportChangedAt:J,state:k.z.enum(["working","blocked"]),minutes:K,setBy:(0,e.f)("ship")}),Q=n.strictObject({task:F,doneBy:J,setBy:(0,e.f)("ship")}),R=[q.z.object({signal:r.literal("crew-request-unassigned"),facts:L}),q.z.object({signal:r.literal("delivery-unacknowledged"),facts:M}),q.z.object({signal:r.literal("delivery-overdue"),facts:N}),q.z.object({signal:r.literal("ping-unanswered"),facts:O}),q.z.object({signal:r.literal("report-unchanged"),facts:P}),q.z.object({signal:r.literal("task-not-done"),facts:Q})],S=s.discriminatedUnion("signal",R);t.intersection(q.z.object({alertId:(0,e.f)("alert"),headline:o.z.string().min(1).max(80),body:o.z.string().refine(a=>2048>=x(a),`A body is at most ${String(2048)} bytes`),ship:q.z.object({id:(0,e.f)("ship"),name:o.z.string()}),fleetId:(0,e.f)("fleet"),toldAs:k.z.enum(["owner","setter"]),since:J,raisedAt:J}),S).refine(a=>8192>=x(JSON.stringify(a)),`An alert message is at most ${String(8192)} bytes`),q.z.object({shipId:(0,e.f)("ship"),signal:I,facts:u.union([L,M,N,O,P,Q]),occurrenceKey:o.z.string().min(1).max(200),since:J}).transform(({shipId:a,signal:b,facts:c,occurrenceKey:d,since:e},f)=>{let g=S.safeParse({signal:b,facts:c});return g.success?{shipId:a,occurrenceKey:d,since:e,...g.data}:(f.addIssue({code:"custom",message:"The facts are not the signal's",path:["facts"]}),v.z.NEVER)}),q.z.object({alertId:(0,e.f)("alert")});let T=k.z.enum(["cleared","retired"]),U=t.intersection(q.z.object({id:(0,e.f)("alert"),ship:q.z.object({id:(0,e.f)("ship"),name:o.z.string()}),occurrenceKey:o.z.string(),ownerShipId:(0,e.f)("ship").nullable(),since:l.iso.datetime(),raisedAt:l.iso.datetime(),cleared:q.z.object({at:l.iso.datetime(),why:T}).nullable()}),S);(b=(0,e.f)("alert"),q.z.object({cursor:b.optional(),limit:m.int().min(1).max(500).optional()})).optional(),c=(0,e.f)("alert"),q.z.object({items:y.z.array(U),nextCursor:c.nullable()});var m=l,V=l,u=l,l=l;function W(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let X=m.int().min(1),Y=o.z.string().min(1),Z=q.z.object({key:X,label:Y,detail:o.z.string().default("")}),$=q.z.object({id:V.uuid(),title:Y,context:o.z.string(),options:y.z.array(Z).min(1),pick:q.z.object({option:X,why:Y})}).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"]}),_=q.z.object({questionId:V.uuid()}),aa=q.z.object({questionId:V.uuid(),question:$}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});u.union([q.z.object({option:X,note:Y.optional()}),q.z.object({note:Y})]);let ab=u.union([q.z.object({questionId:V.uuid(),option:X,note:Y.optional()}),q.z.object({questionId:V.uuid(),note:Y})]),ac=q.z.object({messageId:(0,e.f)("message"),sentAt:l.iso.datetime(),option:X.nullable(),note:o.z.string().nullable()});function ad(a){try{return JSON.parse(a)}catch{return}}q.z.object({id:V.uuid(),title:o.z.string(),context:o.z.string(),options:y.z.array(Z),pick:q.z.object({option:X,why:o.z.string()}),answer:ac.nullable()});var ae=l;let af=q.z.object({title:o.z.string().min(1),why:o.z.string(),link:ae.url({protocol:/^https?$/}).optional()}),ag=new Set(["application/vnd.aeolus.alert+json","application/vnd.aeolus.notice+json"]),ah=q.z.object({body:o.z.string()});var ai=a.i(94705),aj=a.i(29660);async function ak(a,b){let c;try{c={isOk:!0,value:await b(await (0,i.z)(a))}}catch(c){let b=(0,i.U)(c);if("UNAUTHORIZED"===b)return(0,g.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${aj.P}?${new URLSearchParams({[h.n]:a}).toString()}`}).toString()}`);return{isOk:!1,message:void 0===b?"The gateway did not answer: try again in a moment":(0,i.s)(c)}}return(0,f.revalidatePath)(aj.P,"layout"),c}async function al(a,b){return ak(a,a=>a.people.record.query({cursor:b}))}async function am(a,b){return ak(a,async a=>{let{contentType:c,payload:d,meetingId:e,...f}=await a.people.open.mutate({deliveryId:b});return{...f,payload:d,body:function(a){let[b=""]=a.contentType.split(";");if(!ag.has(b.trim().toLowerCase()))return a.payload;try{return ah.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:c,payload:d}),question:function(a){if("application/vnd.aeolus.question+json"!==W(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===W(a)){let a=_.safeParse(ad(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===W(a)){let a=aa.safeParse(ad(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=$.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}({contentType:c,payload:d}),step:function(a){let[b=""]=a.contentType.split(";");if("application/vnd.aeolus.step+json"===b.trim().toLowerCase())try{let b=af.safeParse(JSON.parse(a.payload));if(!b.success)return;let{title:c,why:d,link:e}=b.data;return{title:c,why:d,link:void 0===e?void 0:{href:e,host:new URL(e).host}}}catch{return}}({contentType:c,payload:d}),meetingId:e??void 0}})}async function an({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=ab.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?ak(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function ao({fleet:a,deliveryId:b,option:c,note:d}){return ak(a,async a=>{await a.people.putInBasket.mutate({deliveryId:b,option:c,note:d})})}async function ap(a,b){return ak(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function aq(a){return ak(a,a=>a.people.sendBasket.mutate())}async function ar({fleet:a,deliveryId:b,step:c}){return ak(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function as({fleet:a,job:b,place:c,isOn:d}){return ak(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function at(a,b){return ak(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function au(a,b){return ak(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function av(a){return ak(a,async a=>{await a.slack.unlink.mutate()})}async function aw({fleet:a,requestId:b,input:c}){if("deny"===c.kind)return ak(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let d=(0,e.f)("ship").safeParse(c.ownerShipId.trim());if(!d.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:c.name,ownerShipId:d.data,scopes:[...new Set([...ai._,...c.scopes])]},{server:g}=c,h=void 0===g?void 0:(0,j.y)(g);return ak(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)([al,am,an,ao,ap,aq,ar,as,at,au,av,aw]),(0,d.registerServerReference)(al,"601621f5cf585bae9e540db5aa6e2c5d2a6bbcd72c",null),(0,d.registerServerReference)(am,"60c205c99f267754b5cb7b09118fdaf91f419555a5",null),(0,d.registerServerReference)(an,"40312d708ed123f3bff12a0e5d5ab7bdd456131901",null),(0,d.registerServerReference)(ao,"40c05f98915a7c9661aa8f801d392296ba8350eeba",null),(0,d.registerServerReference)(ap,"60cb932106ab7fdcbd18e33041be499ed83080592f",null),(0,d.registerServerReference)(aq,"407bae59090ef46e76fb8d952969288e5bb4583e21",null),(0,d.registerServerReference)(ar,"407cf7e8bf1a43e93e600808ccd1631dfd13c9b490",null),(0,d.registerServerReference)(as,"40d55047d0fa263dfb22afcf17c36e422f88773b7f",null),(0,d.registerServerReference)(at,"606869fb42c6cf9c02d918ac32cc0df0df992ce8e8",null),(0,d.registerServerReference)(au,"601545266cbcd00188699907a363d2d01cacdd7590",null),(0,d.registerServerReference)(av,"4068e0a012962959eed53cdc1898b8acfd21d81a71",null),(0,d.registerServerReference)(aw,"4013cfcec33d2651e37d34a8c0cd6f4b7e2f79d5b8",null),a.s(["q",0,an,"Q",0,aw,"G",0,ar,"v",0,am,"y",0,ao,"F",0,al,"D",0,ap,"K",0,aq,"W",0,au,"z",0,at,"e",0,as,"Z",0,av],43889)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js.map