@aeolus-fleet/gateway 0.38.0 → 0.38.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/trpc/router.d.ts +10 -0
  3. package/dist/adapters/trpc/router.js +2 -0
  4. package/dist/adapters/trpc/router.js.map +1 -1
  5. package/dist/app.js +2 -0
  6. package/dist/app.js.map +1 -1
  7. package/dist/core/people/read-item.d.ts +31 -0
  8. package/dist/core/people/read-item.js +77 -0
  9. package/dist/core/people/read-item.js.map +1 -0
  10. package/package.json +7 -1
  11. package/web/.next/BUILD_ID +1 -1
  12. package/web/.next/build-manifest.json +3 -3
  13. package/web/.next/diagnostics/route-bundle-stats.json +65 -65
  14. package/web/.next/fallback-build-manifest.json +3 -3
  15. package/web/.next/prerender-manifest.json +3 -3
  16. package/web/.next/server/app/(bridge)/bridge/basket/page/server-reference-manifest.json +10 -10
  17. package/web/.next/server/app/(bridge)/bridge/basket/page.js +5 -4
  18. package/web/.next/server/app/(bridge)/bridge/basket/page.js.nft.json +1 -1
  19. package/web/.next/server/app/(bridge)/bridge/basket/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(bridge)/bridge/done/page/server-reference-manifest.json +4 -4
  21. package/web/.next/server/app/(bridge)/bridge/done/page.js +6 -5
  22. package/web/.next/server/app/(bridge)/bridge/done/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(bridge)/bridge/done/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(bridge)/bridge/fleet/page/server-reference-manifest.json +3 -3
  25. package/web/.next/server/app/(bridge)/bridge/fleet/page.js +5 -4
  26. package/web/.next/server/app/(bridge)/bridge/fleet/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(bridge)/bridge/fleet/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(bridge)/bridge/messages/page/server-reference-manifest.json +11 -11
  29. package/web/.next/server/app/(bridge)/bridge/messages/page.js +5 -4
  30. package/web/.next/server/app/(bridge)/bridge/messages/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(bridge)/bridge/messages/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(bridge)/bridge/page/server-reference-manifest.json +10 -10
  33. package/web/.next/server/app/(bridge)/bridge/page.js +5 -4
  34. package/web/.next/server/app/(bridge)/bridge/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(bridge)/bridge/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(bridge)/bridge/settings/page/server-reference-manifest.json +3 -3
  37. package/web/.next/server/app/(bridge)/bridge/settings/page.js +5 -4
  38. package/web/.next/server/app/(bridge)/bridge/settings/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(bridge)/bridge/settings/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +4 -4
  41. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page.js +5 -4
  42. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(bridge)/bridge/settings/routing/page/server-reference-manifest.json +7 -7
  45. package/web/.next/server/app/(bridge)/bridge/settings/routing/page.js +5 -4
  46. package/web/.next/server/app/(bridge)/bridge/settings/routing/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(bridge)/bridge/settings/routing/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(bridge)/bridge/stay-aware/page/server-reference-manifest.json +10 -10
  49. package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js +5 -4
  50. package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(bridge)/bridge/stay-aware/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page/server-reference-manifest.json +17 -17
  53. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page.js +5 -4
  54. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(bridge)/outside-parties/[name]/page/server-reference-manifest.json +10 -10
  57. package/web/.next/server/app/(bridge)/outside-parties/[name]/page.js +5 -4
  58. package/web/.next/server/app/(bridge)/outside-parties/[name]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(bridge)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page/server-reference-manifest.json +17 -17
  61. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page.js +5 -4
  62. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(bridge)/outside-parties/add/page/server-reference-manifest.json +12 -12
  65. package/web/.next/server/app/(bridge)/outside-parties/add/page.js +5 -4
  66. package/web/.next/server/app/(bridge)/outside-parties/add/page.js.nft.json +1 -1
  67. package/web/.next/server/app/(bridge)/outside-parties/add/page_client-reference-manifest.js +1 -1
  68. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +4 -4
  69. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page.js +5 -4
  70. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page/server-reference-manifest.json +4 -4
  73. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page.js +5 -4
  74. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(bridge)/outside-parties/page/server-reference-manifest.json +4 -4
  77. package/web/.next/server/app/(bridge)/outside-parties/page.js +5 -4
  78. package/web/.next/server/app/(bridge)/outside-parties/page.js.nft.json +1 -1
  79. package/web/.next/server/app/(bridge)/outside-parties/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  81. package/web/.next/server/app/(console)/gateway-off/page.js +1 -1
  82. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  85. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +1 -1
  86. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  87. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  88. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
  89. package/web/.next/server/app/(console)/parties/page.js +1 -1
  90. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  91. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  93. package/web/.next/server/app/(console)/sign-in/failed/page.js +1 -1
  94. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  95. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +11 -11
  97. package/web/.next/server/app/(console)/slack/disconnect/page.js +1 -1
  98. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
  99. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +11 -11
  101. package/web/.next/server/app/(console)/slack/expose/page.js +3 -3
  102. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
  103. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +11 -11
  105. package/web/.next/server/app/(console)/slack/page.js +1 -1
  106. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
  107. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
  108. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +11 -11
  109. package/web/.next/server/app/(console)/slack/remove/page.js +1 -1
  110. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
  111. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
  112. package/web/.next/server/app/_global-error.html +1 -1
  113. package/web/.next/server/app/_global-error.rsc +1 -1
  114. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  115. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  116. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  117. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  118. package/web/.next/server/app/_not-found/page.js +1 -1
  119. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  120. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  121. package/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
  122. package/web/.next/server/app/apple-icon.png.body +0 -0
  123. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  124. package/web/.next/server/app/authorize/failed/page.js +1 -1
  125. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  126. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  127. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  128. package/web/.next/server/app/authorize/pick/page.js +1 -1
  129. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  130. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  132. package/web/.next/server/app/authorize/waiting/approval/page.js +1 -1
  133. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  134. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  135. package/web/.next/server/app/icon.svg/route.js.nft.json +1 -1
  136. package/web/.next/server/app/icon.svg.body +1 -19
  137. package/web/.next/server/chunks/_0xw0b7avhvg75._.js +1 -1
  138. package/web/.next/server/chunks/_0xw0b7avhvg75._.js.map +1 -1
  139. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +1 -1
  140. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js.map +1 -1
  141. package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js +1 -1
  142. package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_messages_page_actions_1tg2-lw0i6g9l.js +1 -1
  144. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_messages_page_actions_1tg2-lw0i6g9l.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js +1 -1
  146. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js +1 -1
  148. package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js +1 -1
  150. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js +1 -1
  152. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js +1 -1
  154. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js +1 -1
  156. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js +1 -1
  158. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js.map +1 -1
  159. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js +1 -1
  160. package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js.map +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-h3ug3wdr27n._.js +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-h3ug3wdr27n._.js.map +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__03xkymn2kbk1v._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__03xkymn2kbk1v._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__04g-10_lwy-l2._.js +1 -1
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__06nuuvz8l91mm._.js +10 -0
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__06nuuvz8l91mm._.js.map +1 -0
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js.map +1 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js.map +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fujyqtfujrz5._.js +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fujyqtfujrz5._.js.map +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__0gy9anoap9qnn._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__0gy9anoap9qnn._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js +1 -1
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js.map +1 -1
  180. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ibcjk97mwv4x._.js +1 -1
  181. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ibcjk97mwv4x._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js +1 -1
  183. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-5_al3xk509._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js +1 -1
  185. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/[root-of-the-server]__0khxo9vhpo7sr._.js +1 -1
  187. package/web/.next/server/chunks/ssr/[root-of-the-server]__0khxo9vhpo7sr._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lz_zcfd17a39._.js +1 -1
  189. package/web/.next/server/chunks/ssr/[root-of-the-server]__0lz_zcfd17a39._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n-egt7194u1g._.js +1 -1
  191. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n-egt7194u1g._.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js +1 -1
  193. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js +1 -1
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js.map +1 -1
  196. package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js +1 -1
  197. package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js.map +1 -1
  198. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  199. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js +1 -1
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a-kyppd8dwmc._.js +1 -1
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a-kyppd8dwmc._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__1iqxg48po42ig._.js +1 -1
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__1iqxg48po42ig._.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k8mb42yj44l0._.js +1 -1
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k8mb42yj44l0._.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js +1 -1
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__1l_ua7k9ape55._.js +1 -1
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__1l_ua7k9ape55._.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js +1 -1
  213. package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +1 -1
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js +1 -1
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vrtfw4dxnfxt._.js +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/{_0no4kkaie8a0y._.js → _0-785idcov4j4._.js} +2 -2
  222. package/web/.next/server/chunks/ssr/{_0no4kkaie8a0y._.js.map → _0-785idcov4j4._.js.map} +1 -1
  223. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  224. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  225. package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js +1 -1
  226. package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/_0fqd23gyia_8g._.js +1 -1
  228. package/web/.next/server/chunks/ssr/_0fqd23gyia_8g._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  230. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/{_0u-5l6op7xjh0._.js → _0nh9w3mh82f53._.js} +2 -2
  232. package/web/.next/server/chunks/ssr/{_0u-5l6op7xjh0._.js.map → _0nh9w3mh82f53._.js.map} +1 -1
  233. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  234. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  236. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  237. package/web/.next/server/chunks/ssr/{_0dnp_nxhcy1tk._.js → _17pnprd-0lxai._.js} +2 -2
  238. package/web/.next/server/chunks/ssr/{_14unkhmeoxqym._.js.map → _17pnprd-0lxai._.js.map} +1 -1
  239. package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js +1 -1
  240. package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js.map +1 -1
  241. package/web/.next/server/chunks/ssr/_1cxulh-x54r6v._.js +3 -0
  242. package/web/.next/server/chunks/ssr/{_1h28qsfbdt-ph._.js.map → _1cxulh-x54r6v._.js.map} +1 -1
  243. package/web/.next/server/chunks/ssr/_1j80let80btdj._.js +3 -0
  244. package/web/.next/server/chunks/ssr/{_1o4xyxozurta7._.js.map → _1j80let80btdj._.js.map} +1 -1
  245. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  246. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/{_14unkhmeoxqym._.js → _1q5o7l5d6r_f5._.js} +2 -2
  248. package/web/.next/server/chunks/ssr/{_0dnp_nxhcy1tk._.js.map → _1q5o7l5d6r_f5._.js.map} +1 -1
  249. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  250. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/_1unzgziqo0j03._.js +57 -0
  252. package/web/.next/server/chunks/ssr/_1unzgziqo0j03._.js.map +1 -0
  253. package/web/.next/server/chunks/ssr/_1yy6lx5ur8mbz._.js +57 -0
  254. package/web/.next/server/chunks/ssr/_1yy6lx5ur8mbz._.js.map +1 -0
  255. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_01dhlues8c7ml.js +3 -0
  256. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_01dhlues8c7ml.js.map +1 -0
  257. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07y8ae2h21f9p.js +3 -0
  258. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_07y8ae2h21f9p.js.map +1 -0
  259. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08d89iicdayuk.js +3 -0
  260. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08d89iicdayuk.js.map +1 -0
  261. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08sinhjbj9agz.js +3 -0
  262. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08sinhjbj9agz.js.map +1 -0
  263. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0b2haj8_y8lu_.js +3 -0
  264. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0b2haj8_y8lu_.js.map +1 -0
  265. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0me2jx2fwv_8c.js +3 -0
  266. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0me2jx2fwv_8c.js.map +1 -0
  267. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xxc4eq32ewk5.js +3 -0
  268. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xxc4eq32ewk5.js.map +1 -0
  269. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1klryi6-w9ur5.js +3 -0
  270. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1klryi6-w9ur5.js.map +1 -0
  271. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1lo_i86tv4z-6.js +3 -0
  272. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1lo_i86tv4z-6.js.map +1 -0
  273. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qmlbi4q1-6b7.js +3 -0
  274. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qmlbi4q1-6b7.js.map +1 -0
  275. package/web/.next/server/chunks/ssr/{node_modules_next_dist_esm_build_templates_app-page_0g15rgn4n-oiz.js → node_modules_next_dist_esm_build_templates_app-page_1rw6ik0j23aki.js} +2 -2
  276. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1rw6ik0j23aki.js.map +1 -0
  277. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t0a0nkq0woc8.js +3 -0
  278. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1t0a0nkq0woc8.js.map +1 -0
  279. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1unw2j3tp34id.js +3 -0
  280. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1unw2j3tp34id.js.map +1 -0
  281. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uzkkryl0w9c4.js +3 -0
  282. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uzkkryl0w9c4.js.map +1 -0
  283. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wl_71f8j6j_8.js +3 -0
  284. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1wl_71f8j6j_8.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z7pcoxf6w70s.js +3 -0
  286. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z7pcoxf6w70s.js.map +1 -0
  287. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js +1 -1
  288. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/web_00r-wf_2cxh1v._.js +1 -1
  290. package/web/.next/server/chunks/ssr/web_00r-wf_2cxh1v._.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/web_03d5ej1xq-7uh._.js +3 -0
  292. package/web/.next/server/chunks/ssr/web_03d5ej1xq-7uh._.js.map +1 -0
  293. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js +1 -1
  294. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js.map +1 -1
  295. package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js +1 -1
  296. package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/web_0cxcy088wnfmw._.js +1 -1
  298. package/web/.next/server/chunks/ssr/web_0cxcy088wnfmw._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/web_0oz8bypfxh82g._.js +1 -1
  300. package/web/.next/server/chunks/ssr/web_0oz8bypfxh82g._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/web_0pk41f5m34jvi._.js +1 -1
  302. package/web/.next/server/chunks/ssr/web_0pk41f5m34jvi._.js.map +1 -1
  303. package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js +1 -1
  304. package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js.map +1 -1
  305. package/web/.next/server/chunks/ssr/web_0zxufwo8cd7v3._.js +1 -1
  306. package/web/.next/server/chunks/ssr/web_0zxufwo8cd7v3._.js.map +1 -1
  307. package/web/.next/server/chunks/ssr/web_1rmcjkj1pjylk._.js +1 -1
  308. package/web/.next/server/chunks/ssr/web_1rmcjkj1pjylk._.js.map +1 -1
  309. package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js +1 -1
  310. package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js.map +1 -1
  311. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js +1 -1
  312. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js.map +1 -1
  313. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js +1 -1
  314. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js.map +1 -1
  315. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js +1 -1
  316. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js.map +1 -1
  317. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js +1 -1
  318. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js.map +1 -1
  319. package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_settings_page_tsx_1z5yr8ss25q7n._.js +1 -1
  320. package/web/.next/server/chunks/ssr/web_app_(bridge)_bridge_settings_page_tsx_1z5yr8ss25q7n._.js.map +1 -1
  321. package/web/.next/server/chunks/ssr/web_app_(bridge)_layout_tsx_0io-giu9m2p0z._.js +3 -0
  322. package/web/.next/server/chunks/ssr/web_app_(bridge)_layout_tsx_0io-giu9m2p0z._.js.map +1 -0
  323. package/web/.next/server/chunks/ssr/web_app_(bridge)_outside-parties_[name]_change_page_tsx_15monuoxw-kse._.js +1 -1
  324. package/web/.next/server/chunks/ssr/web_app_(bridge)_outside-parties_[name]_change_page_tsx_15monuoxw-kse._.js.map +1 -1
  325. package/web/.next/server/chunks/ssr/web_app_(bridge)_outside-parties_[name]_retire_page_tsx_0pljqvw60fh7t._.js +1 -1
  326. package/web/.next/server/chunks/ssr/web_app_(bridge)_outside-parties_[name]_retire_page_tsx_0pljqvw60fh7t._.js.map +1 -1
  327. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +1 -1
  328. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -1
  329. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js +1 -1
  330. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js.map +1 -1
  331. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js +1 -1
  332. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js.map +1 -1
  333. package/web/.next/server/chunks/ssr/{web_features_16hw9h4_xwpao._.js → web_features_1kv2-nwrqcvkb._.js} +2 -2
  334. package/web/.next/server/chunks/ssr/{web_features_16hw9h4_xwpao._.js.map → web_features_1kv2-nwrqcvkb._.js.map} +1 -1
  335. package/web/.next/server/chunks/ssr/{web_features_1hnchp2y9ily-._.js → web_features_1ldqjm-0yawn-._.js} +2 -2
  336. package/web/.next/server/chunks/ssr/{web_features_1hnchp2y9ily-._.js.map → web_features_1ldqjm-0yawn-._.js.map} +1 -1
  337. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  338. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  339. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  340. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  341. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  342. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  343. package/web/.next/server/chunks/ssr/{web_features_bridge_03kikxozygua1._.js → web_features_bridge_1kjza9vdof095._.js} +2 -2
  344. package/web/.next/server/chunks/ssr/{web_features_bridge_03kikxozygua1._.js.map → web_features_bridge_1kjza9vdof095._.js.map} +1 -1
  345. package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +1 -1
  346. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +1 -1
  347. package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -1
  348. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +1 -1
  349. package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -1
  350. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +1 -1
  351. package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -1
  352. package/web/.next/server/chunks/ssr/web_features_bridge_state_message-rows_tsx_1ky4-xa4az_yu._.js +1 -1
  353. package/web/.next/server/chunks/ssr/web_features_bridge_state_message-rows_tsx_1ky4-xa4az_yu._.js.map +1 -1
  354. package/web/.next/server/chunks/ssr/web_features_bridge_state_messages-panel_tsx_1yvr_ww639d25._.js +1 -1
  355. package/web/.next/server/chunks/ssr/web_features_bridge_state_messages-panel_tsx_1yvr_ww639d25._.js.map +1 -1
  356. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  357. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  358. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  359. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  360. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  361. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  362. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
  363. package/web/.next/server/middleware-build-manifest.js +3 -3
  364. package/web/.next/server/pages/500.html +1 -1
  365. package/web/.next/server/preview-props.json +3 -3
  366. package/web/.next/server/server-reference-manifest.js +1 -1
  367. package/web/.next/server/server-reference-manifest.json +53 -53
  368. package/web/.next/static/chunks/{09y_kqg5jr2to.js → 0d9nwi_5jtx1s.js} +1 -1
  369. package/web/.next/static/chunks/{0j8ndrgty645i.js → 0mgpgj4c1qyd-.js} +1 -1
  370. package/web/.next/static/chunks/{1y32oubd_6md2.js → 0r0gremjx2f00.js} +1 -1
  371. package/web/.next/static/chunks/{0qynje165r8pk.js → 0u8l5qlnqqouz.js} +1 -1
  372. package/web/.next/static/chunks/{1n5114efmpzm8.js → 1-fz8siz2ll12.js} +1 -1
  373. package/web/.next/static/chunks/{3_5r6ivx93es-.js → 1gws30z-w_b5u.js} +1 -1
  374. package/web/.next/static/chunks/{31bq1uh9ulaeu.js → 1l7xdbkkzyg84.js} +1 -1
  375. package/web/.next/static/chunks/{0l4t9n_wkfvga.js → 1qk1rg1nlwibf.js} +1 -1
  376. package/web/.next/static/chunks/{0n99u0tboun9p.js → 1y0i5sfbser7m.js} +1 -1
  377. package/web/.next/static/chunks/{1x87y_kcnt2cq.js → 2bwa_vmicucp7.js} +1 -1
  378. package/web/.next/static/chunks/{0tfn6_lm7dz7s.js → 2h_eln166j2qm.js} +1 -1
  379. package/web/.next/static/chunks/{0scfm0b6ozb25.js → 2uyfitze_si6t.js} +1 -1
  380. package/web/.next/static/chunks/{3azyb0n45b1y9.js → 2xewn4wc6-r89.js} +1 -1
  381. package/web/.next/static/chunks/{1qm1btwpwf1ih.js → 2zy50m3u0ncal.js} +1 -1
  382. package/web/.next/static/chunks/{1vuekfthkmjng.js → 363hplgln_a8l.js} +1 -1
  383. package/web/.next/static/chunks/{0_wc_d56c40gm.js → 3_pcw5v326or4.js} +1 -1
  384. package/web/.next/static/chunks/{0ft62462m_rg0.js → 3jmofkmbej71o.js} +1 -1
  385. package/web/.next/static/chunks/{3jczm4mvyshsf.js → 3qx9pxz84tr19.js} +1 -1
  386. package/web/.next/static/chunks/{0g07rkq-36dl0.js → 3vslm1-mw-xs2.js} +1 -1
  387. package/web/.next/static/media/apple-icon.3r3-hvwfcl7n_.png +0 -0
  388. package/web/.next/static/media/icon.1btn_u3uez_sn.svg +1 -0
  389. package/web/.next/trace +1 -1
  390. package/web/.next/trace-build +1 -1
  391. package/web/.next/types/validator.ts +17 -0
  392. package/web/.next/server/chunks/ssr/[root-of-the-server]__0grpi5wnl9ppf._.js +0 -10
  393. package/web/.next/server/chunks/ssr/[root-of-the-server]__0grpi5wnl9ppf._.js.map +0 -1
  394. package/web/.next/server/chunks/ssr/_16v-4haxv-0-o._.js +0 -57
  395. package/web/.next/server/chunks/ssr/_16v-4haxv-0-o._.js.map +0 -1
  396. package/web/.next/server/chunks/ssr/_1h28qsfbdt-ph._.js +0 -3
  397. package/web/.next/server/chunks/ssr/_1o4xyxozurta7._.js +0 -3
  398. package/web/.next/server/chunks/ssr/_1yl6jrimy685b._.js +0 -57
  399. package/web/.next/server/chunks/ssr/_1yl6jrimy685b._.js.map +0 -1
  400. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02s6inh4usc9k.js +0 -3
  401. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02s6inh4usc9k.js.map +0 -1
  402. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ad4b2lkk31jj.js +0 -3
  403. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ad4b2lkk31jj.js.map +0 -1
  404. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ergh-a6r7yu_.js +0 -3
  405. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ergh-a6r7yu_.js.map +0 -1
  406. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0g15rgn4n-oiz.js.map +0 -1
  407. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0hzwtyh-646p2.js +0 -3
  408. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0hzwtyh-646p2.js.map +0 -1
  409. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mm8dt8tws1fz.js +0 -3
  410. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mm8dt8tws1fz.js.map +0 -1
  411. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tcy7phl8a4gj.js +0 -3
  412. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tcy7phl8a4gj.js.map +0 -1
  413. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vfjfe4aq6spg.js +0 -3
  414. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0vfjfe4aq6spg.js.map +0 -1
  415. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0yv3l9ohiylc6.js +0 -3
  416. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0yv3l9ohiylc6.js.map +0 -1
  417. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-wfs2n5p56lo.js +0 -3
  418. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-wfs2n5p56lo.js.map +0 -1
  419. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11x159_oszki3.js +0 -3
  420. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11x159_oszki3.js.map +0 -1
  421. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7q9sxgla_vx.js +0 -3
  422. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7q9sxgla_vx.js.map +0 -1
  423. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dcjexx9b9waj.js +0 -3
  424. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dcjexx9b9waj.js.map +0 -1
  425. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dltrn6ii5dd6.js +0 -3
  426. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1dltrn6ii5dd6.js.map +0 -1
  427. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1hm1iu016c1fy.js +0 -3
  428. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1hm1iu016c1fy.js.map +0 -1
  429. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1zaoeyy4_vir_.js +0 -3
  430. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1zaoeyy4_vir_.js.map +0 -1
  431. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js +0 -3
  432. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js.map +0 -1
  433. package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
  434. package/web/.next/static/media/icon.1o2ogor9e8-fc.svg +0 -19
  435. /package/web/.next/static/{6etIIH3qFw-_kdbaUFERx → EmsE5wPdK7fJYQ7DzIz5z}/_buildManifest.js +0 -0
  436. /package/web/.next/static/{6etIIH3qFw-_kdbaUFERx → EmsE5wPdK7fJYQ7DzIz5z}/_clientMiddlewareManifest.js +0 -0
  437. /package/web/.next/static/{6etIIH3qFw-_kdbaUFERx → EmsE5wPdK7fJYQ7DzIz5z}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[97856,a=>{"use strict";var b=a.i(70043),c=a.i(43889);a.S([b,"40ab6bd38f893b947ce7425fb23bd3633b32ea7611,f",0,c,"4044bf5bb9d6e6852f8d646440f2b46c84691dfa43,W,406b64d12f37e11257296fd02472b6235285833e86,u,409c34adee72021f06a58d16b1ddd888d8153285a0,e,40a063a0888116f6fe87ec56db167344aea3de800d,y,40dc940782447fa774ade2cbd00f4f5bb7677a387c,q,40f7d239d4fa7db323b65eee64b38f84dd04f23c94,G,40ff8c223183f5fdfbbfad905ca34303c8e9d37ad8,X,6094f8831475d7ac21d1dc317952b7d23d22a8110e,v,60d2401f70d2510a8be450676693583f551f140dd6,D"],97856)}];
1
+ module.exports=[97856,a=>{"use strict";var b=a.i(70043),c=a.i(43889);a.S([b,"406e70c54d0df55ecef3263e68bd02259fd622902e,f",0,c,"40573cbebd681c98d6ee072fae41d887c1642f6ab4,e,405a8ff8ea3531b360a7e24e4f24204c43124766f4,u,405f92098d95e14188d3c2e2058e1b73d6468d725b,y,40ad18ec34752337ffe6053724250396ebd972f1f0,X,40d1b5efb67059d5ee812d8865798359fb723fb4e4,G,40d6d035364bed586c26cd7d80196b6f40cc3ed5af,W,40db7d83ab9618e36e567bcf66243a9a52614c933c,q,602390e5d7f0d17092beab792cafdd485bfb28d868,v,60805144861012c3c1c5af3c3730c5ad189ec00cb2,D"],97856)}];
2
2
 
3
3
  //# sourceMappingURL=web__next-internal_server_app_%28bridge%29_bridge_page_actions_1ok64rg3edm_u.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/.next-internal/server/app/%28bridge%29/bridge/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {setTheme as '40ab6bd38f893b947ce7425fb23bd3633b32ea7611'} from 'ACTIONS_MODULE0'\nexport {readSendTo as '409c34adee72021f06a58d16b1ddd888d8153285a0'} from 'ACTIONS_MODULE1'\nexport {sendShipMessage as '406b64d12f37e11257296fd02472b6235285833e86'} from 'ACTIONS_MODULE1'\nexport {answerDelivery as '40dc940782447fa774ade2cbd00f4f5bb7677a387c'} from 'ACTIONS_MODULE1'\nexport {doneDelivery as '40f7d239d4fa7db323b65eee64b38f84dd04f23c94'} from 'ACTIONS_MODULE1'\nexport {openDelivery as '6094f8831475d7ac21d1dc317952b7d23d22a8110e'} from 'ACTIONS_MODULE1'\nexport {putInBasket as '40a063a0888116f6fe87ec56db167344aea3de800d'} from 'ACTIONS_MODULE1'\nexport {putPickInBasket as '4044bf5bb9d6e6852f8d646440f2b46c84691dfa43'} from 'ACTIONS_MODULE1'\nexport {removeFromBasket as '60d2401f70d2510a8be450676693583f551f140dd6'} from 'ACTIONS_MODULE1'\nexport {doneMessage as '40ff8c223183f5fdfbbfad905ca34303c8e9d37ad8'} from 'ACTIONS_MODULE1'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"sources":["../../../../../web/.next-internal/server/app/%28bridge%29/bridge/page/actions.js%20%28server%20actions%20loader%29"],"sourcesContent":["export {setTheme as '406e70c54d0df55ecef3263e68bd02259fd622902e'} from 'ACTIONS_MODULE0'\nexport {readSendTo as '40573cbebd681c98d6ee072fae41d887c1642f6ab4'} from 'ACTIONS_MODULE1'\nexport {sendShipMessage as '405a8ff8ea3531b360a7e24e4f24204c43124766f4'} from 'ACTIONS_MODULE1'\nexport {answerDelivery as '40db7d83ab9618e36e567bcf66243a9a52614c933c'} from 'ACTIONS_MODULE1'\nexport {doneDelivery as '40d1b5efb67059d5ee812d8865798359fb723fb4e4'} from 'ACTIONS_MODULE1'\nexport {openDelivery as '602390e5d7f0d17092beab792cafdd485bfb28d868'} from 'ACTIONS_MODULE1'\nexport {putInBasket as '405f92098d95e14188d3c2e2058e1b73d6468d725b'} from 'ACTIONS_MODULE1'\nexport {putPickInBasket as '40d6d035364bed586c26cd7d80196b6f40cc3ed5af'} from 'ACTIONS_MODULE1'\nexport {removeFromBasket as '60805144861012c3c1c5af3c3730c5ad189ec00cb2'} from 'ACTIONS_MODULE1'\nexport {doneMessage as '40ad18ec34752337ffe6053724250396ebd972f1f0'} from 'ACTIONS_MODULE1'\n"],"names":[],"mappings":"uCAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA"}
@@ -1,3 +1,3 @@
1
- module.exports=[79465,a=>{"use strict";var b=a.i(7997),c=a.i(717),d=a.i(66283),e=a.i(88276),f=a.i(55476),g=a.i(29660),h=a.i(36554),i=a.i(38936),j=a.i(50919),k=a.i(18734);let l={approve:"You approved the request.",deny:"You denied the request."};async function m({api:a,fleetId:c}){let{toDecide:d,mine:f}=await (0,e.n)(a),h=new Date;return(0,b.jsxs)(b.Fragment,{children:[void 0===d?null:0===d.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No request waits for a decision."}):(0,b.jsx)(k.f,{title:"To decide",requests:d,now:h,hrefOf:a=>`${g.T}/requests/${encodeURIComponent(a.requestId)}?fleet=${encodeURIComponent(c)}`}),void 0===f||0===f.length?null:(0,b.jsx)(k.f,{title:"Your requests",requests:f,now:h})]})}async function n({searchParams:a}){let e=await (0,d._)({path:g.T,searchParams:a});if("noSignIn"===e.kind)return(0,b.jsx)(h.L,{});let{decided:k}=a,o="string"==typeof k?l[k]:void 0;return(0,b.jsx)(h.n,{api:e.api,fleetId:e.fleetId,screen:"settings",children:(0,b.jsxs)("div",{className:"grid gap-6",children:[(0,b.jsx)("h1",{className:"text-heading font-semibold",children:"Settings"}),(0,b.jsxs)("a",{href:(0,f.i)(g.j,e.fleetId),"data-testid":"bridge-settings-routing",className:"flex flex-col rounded-md border border-border bg-card p-3 hover:bg-accent",children:[(0,b.jsx)("span",{children:"Where things show"}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"Per job, Slack, a chat, web push and email besides Bridge."})]}),void 0===o?null:(0,b.jsx)(j.f,{message:o,isFailure:!1}),(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)(i.f,{}),children:(0,b.jsx)(m,{api:e.api,fleetId:e.fleetId})})]})})}async function o({searchParams:a}){return(0,b.jsx)(n,{searchParams:await a})}a.s(["default",0,o,"metadata",0,{title:"Bridge settings"}],79465)},4196,function(a){a.n(a.i(79465))}];
1
+ module.exports=[79465,a=>{"use strict";var b=a.i(7997),c=a.i(717),d=a.i(66283),e=a.i(88276),f=a.i(55476),g=a.i(29660),h=a.i(36554),i=a.i(38936),j=a.i(50919),k=a.i(18734);let l={approve:"You approved the request.",deny:"You denied the request."};async function m({api:a,fleetId:c}){let{toDecide:d,mine:f}=await (0,e.n)(a),h=new Date;return(0,b.jsxs)(b.Fragment,{children:[void 0===d?null:0===d.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No request waits for a decision."}):(0,b.jsx)(k.f,{title:"To decide",requests:d,now:h,hrefOf:a=>`${g.T}/requests/${encodeURIComponent(a.requestId)}?fleet=${encodeURIComponent(c)}`}),void 0===f||0===f.length?null:(0,b.jsx)(k.f,{title:"Your requests",requests:f,now:h})]})}async function n({searchParams:a}){let e=await (0,d._)({path:g.T,searchParams:a});if("noSignIn"===e.kind)return(0,b.jsx)(h.L,{});let{decided:k}=a,o="string"==typeof k?l[k]:void 0;return(0,b.jsx)(h.n,{api:e.api,fleetId:e.fleetId,screen:"settings",children:(0,b.jsxs)("div",{className:"grid gap-6",children:[(0,b.jsx)("h1",{className:"text-heading font-semibold",children:"Settings"}),(0,b.jsxs)("a",{href:(0,f.i)(g.j,e.fleetId),"data-testid":"bridge-settings-routing",className:"flex flex-col rounded-md border border-border bg-card p-3 hover:bg-accent",children:[(0,b.jsx)("span",{children:"Where things show"}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"Per job, Slack, a chat, web push and email besides Bridge."})]}),void 0===o?null:(0,b.jsx)(j.f,{message:o,isFailure:!1}),(0,b.jsx)(c.Suspense,{fallback:(0,b.jsx)(i.f,{}),children:(0,b.jsx)(m,{api:e.api,fleetId:e.fleetId})})]})})}async function o({searchParams:a}){return(0,b.jsx)(n,{searchParams:await a})}a.s(["default",0,o],79465)},4196,function(a){a.n(a.i(79465))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28bridge%29_bridge_settings_page_tsx_1z5yr8ss25q7n._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/bridge/state/bridge-settings.tsx","../../../../../web/app/%28bridge%29/bridge/settings/page.tsx"],"sourcesContent":["import { Suspense } from 'react';\n\nimport type { GatewayApi } from '../../../lib/gateway-api/gateway-api';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\nimport { readBridgeSettings } from '../hooks/read-bridge';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { BRIDGE_ROUTING_PATH, BRIDGE_SETTINGS_PATH } from '../paths';\nimport { BridgeNoSignIn, BridgeShell } from './bridge-shell';\nimport { BridgeSkeleton } from '../ui/bridge-skeleton';\nimport { Notice } from '../ui/notice';\nimport { RequestsList } from '../ui/requests-list';\n\n/** What a decision the person just made came to, said once they are back. */\nconst DECIDED: Record<string, string> = {\n approve: 'You approved the request.',\n deny: 'You denied the request.',\n};\n\nasync function SettingsParts({ api, fleetId }: { api: GatewayApi; fleetId: string }) {\n const { toDecide, mine } = await readBridgeSettings(api);\n const now = new Date();\n return (\n <>\n {toDecide === undefined ? null : toDecide.length === 0 ? (\n <p className=\"text-muted-foreground\">No request waits for a decision.</p>\n ) : (\n <RequestsList title=\"To decide\" requests={toDecide} now={now} hrefOf={(request) => `${BRIDGE_SETTINGS_PATH}/requests/${encodeURIComponent(request.requestId)}?fleet=${encodeURIComponent(fleetId)}`} />\n )}\n {mine === undefined || mine.length === 0 ? null : <RequestsList title=\"Your requests\" requests={mine} now={now} />}\n </>\n );\n}\n\n/**\n * Bridge's settings (CC18): what the Overview held beside its inbox. Where\n * things show, a page of its own (section 8), the requests to decide for an\n * approver, oldest first, and the requests they asked. Signed out,\n * the browser goes to sign in before anything shows; it reads itself again\n * whenever the fleet's requests change.\n */\nexport async function BridgeSettingsPage({ searchParams }: { searchParams: SearchParams }) {\n const page = await signedInPage({ path: BRIDGE_SETTINGS_PATH, searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n const { decided } = searchParams;\n const said = typeof decided === 'string' ? DECIDED[decided] : undefined;\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"settings\">\n <div className=\"grid gap-6\">\n <h1 className=\"text-heading font-semibold\">Settings</h1>\n <a href={inFleet(BRIDGE_ROUTING_PATH, page.fleetId)} data-testid=\"bridge-settings-routing\" className=\"flex flex-col rounded-md border border-border bg-card p-3 hover:bg-accent\">\n <span>Where things show</span>\n <span className=\"text-caption text-muted-foreground\">Per job, Slack, a chat, web push and email besides Bridge.</span>\n </a>\n {said === undefined ? null : <Notice message={said} isFailure={false} />}\n <Suspense fallback={<BridgeSkeleton />}>\n <SettingsParts api={page.api} fleetId={page.fleetId} />\n </Suspense>\n </div>\n </BridgeShell>\n );\n}\n","import type { Metadata } from 'next';\n\nimport { BridgeSettingsPage } from '../../../../features/bridge/state/bridge-settings';\nimport type { SearchParams } from '../../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Bridge settings' };\n\nexport default async function SettingsPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n return <BridgeSettingsPage searchParams={await searchParams} />;\n}\n"],"names":["DECIDED","approve","deny","SettingsParts","api","fleetId","toDecide","mine","now","Date","undefined","length","className","title","requests","hrefOf","request","encodeURIComponent","requestId","BridgeSettingsPage","searchParams","page","path","kind","decided","said","screen","href","message","isFailure","fallback"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/bridge/state/bridge-settings.tsx","../../../../../web/app/%28bridge%29/bridge/settings/page.tsx"],"sourcesContent":["import { Suspense } from 'react';\n\nimport type { GatewayApi } from '../../../lib/gateway-api/gateway-api';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\nimport { readBridgeSettings } from '../hooks/read-bridge';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { BRIDGE_ROUTING_PATH, BRIDGE_SETTINGS_PATH } from '../paths';\nimport { BridgeNoSignIn, BridgeShell } from './bridge-shell';\nimport { BridgeSkeleton } from '../ui/bridge-skeleton';\nimport { Notice } from '../ui/notice';\nimport { RequestsList } from '../ui/requests-list';\n\n/** What a decision the person just made came to, said once they are back. */\nconst DECIDED: Record<string, string> = {\n approve: 'You approved the request.',\n deny: 'You denied the request.',\n};\n\nasync function SettingsParts({ api, fleetId }: { api: GatewayApi; fleetId: string }) {\n const { toDecide, mine } = await readBridgeSettings(api);\n const now = new Date();\n return (\n <>\n {toDecide === undefined ? null : toDecide.length === 0 ? (\n <p className=\"text-muted-foreground\">No request waits for a decision.</p>\n ) : (\n <RequestsList title=\"To decide\" requests={toDecide} now={now} hrefOf={(request) => `${BRIDGE_SETTINGS_PATH}/requests/${encodeURIComponent(request.requestId)}?fleet=${encodeURIComponent(fleetId)}`} />\n )}\n {mine === undefined || mine.length === 0 ? null : <RequestsList title=\"Your requests\" requests={mine} now={now} />}\n </>\n );\n}\n\n/**\n * Bridge's settings (CC18): what the Overview held beside its inbox. Where\n * things show, a page of its own (section 8), the requests to decide for an\n * approver, oldest first, and the requests they asked. Signed out,\n * the browser goes to sign in before anything shows; it reads itself again\n * whenever the fleet's requests change.\n */\nexport async function BridgeSettingsPage({ searchParams }: { searchParams: SearchParams }) {\n const page = await signedInPage({ path: BRIDGE_SETTINGS_PATH, searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n const { decided } = searchParams;\n const said = typeof decided === 'string' ? DECIDED[decided] : undefined;\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"settings\">\n <div className=\"grid gap-6\">\n <h1 className=\"text-heading font-semibold\">Settings</h1>\n <a href={inFleet(BRIDGE_ROUTING_PATH, page.fleetId)} data-testid=\"bridge-settings-routing\" className=\"flex flex-col rounded-md border border-border bg-card p-3 hover:bg-accent\">\n <span>Where things show</span>\n <span className=\"text-caption text-muted-foreground\">Per job, Slack, a chat, web push and email besides Bridge.</span>\n </a>\n {said === undefined ? null : <Notice message={said} isFailure={false} />}\n <Suspense fallback={<BridgeSkeleton />}>\n <SettingsParts api={page.api} fleetId={page.fleetId} />\n </Suspense>\n </div>\n </BridgeShell>\n );\n}\n","import { BridgeSettingsPage } from '../../../../features/bridge/state/bridge-settings';\nimport type { SearchParams } from '../../../../lib/gateway-api/page-api';\n\nexport default async function SettingsPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n return <BridgeSettingsPage searchParams={await searchParams} />;\n}\n"],"names":["DECIDED","approve","deny","SettingsParts","api","fleetId","toDecide","mine","now","Date","undefined","length","className","title","requests","hrefOf","request","encodeURIComponent","requestId","BridgeSettingsPage","searchParams","page","path","kind","decided","said","screen","href","message","isFailure","fallback"],"mappings":"uDAAA,EAAA,EAAA,CAAA,CAAA,KAGA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OAGA,IAAMA,EAAkC,CACtCC,QAAS,4BACTC,KAAM,yBACR,EAEA,eAAeC,EAAc,KAAEC,CAAG,SAAEC,CAAO,CAAwC,EACjF,GAAM,UAAEC,CAAQ,MAAEC,CAAI,CAAE,CAAG,MAAM,CAAA,EAAA,EAAA,CAAA,AAAkB,EAACH,GAC9CI,EAAM,IAAIC,KAChB,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,gBACgBC,IAAbJ,EAAyB,KAA2B,IAApBA,EAASK,MAAM,CAC9C,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEC,UAAU,iCAAwB,qCAErC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAACC,MAAM,YAAYC,SAAUR,EAAUE,IAAKA,EAAKO,OAAQ,AAACC,GAAY,CAAA,EAAG,EAAA,CAAoB,CAAC,UAAU,EAAEC,mBAAmBD,EAAQE,SAAS,EAAE,OAAO,EAAED,mBAAmBZ,GAAAA,CAAU,GAEpME,AAASG,YAA6B,AAAhBH,MAAKI,MAAM,CAAS,KAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAACE,MAAM,gBAAgBC,SAAUP,EAAMC,IAAKA,MAGjH,CASO,eAAeW,EAAmB,cAAEC,CAAY,CAAkC,EACvF,IAAMC,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAY,EAAC,CAAEC,KAAM,EAAA,CAAoB,cAAEF,CAAa,GAC3E,GAAkB,YAAY,CAA1BC,EAAKE,IAAI,CACX,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAc,CAAA,CAAA,GAExB,GAAM,SAAEC,CAAO,CAAE,CAAGJ,EACdK,EAA0B,AAAnB,iBAAOD,EAAuBxB,CAAO,CAACwB,EAAQ,MAAGd,EAC9D,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAW,CAAA,CAACN,IAAKiB,EAAKjB,GAAG,CAAEC,QAASgB,EAAKhB,OAAO,CAAEqB,OAAO,oBACxD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAId,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAGA,UAAU,sCAA6B,aAC3C,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAEe,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,EAAA,CAAmB,CAAEN,EAAKhB,OAAO,EAAG,cAAY,0BAA0BO,UAAU,sFACnG,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,sBACN,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKA,UAAU,8CAAqC,kEAEtDa,KAASf,MAAY,KAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAM,CAAA,CAACkB,QAASH,EAAMI,WAAW,IAC/D,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CAACC,SAAU,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAc,CAAA,CAAA,YACjC,CAAA,EAAA,EAAA,GAAA,EAAC3B,EAAAA,CAAcC,IAAKiB,EAAKjB,GAAG,CAAEC,QAASgB,EAAKhB,OAAO,SAK7D,CC3De,eAAe,EAAa,cAAE,CAAY,CAA2C,EAClG,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAmB,aAAc,MAAM,GACjD"}
@@ -0,0 +1,3 @@
1
+ module.exports=[19403,a=>{"use strict";let b={title:a.i(11270).q};a.s(["default",0,function({children:a}){return a},"metadata",0,b])},62027,function(a){a.n(a.i(19403))}];
2
+
3
+ //# sourceMappingURL=web_app_%28bridge%29_layout_tsx_0io-giu9m2p0z._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/app/%28bridge%29/layout.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport type { ReactNode } from 'react';\n\nimport { BRIDGE_PAGE_TITLE } from '../../lib/page-title';\n\nexport const metadata: Metadata = { title: BRIDGE_PAGE_TITLE };\n\n/** Every Bridge page carries the Bridge title; the root layout titles the rest of the gateway's pages. */\nexport default function BridgeLayout({ children }: { children: ReactNode }) {\n return children;\n}\n"],"names":["metadata","title","BridgeLayout","children"],"mappings":"uCAKO,IAAMA,EAAqB,CAAEC,MAFpC,AAE2C,EAF3C,CAAA,CAAA,OAE2C,CAAiB,AAAC,mBAG9C,SAASC,AAAa,UAAEC,CAAQ,CAA2B,EACxE,OAAOA,CACT"}
@@ -1,3 +1,3 @@
1
- module.exports=[61736,a=>{"use strict";var b=a.i(7997),c=a.i(55476),d=a.i(66283),e=a.i(69372),f=a.i(49144),g=a.i(69912),h=a.i(72913),i=a.i(43496),j=a.i(18379),k=a.i(9181);let l={"messages:send":"Send","messages:receive":"Receive","fleet:read":"Read the fleet"};function m({scope:a,isLocked:c=!1,isChecked:d=!1}){return(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",defaultChecked:!!c||d,disabled:c,...c?{}:{name:`${j.u}${a}`}}),(0,b.jsx)("span",{children:l[a]??a}),(0,b.jsx)("span",{className:"font-mono text-code text-muted-foreground",children:a}),c?(0,b.jsx)("span",{className:"text-muted-foreground",children:"(locked)"}):null]})}async function n({page:a,name:l}){let{api:o,fleetId:p,scopes:q}=a,r=await (0,d.F)(o.parties.get.query({name:l}));if(!r.isOk)return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsx)(k.y,{children:r.refusal})});let s=r.value,t=q.includes(k.J)?await (0,d.F)(o.parties.ownerChoices.query()):void 0,u=s.scopes,v=q.filter(a=>!j._.includes(a)),w=null===u?[]:u.filter(a=>!j._.includes(a)&&!v.includes(a));return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[s.name,": owner and scopes"]}),(0,b.jsxs)(e.ActionForm,{action:i.v,fleetId:p,submit:{label:"Save",pending:"Saving…"},testId:"outside-party-change-form",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:s.name}),void 0===t?null:t.isOk?(0,b.jsx)(g.f,{choices:t.value,current:null===s.ownerShipId?null:{shipId:s.ownerShipId,name:s.ownerName??s.ownerShipId},help:"A person ship or argo. It answers for this party."}):(0,b.jsx)(k.y,{children:t.refusal}),q.includes(k.p)&&null!==u?(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes"}),(0,b.jsx)("input",{type:"hidden",name:j.e,value:"true"}),j._.map(a=>(0,b.jsx)(m,{scope:a,isLocked:!0},a)),v.map(a=>(0,b.jsx)(m,{scope:a,isChecked:u.includes(a)},a)),w.map(a=>(0,b.jsx)(m,{scope:a,isLocked:!0},a))]}):null]}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:f.x.secondary,href:(0,c.i)((0,h.N)(s.name),p),children:"Cancel"})})]})})}var o=a.i(36554);async function p({params:a,searchParams:e}){let{name:f}=await a,g=await (0,d._)({path:(0,h.N)(f,"change"),searchParams:await e});return"noSignIn"===g.kind?(0,b.jsx)(o.L,{}):(0,b.jsx)(o.n,{api:g.api,fleetId:g.fleetId,screen:"outside-parties",below:{name:"Change",parentHref:(0,c.i)(h.$,g.fleetId),via:{name:f,href:(0,c.i)((0,h.N)(f),g.fleetId)}},children:(0,b.jsx)(n,{page:g,name:f})})}a.s(["default",0,p,"metadata",0,{title:"Outside parties"}],61736)},38033,function(a){a.n(a.i(61736))}];
1
+ module.exports=[61736,a=>{"use strict";var b=a.i(7997),c=a.i(55476),d=a.i(66283),e=a.i(69372),f=a.i(49144),g=a.i(69912),h=a.i(72913),i=a.i(43496),j=a.i(18379),k=a.i(9181);let l={"messages:send":"Send","messages:receive":"Receive","fleet:read":"Read the fleet"};function m({scope:a,isLocked:c=!1,isChecked:d=!1}){return(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",defaultChecked:!!c||d,disabled:c,...c?{}:{name:`${j.u}${a}`}}),(0,b.jsx)("span",{children:l[a]??a}),(0,b.jsx)("span",{className:"font-mono text-code text-muted-foreground",children:a}),c?(0,b.jsx)("span",{className:"text-muted-foreground",children:"(locked)"}):null]})}async function n({page:a,name:l}){let{api:o,fleetId:p,scopes:q}=a,r=await (0,d.F)(o.parties.get.query({name:l}));if(!r.isOk)return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsx)(k.y,{children:r.refusal})});let s=r.value,t=q.includes(k.J)?await (0,d.F)(o.parties.ownerChoices.query()):void 0,u=s.scopes,v=q.filter(a=>!j._.includes(a)),w=null===u?[]:u.filter(a=>!j._.includes(a)&&!v.includes(a));return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[s.name,": owner and scopes"]}),(0,b.jsxs)(e.ActionForm,{action:i.v,fleetId:p,submit:{label:"Save",pending:"Saving…"},testId:"outside-party-change-form",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:s.name}),void 0===t?null:t.isOk?(0,b.jsx)(g.f,{choices:t.value,current:null===s.ownerShipId?null:{shipId:s.ownerShipId,name:s.ownerName??s.ownerShipId},help:"A person ship or argo. It answers for this party."}):(0,b.jsx)(k.y,{children:t.refusal}),q.includes(k.p)&&null!==u?(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes"}),(0,b.jsx)("input",{type:"hidden",name:j.e,value:"true"}),j._.map(a=>(0,b.jsx)(m,{scope:a,isLocked:!0},a)),v.map(a=>(0,b.jsx)(m,{scope:a,isChecked:u.includes(a)},a)),w.map(a=>(0,b.jsx)(m,{scope:a,isLocked:!0},a))]}):null]}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:f.x.secondary,href:(0,c.i)((0,h.N)(s.name),p),children:"Cancel"})})]})})}var o=a.i(36554);async function p({params:a,searchParams:e}){let{name:f}=await a,g=await (0,d._)({path:(0,h.N)(f,"change"),searchParams:await e});return"noSignIn"===g.kind?(0,b.jsx)(o.L,{}):(0,b.jsx)(o.n,{api:g.api,fleetId:g.fleetId,screen:"outside-parties",below:{name:"Change",parentHref:(0,c.i)(h.$,g.fleetId),via:{name:f,href:(0,c.i)((0,h.N)(f),g.fleetId)}},children:(0,b.jsx)(n,{page:g,name:f})})}a.s(["default",0,p],61736)},38033,function(a){a.n(a.i(61736))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28bridge%29_outside-parties_%5Bname%5D_change_page_tsx_15monuoxw-kse._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/outside-party/ui/change-party.tsx","../../../../../web/app/%28bridge%29/outside-parties/%5Bname%5D/change/page.tsx"],"sourcesContent":["import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { partyPath } from '../../outside-parties/paths';\nimport { changeParty } from '../actions';\nimport { EVERY_APP_SHIP_SCOPES, SCOPE_FIELD_PREFIX, SCOPES_SHOWN_FIELD } from '../scope-changes';\nimport { GRANTING_SCOPE, OWNING_SCOPE, Refusal } from './outside-party';\n\n/** A scope's plain label, beside the scope itself. */\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** One scope row: a locked row shows the scope ticked or not and sends nothing. */\nfunction ScopeRow({ scope, isLocked = false, isChecked = false }: { scope: string; isLocked?: boolean; isChecked?: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n <input type=\"checkbox\" defaultChecked={isLocked ? true : isChecked} disabled={isLocked} {...(isLocked ? {} : { name: `${SCOPE_FIELD_PREFIX}${scope}` })} />\n <span>{SCOPE_LABELS[scope] ?? scope}</span>\n <span className=\"font-mono text-code text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-muted-foreground\">(locked)</span> : null}\n </label>\n );\n}\n\n/**\n * Changing a party's owner (fleet:owner) and its scopes (scopes:grant):\n * every app ship's scopes locked on, the account's own to tick, and what\n * the party holds beyond them locked as it is.\n */\nexport async function ChangeParty({ page, name }: { page: SignedInPage; name: string }) {\n const { api, fleetId, scopes } = page;\n const read = await readOf(api.parties.get.query({ name }));\n if (!read.isOk) {\n return (\n <div className=\"grid max-w-160 gap-4\">\n <Refusal>{read.refusal}</Refusal>\n </div>\n );\n }\n const party = read.value;\n const owners = scopes.includes(OWNING_SCOPE) ? await readOf(api.parties.ownerChoices.query()) : undefined;\n const held = party.scopes;\n const own = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope));\n const beyond = held === null ? [] : held.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope) && !own.includes(scope));\n return (\n <div className=\"grid max-w-160 gap-4\">\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-section font-semibold\">{party.name}: owner and scopes</h2>\n <ActionForm action={changeParty} fleetId={fleetId} submit={{ label: 'Save', pending: 'Saving…' }} testId=\"outside-party-change-form\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n {owners === undefined ? null : owners.isOk ? (\n <OwnerField\n choices={owners.value}\n current={party.ownerShipId === null ? null : { shipId: party.ownerShipId, name: party.ownerName ?? party.ownerShipId }}\n help=\"A person ship or argo. It answers for this party.\"\n />\n ) : (\n <Refusal>{owners.refusal}</Refusal>\n )}\n {scopes.includes(GRANTING_SCOPE) && held !== null ? (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes</legend>\n <input type=\"hidden\" name={SCOPES_SHOWN_FIELD} value=\"true\" />\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {own.map((scope) => (\n <ScopeRow key={scope} scope={scope} isChecked={held.includes(scope)} />\n ))}\n {beyond.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n </fieldset>\n ) : null}\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(partyPath(party.name), fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n </div>\n );\n}\n","import type { Metadata } from 'next';\n\nimport { ChangeParty } from '../../../../../features/outside-party/ui/change-party';\nimport { OUTSIDE_PARTIES_PATH, partyPath } from '../../../../../features/outside-parties/paths';\nimport { BridgeNoSignIn, BridgeShell } from '../../../../../features/bridge/state/bridge-shell';\nimport { inFleet } from '../../../../../lib/gateway-api/page-account';\nimport { signedInPage, type SearchParams } from '../../../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Outside parties' };\n\nexport default async function ChangePartyPage({ params, searchParams }: { params: Promise<{ name: string }>; searchParams: Promise<SearchParams> }) {\n const { name } = await params;\n const page = await signedInPage({ path: partyPath(name, 'change'), searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"outside-parties\" below={{ name: 'Change', parentHref: inFleet(OUTSIDE_PARTIES_PATH, page.fleetId), via: { name, href: inFleet(partyPath(name), page.fleetId) } }}>\n <ChangeParty page={page} name={name} />\n </BridgeShell>\n );\n}\n"],"names":["SCOPE_LABELS","ScopeRow","scope","isLocked","isChecked","className","type","defaultChecked","disabled","name","ChangeParty","page","api","fleetId","scopes","read","parties","get","query","isOk","refusal","party","value","owners","includes","ownerChoices","undefined","held","own","filter","beyond","action","submit","label","pending","testId","choices","current","ownerShipId","shipId","ownerName","help","map","secondary","href"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/outside-party/ui/change-party.tsx","../../../../../web/app/%28bridge%29/outside-parties/%5Bname%5D/change/page.tsx"],"sourcesContent":["import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { partyPath } from '../../outside-parties/paths';\nimport { changeParty } from '../actions';\nimport { EVERY_APP_SHIP_SCOPES, SCOPE_FIELD_PREFIX, SCOPES_SHOWN_FIELD } from '../scope-changes';\nimport { GRANTING_SCOPE, OWNING_SCOPE, Refusal } from './outside-party';\n\n/** A scope's plain label, beside the scope itself. */\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** One scope row: a locked row shows the scope ticked or not and sends nothing. */\nfunction ScopeRow({ scope, isLocked = false, isChecked = false }: { scope: string; isLocked?: boolean; isChecked?: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n <input type=\"checkbox\" defaultChecked={isLocked ? true : isChecked} disabled={isLocked} {...(isLocked ? {} : { name: `${SCOPE_FIELD_PREFIX}${scope}` })} />\n <span>{SCOPE_LABELS[scope] ?? scope}</span>\n <span className=\"font-mono text-code text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-muted-foreground\">(locked)</span> : null}\n </label>\n );\n}\n\n/**\n * Changing a party's owner (fleet:owner) and its scopes (scopes:grant):\n * every app ship's scopes locked on, the account's own to tick, and what\n * the party holds beyond them locked as it is.\n */\nexport async function ChangeParty({ page, name }: { page: SignedInPage; name: string }) {\n const { api, fleetId, scopes } = page;\n const read = await readOf(api.parties.get.query({ name }));\n if (!read.isOk) {\n return (\n <div className=\"grid max-w-160 gap-4\">\n <Refusal>{read.refusal}</Refusal>\n </div>\n );\n }\n const party = read.value;\n const owners = scopes.includes(OWNING_SCOPE) ? await readOf(api.parties.ownerChoices.query()) : undefined;\n const held = party.scopes;\n const own = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope));\n const beyond = held === null ? [] : held.filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope) && !own.includes(scope));\n return (\n <div className=\"grid max-w-160 gap-4\">\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-section font-semibold\">{party.name}: owner and scopes</h2>\n <ActionForm action={changeParty} fleetId={fleetId} submit={{ label: 'Save', pending: 'Saving…' }} testId=\"outside-party-change-form\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n {owners === undefined ? null : owners.isOk ? (\n <OwnerField\n choices={owners.value}\n current={party.ownerShipId === null ? null : { shipId: party.ownerShipId, name: party.ownerName ?? party.ownerShipId }}\n help=\"A person ship or argo. It answers for this party.\"\n />\n ) : (\n <Refusal>{owners.refusal}</Refusal>\n )}\n {scopes.includes(GRANTING_SCOPE) && held !== null ? (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes</legend>\n <input type=\"hidden\" name={SCOPES_SHOWN_FIELD} value=\"true\" />\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {own.map((scope) => (\n <ScopeRow key={scope} scope={scope} isChecked={held.includes(scope)} />\n ))}\n {beyond.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n </fieldset>\n ) : null}\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(partyPath(party.name), fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n </div>\n );\n}\n","import { ChangeParty } from '../../../../../features/outside-party/ui/change-party';\nimport { OUTSIDE_PARTIES_PATH, partyPath } from '../../../../../features/outside-parties/paths';\nimport { BridgeNoSignIn, BridgeShell } from '../../../../../features/bridge/state/bridge-shell';\nimport { inFleet } from '../../../../../lib/gateway-api/page-account';\nimport { signedInPage, type SearchParams } from '../../../../../lib/gateway-api/page-api';\n\nexport default async function ChangePartyPage({ params, searchParams }: { params: Promise<{ name: string }>; searchParams: Promise<SearchParams> }) {\n const { name } = await params;\n const page = await signedInPage({ path: partyPath(name, 'change'), searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"outside-parties\" below={{ name: 'Change', parentHref: inFleet(OUTSIDE_PARTIES_PATH, page.fleetId), via: { name, href: inFleet(partyPath(name), page.fleetId) } }}>\n <ChangeParty page={page} name={name} />\n </BridgeShell>\n );\n}\n"],"names":["SCOPE_LABELS","ScopeRow","scope","isLocked","isChecked","className","type","defaultChecked","disabled","name","ChangeParty","page","api","fleetId","scopes","read","parties","get","query","isOk","refusal","party","value","owners","includes","ownerChoices","undefined","held","own","filter","beyond","action","submit","label","pending","testId","choices","current","ownerShipId","shipId","ownerName","help","map","secondary","href"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[68387,a=>{"use strict";var b=a.i(7997),c=a.i(55476),d=a.i(66283),e=a.i(69372),f=a.i(49144),g=a.i(72913),h=a.i(43496),i=a.i(9181);async function j({page:a,name:k}){let{api:l,fleetId:m}=a,n=await (0,d.F)(l.parties.get.query({name:k}));if(!n.isOk)return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsx)(i.y,{children:n.refusal})});let o=n.value;return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Retire ",o.name,"?"]}),(0,b.jsxs)("ul",{className:"list-disc pl-5",children:[(0,b.jsx)("li",{children:null===o.proxyShipId?"Its proxy ship is retired":(0,b.jsxs)(b.Fragment,{children:["Its proxy ship ",(0,b.jsx)("span",{className:"font-mono",children:o.proxyShipId})," is retired"]})}),(0,b.jsx)("li",{children:"The ships that used it lose its tools"}),(0,b.jsx)("li",{children:"Adding it again is a new request"})]}),(0,b.jsx)(e.ActionForm,{action:h.t,fleetId:m,submit:{label:`Retire ${o.name}`,pending:"Retiring…",kind:"destructive"},testId:"outside-party-retire-form",children:(0,b.jsx)("input",{type:"hidden",name:"name",value:o.name})}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:f.x.secondary,href:(0,c.i)((0,g.N)(o.name),m),children:"Cancel"})})]})})}var k=a.i(36554);async function l({params:a,searchParams:e}){let{name:f}=await a,h=await (0,d._)({path:(0,g.N)(f,"retire"),searchParams:await e});return"noSignIn"===h.kind?(0,b.jsx)(k.L,{}):(0,b.jsx)(k.n,{api:h.api,fleetId:h.fleetId,screen:"outside-parties",below:{name:"Retire",parentHref:(0,c.i)(g.$,h.fleetId),via:{name:f,href:(0,c.i)((0,g.N)(f),h.fleetId)}},children:(0,b.jsx)(j,{page:h,name:f})})}a.s(["default",0,l,"metadata",0,{title:"Outside parties"}],68387)},8642,function(a){a.n(a.i(68387))}];
1
+ module.exports=[68387,a=>{"use strict";var b=a.i(7997),c=a.i(55476),d=a.i(66283),e=a.i(69372),f=a.i(49144),g=a.i(72913),h=a.i(43496),i=a.i(9181);async function j({page:a,name:k}){let{api:l,fleetId:m}=a,n=await (0,d.F)(l.parties.get.query({name:k}));if(!n.isOk)return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsx)(i.y,{children:n.refusal})});let o=n.value;return(0,b.jsx)("div",{className:"grid max-w-160 gap-4",children:(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Retire ",o.name,"?"]}),(0,b.jsxs)("ul",{className:"list-disc pl-5",children:[(0,b.jsx)("li",{children:null===o.proxyShipId?"Its proxy ship is retired":(0,b.jsxs)(b.Fragment,{children:["Its proxy ship ",(0,b.jsx)("span",{className:"font-mono",children:o.proxyShipId})," is retired"]})}),(0,b.jsx)("li",{children:"The ships that used it lose its tools"}),(0,b.jsx)("li",{children:"Adding it again is a new request"})]}),(0,b.jsx)(e.ActionForm,{action:h.t,fleetId:m,submit:{label:`Retire ${o.name}`,pending:"Retiring…",kind:"destructive"},testId:"outside-party-retire-form",children:(0,b.jsx)("input",{type:"hidden",name:"name",value:o.name})}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:f.x.secondary,href:(0,c.i)((0,g.N)(o.name),m),children:"Cancel"})})]})})}var k=a.i(36554);async function l({params:a,searchParams:e}){let{name:f}=await a,h=await (0,d._)({path:(0,g.N)(f,"retire"),searchParams:await e});return"noSignIn"===h.kind?(0,b.jsx)(k.L,{}):(0,b.jsx)(k.n,{api:h.api,fleetId:h.fleetId,screen:"outside-parties",below:{name:"Retire",parentHref:(0,c.i)(g.$,h.fleetId),via:{name:f,href:(0,c.i)((0,g.N)(f),h.fleetId)}},children:(0,b.jsx)(j,{page:h,name:f})})}a.s(["default",0,l],68387)},8642,function(a){a.n(a.i(68387))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28bridge%29_outside-parties_%5Bname%5D_retire_page_tsx_0pljqvw60fh7t._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/outside-party/ui/retire-party.tsx","../../../../../web/app/%28bridge%29/outside-parties/%5Bname%5D/retire/page.tsx"],"sourcesContent":["import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { partyPath } from '../../outside-parties/paths';\nimport { retireParty } from '../actions';\nimport { Refusal } from './outside-party';\n\n/** Retiring a party, after one confirm that lists what happens (decision 0056). */\nexport async function RetireParty({ page, name }: { page: SignedInPage; name: string }) {\n const { api, fleetId } = page;\n const read = await readOf(api.parties.get.query({ name }));\n if (!read.isOk) {\n return (\n <div className=\"grid max-w-160 gap-4\">\n <Refusal>{read.refusal}</Refusal>\n </div>\n );\n }\n const party = read.value;\n return (\n <div className=\"grid max-w-160 gap-4\">\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-heading font-semibold\">Retire {party.name}?</h2>\n <ul className=\"list-disc pl-5\">\n <li>{party.proxyShipId === null ? 'Its proxy ship is retired' : <>Its proxy ship <span className=\"font-mono\">{party.proxyShipId}</span> is retired</>}</li>\n <li>The ships that used it lose its tools</li>\n <li>Adding it again is a new request</li>\n </ul>\n <ActionForm action={retireParty} fleetId={fleetId} submit={{ label: `Retire ${party.name}`, pending: 'Retiring…', kind: 'destructive' }} testId=\"outside-party-retire-form\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(partyPath(party.name), fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n </div>\n );\n}\n","import type { Metadata } from 'next';\n\nimport { RetireParty } from '../../../../../features/outside-party/ui/retire-party';\nimport { OUTSIDE_PARTIES_PATH, partyPath } from '../../../../../features/outside-parties/paths';\nimport { BridgeNoSignIn, BridgeShell } from '../../../../../features/bridge/state/bridge-shell';\nimport { inFleet } from '../../../../../lib/gateway-api/page-account';\nimport { signedInPage, type SearchParams } from '../../../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Outside parties' };\n\nexport default async function RetirePartyPage({ params, searchParams }: { params: Promise<{ name: string }>; searchParams: Promise<SearchParams> }) {\n const { name } = await params;\n const page = await signedInPage({ path: partyPath(name, 'retire'), searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"outside-parties\" below={{ name: 'Retire', parentHref: inFleet(OUTSIDE_PARTIES_PATH, page.fleetId), via: { name, href: inFleet(partyPath(name), page.fleetId) } }}>\n <RetireParty page={page} name={name} />\n </BridgeShell>\n );\n}\n"],"names":["RetireParty","page","name","api","fleetId","read","parties","get","query","isOk","className","refusal","party","value","proxyShipId","action","submit","label","pending","kind","testId","type","secondary","href"],"mappings":"uDAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MAGO,eAAeA,EAAY,MAAEC,CAAI,MAAEC,CAAI,CAAwC,EACpF,GAAM,CAAEC,KAAG,SAAEC,CAAO,CAAE,CAAGH,EACnBI,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAM,EAACF,EAAIG,OAAO,CAACC,GAAG,CAACC,KAAK,CAAC,MAAEN,CAAK,IACvD,GAAI,CAACG,EAAKI,IAAI,CACZ,CADc,KAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAIC,UAAU,gCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,CAAA,UAAEL,EAAKM,OAAO,KAI5B,IAAMC,EAAQP,EAAKQ,KAAK,CACxB,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAIH,UAAU,gCACb,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQA,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,WACtC,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGA,UAAU,uCAA6B,UAAQE,EAAMV,IAAI,CAAC,OAC9D,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGQ,UAAU,2BACZ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAA0B,OAAtBE,EAAME,WAAW,CAAY,4BAA8B,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAAE,kBAAe,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKJ,UAAU,qBAAaE,EAAME,WAAW,GAAQ,mBACvI,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,0CACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,wCAEN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAACC,OAAQ,EAAA,CAAW,CAAEX,QAASA,EAASY,OAAQ,CAAEC,MAAO,CAAC,OAAO,EAAEL,EAAMV,IAAI,CAAA,CAAE,CAAEgB,QAAS,YAAaC,KAAM,aAAc,EAAGC,OAAO,qCAC9I,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMC,KAAK,SAASnB,KAAK,OAAOW,MAAOD,EAAMV,IAAI,KAEpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEQ,UAAW,EAAA,CAAO,CAACY,SAAS,CAAEC,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,CAAA,EAAA,EAAA,CAAA,AAAS,EAACX,EAAMV,IAAI,EAAGE,YAAU,iBAO1F,CCpCA,IAAA,EAAA,EAAA,CAAA,CAAA,OAMe,eAAe,EAAgB,QAAE,CAAM,cAAE,CAAY,CAA8E,EAChJ,GAAM,MAAE,CAAIM,CAAE,CAAG,MAAM,EACjB,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAYL,EAAC,CAAE,KAAM,CAAA,EAAA,EAAA,CAAA,AAAS,EAAC,EAAM,UAAW,aAAc,MAAMO,CAAaC,SACpG,AAAkB,YAAY,CAA1B,EAAK,IAAI,CACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAc,CAAA,CAAA,GAGtB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAW,CAAA,CAAC,IAAK,EAAK,GAAG,CAAE,QAAS,EAAK,OAAO,CAAE,OAAO,kBAAkB,MAAO,CAAE,KAAM,SAAU,WAAY,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,EAAA,CAAoB,CAAE,EAAK,OAAO,EAAG,IAAK,MAAE,EAAM,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,CAAA,EAAA,EAAA,CAAA,AAAS,EAAC,GAAO,EAAK,OAAO,CAAE,CAAE,WACxN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,KAAM,EAAM,KAAMD,KAGrC,iCAbkC,CAAEX,MAAO,iBAAkB"}
1
+ {"version":3,"sources":["../../../../../web/features/outside-party/ui/retire-party.tsx","../../../../../web/app/%28bridge%29/outside-parties/%5Bname%5D/retire/page.tsx"],"sourcesContent":["import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { partyPath } from '../../outside-parties/paths';\nimport { retireParty } from '../actions';\nimport { Refusal } from './outside-party';\n\n/** Retiring a party, after one confirm that lists what happens (decision 0056). */\nexport async function RetireParty({ page, name }: { page: SignedInPage; name: string }) {\n const { api, fleetId } = page;\n const read = await readOf(api.parties.get.query({ name }));\n if (!read.isOk) {\n return (\n <div className=\"grid max-w-160 gap-4\">\n <Refusal>{read.refusal}</Refusal>\n </div>\n );\n }\n const party = read.value;\n return (\n <div className=\"grid max-w-160 gap-4\">\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-heading font-semibold\">Retire {party.name}?</h2>\n <ul className=\"list-disc pl-5\">\n <li>{party.proxyShipId === null ? 'Its proxy ship is retired' : <>Its proxy ship <span className=\"font-mono\">{party.proxyShipId}</span> is retired</>}</li>\n <li>The ships that used it lose its tools</li>\n <li>Adding it again is a new request</li>\n </ul>\n <ActionForm action={retireParty} fleetId={fleetId} submit={{ label: `Retire ${party.name}`, pending: 'Retiring…', kind: 'destructive' }} testId=\"outside-party-retire-form\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(partyPath(party.name), fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n </div>\n );\n}\n","import { RetireParty } from '../../../../../features/outside-party/ui/retire-party';\nimport { OUTSIDE_PARTIES_PATH, partyPath } from '../../../../../features/outside-parties/paths';\nimport { BridgeNoSignIn, BridgeShell } from '../../../../../features/bridge/state/bridge-shell';\nimport { inFleet } from '../../../../../lib/gateway-api/page-account';\nimport { signedInPage, type SearchParams } from '../../../../../lib/gateway-api/page-api';\n\nexport default async function RetirePartyPage({ params, searchParams }: { params: Promise<{ name: string }>; searchParams: Promise<SearchParams> }) {\n const { name } = await params;\n const page = await signedInPage({ path: partyPath(name, 'retire'), searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <BridgeNoSignIn />;\n }\n return (\n <BridgeShell api={page.api} fleetId={page.fleetId} screen=\"outside-parties\" below={{ name: 'Retire', parentHref: inFleet(OUTSIDE_PARTIES_PATH, page.fleetId), via: { name, href: inFleet(partyPath(name), page.fleetId) } }}>\n <RetireParty page={page} name={name} />\n </BridgeShell>\n );\n}\n"],"names":["RetireParty","page","name","api","fleetId","read","parties","get","query","isOk","className","refusal","party","value","proxyShipId","action","submit","label","pending","kind","testId","type","secondary","href"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[5103,a=>{"use strict";var b=a.i(7997),c=a.i(33621),d=a.i(66680),e=a.i(66283),f=a.i(29493),g=a.i(69372),h=a.i(49144),i=a.i(69912),j=a.i(65253),k=a.i(98323),l=a.i(5901);function m({party:a,fleetId:c}){return(0,b.jsxs)("div",{className:"grid gap-2",children:["awaitingCrew"===a.state?(0,b.jsxs)(g.ActionForm,{action:l.P,fleetId:c,submit:{label:"Crew",pending:"Crewing…"},className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name}),(0,b.jsx)("input",{className:h.w,name:"secret",placeholder:"secret from a new starting prompt",required:!0})]}):null,"mcpServer"===a.kind&&"crewed"===a.state?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.ActionForm,{action:l.g,fleetId:c,submit:{label:"State its tools",pending:"Stating…",kind:"secondary"},children:(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name})}),(0,b.jsxs)(g.ActionForm,{action:l.p,fleetId:c,submit:{label:"Mark",pending:"Marking…",kind:"secondary"},className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name}),(0,b.jsx)("input",{className:h.w,name:"tool",placeholder:"tool",required:!0,maxLength:128}),(0,b.jsxs)("label",{className:"flex items-center gap-1",children:[(0,b.jsx)("input",{type:"checkbox",name:"isRepeatable"})," repeatable"]})]})]}):null]})}function n({fleetId:a,owners:c}){return(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,children:[(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Approve an MCP server"}),(0,b.jsxs)(g.ActionForm,{action:l.L,fleetId:a,submit:{label:"Approve",pending:"Approving…"},testId:"parties-approve",children:[(0,b.jsx)("input",{type:"hidden",name:"requestId",value:(0,d.randomUUID)()}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:h.w,name:"name",required:!0})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP URL"}),(0,b.jsx)("input",{className:h.w,name:"url",type:"url",required:!0})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsx)("select",{className:h.w,name:"credentialKind",defaultValue:"bearer",children:f.x.map(({kind:a,label:c})=>(0,b.jsx)("option",{value:a,children:c},a))})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:h.w,name:"token",type:"password"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:h.w,name:"clientId"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:h.w,name:"clientSecret",type:"password"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:h.w,name:"issuer",type:"url"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:h.w,name:"scope"})]}),(0,b.jsx)(i.f,{choices:c.isOk?c.value:[],current:null,help:"A person ship or argo. It answers for this server.",refusal:c.isOk?void 0:c.refusal}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:h.w,name:"concurrencyLimit",type:"number",min:1,max:10,defaultValue:4})]})]})]})}async function o({page:a}){let{api:c,fleetId:d,scopes:f}=a,g=await (0,e.F)(c.parties.list.query()),h=f.includes("fleet:manage"),i=h?await (0,e.F)(c.parties.ownerChoices.query()):void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Parties"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Outside MCP servers approved for this fleet, each behind its proxy ship."}),g.isOk?0===g.value.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No party yet."}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full text-left","data-testid":"parties-table",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{className:"border-b border-border",children:[(0,b.jsx)("th",{className:"p-2",children:"Name"}),(0,b.jsx)("th",{className:"p-2",children:"URL"}),(0,b.jsx)("th",{className:"p-2",children:"Credential"}),(0,b.jsx)("th",{className:"p-2",children:"State"}),(0,b.jsx)("th",{className:"p-2",children:"Proxy ship"}),(0,b.jsx)("th",{className:"p-2"})]})}),(0,b.jsx)("tbody",{children:g.value.map(a=>{let c=j.Y[a.state];return(0,b.jsxs)("tr",{className:"border-b border-border align-top",children:[(0,b.jsx)("td",{className:"p-2",children:a.name}),(0,b.jsx)("td",{className:"p-2 font-mono",children:(0,j.M)(a)??""}),(0,b.jsx)("td",{className:"p-2",children:"mcpServer"===a.kind||"a2aAgent"===a.kind?a.credentialKind:"mcpClient"===a.kind?"MCP client":"A2A client"}),(0,b.jsx)("td",{className:"p-2",children:(0,b.jsx)(k.T,{tone:c.tone,label:c.label})}),(0,b.jsx)("td",{className:"p-2",children:a.proxyShipName??""}),(0,b.jsx)("td",{className:"p-2",children:h?(0,b.jsx)(m,{party:a,fleetId:d}):null})]},a.name)})})]})}):(0,b.jsx)("p",{role:"alert",className:"text-tone-attention-fg",children:g.refusal}),void 0===i?null:(0,b.jsx)(n,{fleetId:d,owners:i})]})}var p=a.i(22126);async function q({searchParams:a}){let d=await (0,e._)({path:c.f,searchParams:await a});return"noSignIn"===d.kind?(0,b.jsx)(p.f,{}):(0,b.jsx)(o,{page:d})}a.s(["default",0,q,"metadata",0,{title:"Parties"}],5103)},95412,function(a){a.n(a.i(5103))}];
1
+ module.exports=[5103,a=>{"use strict";var b=a.i(7997),c=a.i(33621),d=a.i(66680),e=a.i(66283),f=a.i(29493),g=a.i(69372),h=a.i(49144),i=a.i(69912),j=a.i(65253),k=a.i(98323),l=a.i(5901);function m({party:a,fleetId:c}){return(0,b.jsxs)("div",{className:"grid gap-2",children:["awaitingCrew"===a.state?(0,b.jsxs)(g.ActionForm,{action:l.P,fleetId:c,submit:{label:"Crew",pending:"Crewing…"},className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name}),(0,b.jsx)("input",{className:h.w,name:"secret",placeholder:"secret from a new starting prompt",required:!0})]}):null,"mcpServer"===a.kind&&"crewed"===a.state?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g.ActionForm,{action:l.g,fleetId:c,submit:{label:"State its tools",pending:"Stating…",kind:"secondary"},children:(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name})}),(0,b.jsxs)(g.ActionForm,{action:l.p,fleetId:c,submit:{label:"Mark",pending:"Marking…",kind:"secondary"},className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("input",{type:"hidden",name:"name",value:a.name}),(0,b.jsx)("input",{className:h.w,name:"tool",placeholder:"tool",required:!0,maxLength:128}),(0,b.jsxs)("label",{className:"flex items-center gap-1",children:[(0,b.jsx)("input",{type:"checkbox",name:"isRepeatable"})," repeatable"]})]})]}):null]})}function n({fleetId:a,owners:c}){return(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,children:[(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Approve an MCP server"}),(0,b.jsxs)(g.ActionForm,{action:l.L,fleetId:a,submit:{label:"Approve",pending:"Approving…"},testId:"parties-approve",children:[(0,b.jsx)("input",{type:"hidden",name:"requestId",value:(0,d.randomUUID)()}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:h.w,name:"name",required:!0})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP URL"}),(0,b.jsx)("input",{className:h.w,name:"url",type:"url",required:!0})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsx)("select",{className:h.w,name:"credentialKind",defaultValue:"bearer",children:f.x.map(({kind:a,label:c})=>(0,b.jsx)("option",{value:a,children:c},a))})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:h.w,name:"token",type:"password"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:h.w,name:"clientId"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:h.w,name:"clientSecret",type:"password"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:h.w,name:"issuer",type:"url"})]}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:h.w,name:"scope"})]}),(0,b.jsx)(i.f,{choices:c.isOk?c.value:[],current:null,help:"A person ship or argo. It answers for this server.",refusal:c.isOk?void 0:c.refusal}),(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:h.w,name:"concurrencyLimit",type:"number",min:1,max:10,defaultValue:4})]})]})]})}async function o({page:a}){let{api:c,fleetId:d,scopes:f}=a,g=await (0,e.F)(c.parties.list.query()),h=f.includes("fleet:manage"),i=h?await (0,e.F)(c.parties.ownerChoices.query()):void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Parties"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Outside MCP servers approved for this fleet, each behind its proxy ship."}),g.isOk?0===g.value.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No party yet."}):(0,b.jsx)("div",{className:"overflow-x-auto",children:(0,b.jsxs)("table",{className:"w-full text-left","data-testid":"parties-table",children:[(0,b.jsx)("thead",{children:(0,b.jsxs)("tr",{className:"border-b border-border",children:[(0,b.jsx)("th",{className:"p-2",children:"Name"}),(0,b.jsx)("th",{className:"p-2",children:"URL"}),(0,b.jsx)("th",{className:"p-2",children:"Credential"}),(0,b.jsx)("th",{className:"p-2",children:"State"}),(0,b.jsx)("th",{className:"p-2",children:"Proxy ship"}),(0,b.jsx)("th",{className:"p-2"})]})}),(0,b.jsx)("tbody",{children:g.value.map(a=>{let c=j.Y[a.state];return(0,b.jsxs)("tr",{className:"border-b border-border align-top",children:[(0,b.jsx)("td",{className:"p-2",children:a.name}),(0,b.jsx)("td",{className:"p-2 font-mono",children:(0,j.M)(a)??""}),(0,b.jsx)("td",{className:"p-2",children:"mcpServer"===a.kind||"a2aAgent"===a.kind?a.credentialKind:"mcpClient"===a.kind?"MCP client":"A2A client"}),(0,b.jsx)("td",{className:"p-2",children:(0,b.jsx)(k.T,{tone:c.tone,label:c.label})}),(0,b.jsx)("td",{className:"p-2",children:a.proxyShipName??""}),(0,b.jsx)("td",{className:"p-2",children:h?(0,b.jsx)(m,{party:a,fleetId:d}):null})]},a.name)})})]})}):(0,b.jsx)("p",{role:"alert",className:"text-tone-attention-fg",children:g.refusal}),void 0===i?null:(0,b.jsx)(n,{fleetId:d,owners:i})]})}var p=a.i(22126);async function q({searchParams:a}){let d=await (0,e._)({path:c.f,searchParams:await a});return"noSignIn"===d.kind?(0,b.jsx)(p.f,{}):(0,b.jsx)(o,{page:d})}a.s(["default",0,q],5103)},95412,function(a){a.n(a.i(5103))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28console%29_parties_page_tsx_0pp63ghly3eyp._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/app/%28console%29/parties/page.tsx","../../../../../web/features/parties/ui/parties.tsx"],"sourcesContent":["import type { Metadata } from 'next';\n\nimport { PARTIES_PATH } from '../../../features/parties/paths';\nimport { Parties } from '../../../features/parties/ui/parties';\nimport { NoSignIn } from '../../../features/sign-in/ui/no-sign-in';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Parties' };\n\nexport default async function PartiesPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const page = await signedInPage({ path: PARTIES_PATH, searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <Parties page={page} />;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { CREDENTIAL_KINDS } from '../../forms/server-credential';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { outsideAddressOf, PARTY_STATES, type ListedParty } from '../../outside-parties/party-kinds';\nimport { StatusBadge } from '../../outside-parties/ui/status-badge';\nimport { approveParty, crewParty, markTool, stateParty } from '../actions';\n\n/** The scope that approves, crews and states parties (0056). */\nconst MANAGING_SCOPE = 'fleet:manage';\n\nfunction PartyForms({ party, fleetId }: { party: ListedParty; fleetId: string }) {\n return (\n <div className=\"grid gap-2\">\n {party.state === 'awaitingCrew' ? (\n <ActionForm action={crewParty} fleetId={fleetId} submit={{ label: 'Crew', pending: 'Crewing…' }} className=\"flex flex-wrap items-center gap-2\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n <input className={INPUT} name=\"secret\" placeholder=\"secret from a new starting prompt\" required />\n </ActionForm>\n ) : null}\n {party.kind === 'mcpServer' && party.state === 'crewed' ? (\n <>\n <ActionForm action={stateParty} fleetId={fleetId} submit={{ label: 'State its tools', pending: 'Stating…', kind: 'secondary' }}>\n <input type=\"hidden\" name=\"name\" value={party.name} />\n </ActionForm>\n <ActionForm action={markTool} fleetId={fleetId} submit={{ label: 'Mark', pending: 'Marking…', kind: 'secondary' }} className=\"flex flex-wrap items-center gap-2\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n <input className={INPUT} name=\"tool\" placeholder=\"tool\" required maxLength={128} />\n <label className=\"flex items-center gap-1\">\n <input type=\"checkbox\" name=\"isRepeatable\" /> repeatable\n </label>\n </ActionForm>\n </>\n ) : null}\n </div>\n );\n}\n\nfunction ApproveForm({ fleetId, owners }: { fleetId: string; owners: OwnerChoices }) {\n return (\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-section font-semibold\">Approve an MCP server</h2>\n <ActionForm action={approveParty} fleetId={fleetId} submit={{ label: 'Approve', pending: 'Approving…' }} testId=\"parties-approve\">\n <input type=\"hidden\" name=\"requestId\" value={randomUUID()} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <label className={LABEL}>\n <span>Streamable HTTP URL</span>\n <input className={INPUT} name=\"url\" type=\"url\" required />\n </label>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" defaultValue=\"bearer\">\n {CREDENTIAL_KINDS.map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} name=\"token\" type=\"password\" />\n </label>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} name=\"clientId\" />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} name=\"clientSecret\" type=\"password\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} name=\"issuer\" type=\"url\" />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} name=\"scope\" />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this server.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} name=\"concurrencyLimit\" type=\"number\" min={1} max={10} defaultValue={4} />\n </label>\n </ActionForm>\n </section>\n );\n}\n\n/**\n * The Parties page (header design H5: argo's page, now for accounts by\n * scope): the fleet's outside MCP servers, each behind its proxy ship, and\n * for an account holding fleet:manage the forms that approve, crew, state\n * and mark them.\n */\nexport async function Parties({ page }: { page: SignedInPage }) {\n const { api, fleetId, scopes } = page;\n const parties = await readOf(api.parties.list.query());\n const canManage = scopes.includes(MANAGING_SCOPE);\n const owners = canManage ? await readOf(api.parties.ownerChoices.query()) : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Parties</h1>\n <p className=\"text-muted-foreground\">Outside MCP servers approved for this fleet, each behind its proxy ship.</p>\n {!parties.isOk ? (\n <p role=\"alert\" className=\"text-tone-attention-fg\">\n {parties.refusal}\n </p>\n ) : parties.value.length === 0 ? (\n <p className=\"text-muted-foreground\">No party yet.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left\" data-testid=\"parties-table\">\n <thead>\n <tr className=\"border-b border-border\">\n <th className=\"p-2\">Name</th>\n <th className=\"p-2\">URL</th>\n <th className=\"p-2\">Credential</th>\n <th className=\"p-2\">State</th>\n <th className=\"p-2\">Proxy ship</th>\n <th className=\"p-2\" />\n </tr>\n </thead>\n <tbody>\n {parties.value.map((party) => {\n const state = PARTY_STATES[party.state];\n return (\n <tr key={party.name} className=\"border-b border-border align-top\">\n <td className=\"p-2\">{party.name}</td>\n <td className=\"p-2 font-mono\">{outsideAddressOf(party) ?? ''}</td>\n <td className=\"p-2\">{party.kind === 'mcpServer' || party.kind === 'a2aAgent' ? party.credentialKind : party.kind === 'mcpClient' ? 'MCP client' : 'A2A client'}</td>\n <td className=\"p-2\">\n <StatusBadge tone={state.tone} label={state.label} />\n </td>\n <td className=\"p-2\">{party.proxyShipName ?? ''}</td>\n <td className=\"p-2\">{canManage ? <PartyForms party={party} fleetId={fleetId} /> : null}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n {owners === undefined ? null : <ApproveForm fleetId={fleetId} owners={owners} />}\n </div>\n );\n}\n"],"names":["MANAGING_SCOPE","PartyForms","party","fleetId","className","state","action","submit","label","pending","type","name","value","placeholder","required","kind","maxLength","ApproveForm","owners","testId","defaultValue","map","choices","isOk","current","help","refusal","undefined","min","max","Parties","page","api","scopes","parties","list","query","canManage","includes","ownerChoices","role","length","credentialKind","tone","proxyShipName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/app/%28console%29/parties/page.tsx","../../../../../web/features/parties/ui/parties.tsx"],"sourcesContent":["import { PARTIES_PATH } from '../../../features/parties/paths';\nimport { Parties } from '../../../features/parties/ui/parties';\nimport { NoSignIn } from '../../../features/sign-in/ui/no-sign-in';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\n\nexport default async function PartiesPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const page = await signedInPage({ path: PARTIES_PATH, searchParams: await searchParams });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <Parties page={page} />;\n}\n","import { randomUUID } from 'node:crypto';\n\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { CREDENTIAL_KINDS } from '../../forms/server-credential';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { outsideAddressOf, PARTY_STATES, type ListedParty } from '../../outside-parties/party-kinds';\nimport { StatusBadge } from '../../outside-parties/ui/status-badge';\nimport { approveParty, crewParty, markTool, stateParty } from '../actions';\n\n/** The scope that approves, crews and states parties (0056). */\nconst MANAGING_SCOPE = 'fleet:manage';\n\nfunction PartyForms({ party, fleetId }: { party: ListedParty; fleetId: string }) {\n return (\n <div className=\"grid gap-2\">\n {party.state === 'awaitingCrew' ? (\n <ActionForm action={crewParty} fleetId={fleetId} submit={{ label: 'Crew', pending: 'Crewing…' }} className=\"flex flex-wrap items-center gap-2\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n <input className={INPUT} name=\"secret\" placeholder=\"secret from a new starting prompt\" required />\n </ActionForm>\n ) : null}\n {party.kind === 'mcpServer' && party.state === 'crewed' ? (\n <>\n <ActionForm action={stateParty} fleetId={fleetId} submit={{ label: 'State its tools', pending: 'Stating…', kind: 'secondary' }}>\n <input type=\"hidden\" name=\"name\" value={party.name} />\n </ActionForm>\n <ActionForm action={markTool} fleetId={fleetId} submit={{ label: 'Mark', pending: 'Marking…', kind: 'secondary' }} className=\"flex flex-wrap items-center gap-2\">\n <input type=\"hidden\" name=\"name\" value={party.name} />\n <input className={INPUT} name=\"tool\" placeholder=\"tool\" required maxLength={128} />\n <label className=\"flex items-center gap-1\">\n <input type=\"checkbox\" name=\"isRepeatable\" /> repeatable\n </label>\n </ActionForm>\n </>\n ) : null}\n </div>\n );\n}\n\nfunction ApproveForm({ fleetId, owners }: { fleetId: string; owners: OwnerChoices }) {\n return (\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-section font-semibold\">Approve an MCP server</h2>\n <ActionForm action={approveParty} fleetId={fleetId} submit={{ label: 'Approve', pending: 'Approving…' }} testId=\"parties-approve\">\n <input type=\"hidden\" name=\"requestId\" value={randomUUID()} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <label className={LABEL}>\n <span>Streamable HTTP URL</span>\n <input className={INPUT} name=\"url\" type=\"url\" required />\n </label>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" defaultValue=\"bearer\">\n {CREDENTIAL_KINDS.map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} name=\"token\" type=\"password\" />\n </label>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} name=\"clientId\" />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} name=\"clientSecret\" type=\"password\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} name=\"issuer\" type=\"url\" />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} name=\"scope\" />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this server.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} name=\"concurrencyLimit\" type=\"number\" min={1} max={10} defaultValue={4} />\n </label>\n </ActionForm>\n </section>\n );\n}\n\n/**\n * The Parties page (header design H5: argo's page, now for accounts by\n * scope): the fleet's outside MCP servers, each behind its proxy ship, and\n * for an account holding fleet:manage the forms that approve, crew, state\n * and mark them.\n */\nexport async function Parties({ page }: { page: SignedInPage }) {\n const { api, fleetId, scopes } = page;\n const parties = await readOf(api.parties.list.query());\n const canManage = scopes.includes(MANAGING_SCOPE);\n const owners = canManage ? await readOf(api.parties.ownerChoices.query()) : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Parties</h1>\n <p className=\"text-muted-foreground\">Outside MCP servers approved for this fleet, each behind its proxy ship.</p>\n {!parties.isOk ? (\n <p role=\"alert\" className=\"text-tone-attention-fg\">\n {parties.refusal}\n </p>\n ) : parties.value.length === 0 ? (\n <p className=\"text-muted-foreground\">No party yet.</p>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-left\" data-testid=\"parties-table\">\n <thead>\n <tr className=\"border-b border-border\">\n <th className=\"p-2\">Name</th>\n <th className=\"p-2\">URL</th>\n <th className=\"p-2\">Credential</th>\n <th className=\"p-2\">State</th>\n <th className=\"p-2\">Proxy ship</th>\n <th className=\"p-2\" />\n </tr>\n </thead>\n <tbody>\n {parties.value.map((party) => {\n const state = PARTY_STATES[party.state];\n return (\n <tr key={party.name} className=\"border-b border-border align-top\">\n <td className=\"p-2\">{party.name}</td>\n <td className=\"p-2 font-mono\">{outsideAddressOf(party) ?? ''}</td>\n <td className=\"p-2\">{party.kind === 'mcpServer' || party.kind === 'a2aAgent' ? party.credentialKind : party.kind === 'mcpClient' ? 'MCP client' : 'A2A client'}</td>\n <td className=\"p-2\">\n <StatusBadge tone={state.tone} label={state.label} />\n </td>\n <td className=\"p-2\">{party.proxyShipName ?? ''}</td>\n <td className=\"p-2\">{canManage ? <PartyForms party={party} fleetId={fleetId} /> : null}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n {owners === undefined ? null : <ApproveForm fleetId={fleetId} owners={owners} />}\n </div>\n );\n}\n"],"names":["MANAGING_SCOPE","PartyForms","party","fleetId","className","state","action","submit","label","pending","type","name","value","placeholder","required","kind","maxLength","ApproveForm","owners","testId","defaultValue","map","choices","isOk","current","help","refusal","undefined","min","max","Parties","page","api","scopes","parties","list","query","canManage","includes","ownerChoices","role","length","credentialKind","tone","proxyShipName"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[61991,a=>{"use strict";var b=a.i(7997),c=a.i(22126),d=a.i(76890),e=a.i(55476),f=a.i(66283),g=a.i(69372),h=a.i(49144),i=a.i(98323),j=a.i(434);let k={made:{tone:"waiting",label:"Made"},waitingForInstall:{tone:"waiting",label:"Waiting for install"},inSlack:{tone:"ok",label:"In Slack"},removedInSlack:{tone:"attention",label:"Removed in Slack"}},l={installed:{tone:"ok",message:"The gateway's bot is in Slack"},refused:{tone:"attention",message:"The install did not start here, took longer than ten minutes, or Slack refused it: press Install again"},"not-connected":{tone:"attention",message:"The fleet is connected to no Slack workspace now: connect it first"},"other-workspace":{tone:"attention",message:"Slack installed into another workspace than the fleet's: install into the connected workspace"},unavailable:{tone:"attention",message:"Slack did not answer: press Install again"},cancelled:{tone:"attention",message:"The install was cancelled in Slack: nothing changed"}},m={notMade:{tone:"waiting",label:"Not made yet"},made:{tone:"waiting",label:"Waiting for install"},installed:{tone:"ok",label:"In Slack"}};function n({children:a}){return(0,b.jsx)("p",{role:"alert",className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a})}function o({fleetId:a,label:c}){return(0,b.jsx)(g.ActionForm,{action:j.N,fleetId:a,submit:{label:c,pending:"Connecting…"},testId:"slack-connect-form",children:(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"App configuration refresh token"}),(0,b.jsx)("input",{className:h.w,type:"password",name:"refreshToken",required:!0,autoComplete:"off","data-testid":"slack-refresh-token"}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"Slack issues it for you and this workspace on its app management page, under Your App Configuration Tokens."})]})})}function p({fleetId:a,bots:c,canChange:f,isTokenFresh:l}){return(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-bots",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Ships in Slack"}),f&&l?(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.K,a),"data-testid":"slack-expose",children:"Expose a ship…"}):null]}),0===c.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No ship is a Slack bot yet."}):(0,b.jsx)("ul",{className:"grid gap-3",children:c.map(c=>(0,b.jsxs)("li",{className:"grid gap-2 border-t border-border pt-3","data-testid":"slack-bot",children:[(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("strong",{children:c.shipName}),c.botName===c.shipName?null:(0,b.jsxs)("span",{className:"text-muted-foreground",children:["In Slack as ",c.botName," until Slack is told the new name"]}),(0,b.jsx)(i.T,{tone:k[c.state].tone,label:k[c.state].label})]}),f?(0,b.jsxs)("div",{className:"flex flex-wrap items-start gap-2",children:["inSlack"!==c.state&&l?(0,b.jsx)(g.ActionForm,{action:j.M,fleetId:a,submit:{label:"Install",pending:"Opening Slack…"},className:"grid gap-2",testId:"slack-bot-install-form",children:(0,b.jsx)("input",{type:"hidden",name:"appId",value:c.appId})}):null,l?(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)((0,d.b)(c.appId),a),"data-testid":"slack-bot-remove",children:"Remove"}):null]}):null]},c.appId))})]})}async function q({page:a,install:c}){var k;let{api:r,fleetId:s}=a,t=await (0,f.F)(r.slack.view.query()),u=void 0!==(k=c)&&Object.hasOwn(l,k)?l[k]:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Slack"}),void 0===u?null:"ok"===u.tone?(0,b.jsx)("p",{role:"status",className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg","data-testid":"slack-install-outcome",children:u.message}):(0,b.jsx)(n,{children:u.message}),t.isOk?"notConnected"===t.value.state?(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-not-connected",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Connect a Slack workspace"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"The fleet connects one workspace. With it the gateway makes its own bot, named after the fleet."}),t.value.canChange?(0,b.jsx)(o,{fleetId:s,label:"Connect"}):(0,b.jsx)("p",{className:"text-muted-foreground",children:"Connecting Slack needs gateway:slack."})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-workspace",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:t.value.workspace.name??t.value.workspace.teamId}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Connected by ",t.value.connectedBy," on ",new Date(t.value.connectedAt).toLocaleDateString("en-GB",{day:"numeric",month:"long",year:"numeric"})]}),"fresh"===t.value.tokenState?(0,b.jsx)("span",{children:(0,b.jsx)(i.T,{tone:"ok",label:"Configuration token fresh"})}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(n,{children:"Slack refused the configuration token. Connect again to make or change bots; bots already installed keep working."}),t.value.canChange?(0,b.jsx)(o,{fleetId:s,label:"Connect again"}):null]}),t.value.canChange?(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.Q,s),"data-testid":"slack-disconnect",children:"Disconnect"})}):null]}),(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-gateway-bot",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"The gateway's bot"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"It shows a person what waits for their person ship, in a direct message."}),(0,b.jsx)("span",{children:(0,b.jsx)(i.T,{tone:m[t.value.gatewayBot].tone,label:m[t.value.gatewayBot].label})}),t.value.canChange&&"installed"!==t.value.gatewayBot&&"fresh"===t.value.tokenState?(0,b.jsx)(g.ActionForm,{action:j.M,fleetId:s,submit:{label:"Install",pending:"Opening Slack…"},testId:"slack-install-form"}):null]}),(0,b.jsx)(p,{fleetId:s,bots:t.value.bots,canChange:t.value.canChange,isTokenFresh:"fresh"===t.value.tokenState})]}):(0,b.jsx)(n,{children:t.refusal})]})}async function r({searchParams:a}){let e=await a,g=await (0,f._)({path:d.E,searchParams:e});return"noSignIn"===g.kind?(0,b.jsx)(c.f,{}):(0,b.jsx)(q,{page:g,install:"string"==typeof e.install?e.install:void 0})}a.s(["default",0,r,"metadata",0,{title:"Slack"}],61991)},26055,function(a){a.n(a.i(61991))}];
1
+ module.exports=[61991,a=>{"use strict";var b=a.i(7997),c=a.i(22126),d=a.i(76890),e=a.i(55476),f=a.i(66283),g=a.i(69372),h=a.i(49144),i=a.i(98323),j=a.i(434);let k={made:{tone:"waiting",label:"Made"},waitingForInstall:{tone:"waiting",label:"Waiting for install"},inSlack:{tone:"ok",label:"In Slack"},removedInSlack:{tone:"attention",label:"Removed in Slack"}},l={installed:{tone:"ok",message:"The gateway's bot is in Slack"},refused:{tone:"attention",message:"The install did not start here, took longer than ten minutes, or Slack refused it: press Install again"},"not-connected":{tone:"attention",message:"The fleet is connected to no Slack workspace now: connect it first"},"other-workspace":{tone:"attention",message:"Slack installed into another workspace than the fleet's: install into the connected workspace"},unavailable:{tone:"attention",message:"Slack did not answer: press Install again"},cancelled:{tone:"attention",message:"The install was cancelled in Slack: nothing changed"}},m={notMade:{tone:"waiting",label:"Not made yet"},made:{tone:"waiting",label:"Waiting for install"},installed:{tone:"ok",label:"In Slack"}};function n({children:a}){return(0,b.jsx)("p",{role:"alert",className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a})}function o({fleetId:a,label:c}){return(0,b.jsx)(g.ActionForm,{action:j.N,fleetId:a,submit:{label:c,pending:"Connecting…"},testId:"slack-connect-form",children:(0,b.jsxs)("label",{className:h.z,children:[(0,b.jsx)("span",{children:"App configuration refresh token"}),(0,b.jsx)("input",{className:h.w,type:"password",name:"refreshToken",required:!0,autoComplete:"off","data-testid":"slack-refresh-token"}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"Slack issues it for you and this workspace on its app management page, under Your App Configuration Tokens."})]})})}function p({fleetId:a,bots:c,canChange:f,isTokenFresh:l}){return(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-bots",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Ships in Slack"}),f&&l?(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.K,a),"data-testid":"slack-expose",children:"Expose a ship…"}):null]}),0===c.length?(0,b.jsx)("p",{className:"text-muted-foreground",children:"No ship is a Slack bot yet."}):(0,b.jsx)("ul",{className:"grid gap-3",children:c.map(c=>(0,b.jsxs)("li",{className:"grid gap-2 border-t border-border pt-3","data-testid":"slack-bot",children:[(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)("strong",{children:c.shipName}),c.botName===c.shipName?null:(0,b.jsxs)("span",{className:"text-muted-foreground",children:["In Slack as ",c.botName," until Slack is told the new name"]}),(0,b.jsx)(i.T,{tone:k[c.state].tone,label:k[c.state].label})]}),f?(0,b.jsxs)("div",{className:"flex flex-wrap items-start gap-2",children:["inSlack"!==c.state&&l?(0,b.jsx)(g.ActionForm,{action:j.M,fleetId:a,submit:{label:"Install",pending:"Opening Slack…"},className:"grid gap-2",testId:"slack-bot-install-form",children:(0,b.jsx)("input",{type:"hidden",name:"appId",value:c.appId})}):null,l?(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)((0,d.b)(c.appId),a),"data-testid":"slack-bot-remove",children:"Remove"}):null]}):null]},c.appId))})]})}async function q({page:a,install:c}){var k;let{api:r,fleetId:s}=a,t=await (0,f.F)(r.slack.view.query()),u=void 0!==(k=c)&&Object.hasOwn(l,k)?l[k]:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Slack"}),void 0===u?null:"ok"===u.tone?(0,b.jsx)("p",{role:"status",className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg","data-testid":"slack-install-outcome",children:u.message}):(0,b.jsx)(n,{children:u.message}),t.isOk?"notConnected"===t.value.state?(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-not-connected",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Connect a Slack workspace"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"The fleet connects one workspace. With it the gateway makes its own bot, named after the fleet."}),t.value.canChange?(0,b.jsx)(o,{fleetId:s,label:"Connect"}):(0,b.jsx)("p",{className:"text-muted-foreground",children:"Connecting Slack needs gateway:slack."})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-workspace",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:t.value.workspace.name??t.value.workspace.teamId}),(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Connected by ",t.value.connectedBy," on ",new Date(t.value.connectedAt).toLocaleDateString("en-GB",{day:"numeric",month:"long",year:"numeric"})]}),"fresh"===t.value.tokenState?(0,b.jsx)("span",{children:(0,b.jsx)(i.T,{tone:"ok",label:"Configuration token fresh"})}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(n,{children:"Slack refused the configuration token. Connect again to make or change bots; bots already installed keep working."}),t.value.canChange?(0,b.jsx)(o,{fleetId:s,label:"Connect again"}):null]}),t.value.canChange?(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.Q,s),"data-testid":"slack-disconnect",children:"Disconnect"})}):null]}),(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,"data-testid":"slack-gateway-bot",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"The gateway's bot"}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"It shows a person what waits for their person ship, in a direct message."}),(0,b.jsx)("span",{children:(0,b.jsx)(i.T,{tone:m[t.value.gatewayBot].tone,label:m[t.value.gatewayBot].label})}),t.value.canChange&&"installed"!==t.value.gatewayBot&&"fresh"===t.value.tokenState?(0,b.jsx)(g.ActionForm,{action:j.M,fleetId:s,submit:{label:"Install",pending:"Opening Slack…"},testId:"slack-install-form"}):null]}),(0,b.jsx)(p,{fleetId:s,bots:t.value.bots,canChange:t.value.canChange,isTokenFresh:"fresh"===t.value.tokenState})]}):(0,b.jsx)(n,{children:t.refusal})]})}async function r({searchParams:a}){let e=await a,g=await (0,f._)({path:d.E,searchParams:e});return"noSignIn"===g.kind?(0,b.jsx)(c.f,{}):(0,b.jsx)(q,{page:g,install:"string"==typeof e.install?e.install:void 0})}a.s(["default",0,r],61991)},26055,function(a){a.n(a.i(61991))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28console%29_slack_page_tsx_0ts7fo7pqicq6._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/app/%28console%29/slack/page.tsx","../../../../../web/features/slack/ui/slack.tsx","../../../../../web/features/slack/bot-states.ts","../../../../../web/features/slack/install-outcomes.ts"],"sourcesContent":["import type { Metadata } from 'next';\n\nimport { NoSignIn } from '../../../features/sign-in/ui/no-sign-in';\nimport { SLACK_PATH } from '../../../features/slack/paths';\nimport { Slack } from '../../../features/slack/ui/slack';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Slack' };\n\nexport default async function SlackPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const parameters = await searchParams;\n const page = await signedInPage({ path: SLACK_PATH, searchParams: parameters });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <Slack page={page} install={typeof parameters.install === 'string' ? parameters.install : undefined} />;\n}\n","import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { StatusBadge } from '../../outside-parties/ui/status-badge';\nimport { connectSlack, installBot } from '../actions';\nimport { BOT_STATES } from '../bot-states';\nimport { installOutcomeOf } from '../install-outcomes';\nimport { DISCONNECT_SLACK_PATH, EXPOSE_SHIP_PATH, removeBotPath } from '../paths';\n\ninterface ShownBot { appId: string; shipName: string; botName: string; state: keyof typeof BOT_STATES }\n\n/** What the gateway's bot shows as, by its state. */\nconst GATEWAY_BOT_STATES = {\n notMade: { tone: 'waiting', label: 'Not made yet' },\n made: { tone: 'waiting', label: 'Waiting for install' },\n installed: { tone: 'ok', label: 'In Slack' },\n} as const;\n\nfunction Alert({ children }: { children: React.ReactNode }) {\n return (\n <p role=\"alert\" className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {children}\n </p>\n );\n}\n\n/** The configuration token's field and Connect, or Connect again once Slack refused the kept one. */\nfunction ConnectForm({ fleetId, label }: { fleetId: string; label: string }) {\n return (\n <ActionForm action={connectSlack} fleetId={fleetId} submit={{ label, pending: 'Connecting…' }} testId=\"slack-connect-form\">\n <label className={LABEL}>\n <span>App configuration refresh token</span>\n <input className={INPUT} type=\"password\" name=\"refreshToken\" required autoComplete=\"off\" data-testid=\"slack-refresh-token\" />\n <span className=\"text-caption text-muted-foreground\">Slack issues it for you and this workspace on its app management page, under Your App Configuration Tokens.</span>\n </label>\n </ActionForm>\n );\n}\n\n/** The ships exposed as bots, each with its state, Install and Remove for an account holding gateway:slack, and Expose a ship…. */\nfunction ShipsInSlack({ fleetId, bots, canChange, isTokenFresh }: { fleetId: string; bots: readonly ShownBot[]; canChange: boolean; isTokenFresh: boolean }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-bots\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <h2 className=\"text-heading font-semibold\">Ships in Slack</h2>\n {canChange && isTokenFresh ? (\n <a className={BUTTONS.secondary} href={inFleet(EXPOSE_SHIP_PATH, fleetId)} data-testid=\"slack-expose\">\n Expose a ship…\n </a>\n ) : null}\n </div>\n {bots.length === 0 ? (\n <p className=\"text-muted-foreground\">No ship is a Slack bot yet.</p>\n ) : (\n <ul className=\"grid gap-3\">\n {bots.map((bot) => (\n <li key={bot.appId} className=\"grid gap-2 border-t border-border pt-3\" data-testid=\"slack-bot\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <strong>{bot.shipName}</strong>\n {bot.botName === bot.shipName ? null : <span className=\"text-muted-foreground\">In Slack as {bot.botName} until Slack is told the new name</span>}\n <StatusBadge tone={BOT_STATES[bot.state].tone} label={BOT_STATES[bot.state].label} />\n </span>\n {canChange ? (\n <div className=\"flex flex-wrap items-start gap-2\">\n {bot.state === 'inSlack' || !isTokenFresh ? null : (\n <ActionForm action={installBot} fleetId={fleetId} submit={{ label: 'Install', pending: 'Opening Slack…' }} className=\"grid gap-2\" testId=\"slack-bot-install-form\">\n <input type=\"hidden\" name=\"appId\" value={bot.appId} />\n </ActionForm>\n )}\n {isTokenFresh ? (\n <a className={BUTTONS.secondary} href={inFleet(removeBotPath(bot.appId), fleetId)} data-testid=\"slack-bot-remove\">\n Remove\n </a>\n ) : null}\n </div>\n ) : null}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n}\n\n/**\n * The Slack page (gateway scopes 9.6): the workspace and its configuration\n * token's state, the gateway's bot, the ships in Slack with their states,\n * Expose a ship…, Install, Remove and Disconnect, for an account holding\n * gateway:slack; the same state, read-only, for others.\n */\nexport async function Slack({ page, install }: { page: SignedInPage; install: string | undefined }) {\n const { api, fleetId } = page;\n const read = await readOf(api.slack.view.query());\n const outcome = installOutcomeOf(install);\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Slack</h1>\n {outcome === undefined ? null : outcome.tone === 'ok' ? (\n <p role=\"status\" className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\" data-testid=\"slack-install-outcome\">\n {outcome.message}\n </p>\n ) : (\n <Alert>{outcome.message}</Alert>\n )}\n {!read.isOk ? (\n <Alert>{read.refusal}</Alert>\n ) : read.value.state === 'notConnected' ? (\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-not-connected\">\n <h2 className=\"text-heading font-semibold\">Connect a Slack workspace</h2>\n <p className=\"text-muted-foreground\">The fleet connects one workspace. With it the gateway makes its own bot, named after the fleet.</p>\n {read.value.canChange ? <ConnectForm fleetId={fleetId} label=\"Connect\" /> : <p className=\"text-muted-foreground\">Connecting Slack needs gateway:slack.</p>}\n </section>\n ) : (\n <>\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-workspace\">\n <h2 className=\"text-heading font-semibold\">{read.value.workspace.name ?? read.value.workspace.teamId}</h2>\n <p className=\"text-muted-foreground\">\n Connected by {read.value.connectedBy} on {new Date(read.value.connectedAt).toLocaleDateString('en-GB', { day: 'numeric', month: 'long', year: 'numeric' })}\n </p>\n {read.value.tokenState === 'fresh' ? (\n <span>\n <StatusBadge tone=\"ok\" label=\"Configuration token fresh\" />\n </span>\n ) : (\n <>\n <Alert>Slack refused the configuration token. Connect again to make or change bots; bots already installed keep working.</Alert>\n {read.value.canChange ? <ConnectForm fleetId={fleetId} label=\"Connect again\" /> : null}\n </>\n )}\n {read.value.canChange ? (\n <div>\n <a className={BUTTONS.secondary} href={inFleet(DISCONNECT_SLACK_PATH, fleetId)} data-testid=\"slack-disconnect\">\n Disconnect\n </a>\n </div>\n ) : null}\n </section>\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-gateway-bot\">\n <h2 className=\"text-heading font-semibold\">The gateway&apos;s bot</h2>\n <p className=\"text-muted-foreground\">It shows a person what waits for their person ship, in a direct message.</p>\n <span>\n <StatusBadge tone={GATEWAY_BOT_STATES[read.value.gatewayBot].tone} label={GATEWAY_BOT_STATES[read.value.gatewayBot].label} />\n </span>\n {read.value.canChange && read.value.gatewayBot !== 'installed' && read.value.tokenState === 'fresh' ? (\n <ActionForm action={installBot} fleetId={fleetId} submit={{ label: 'Install', pending: 'Opening Slack…' }} testId=\"slack-install-form\" />\n ) : null}\n </section>\n <ShipsInSlack fleetId={fleetId} bots={read.value.bots} canChange={read.value.canChange} isTokenFresh={read.value.tokenState === 'fresh'} />\n </>\n )}\n </div>\n );\n}\n","/** How a bot's state shows on the Slack page (gateway scopes 9.2). */\nexport const BOT_STATES = {\n made: { tone: 'waiting', label: 'Made' },\n waitingForInstall: { tone: 'waiting', label: 'Waiting for install' },\n inSlack: { tone: 'ok', label: 'In Slack' },\n removedInSlack: { tone: 'attention', label: 'Removed in Slack' },\n} as const;\n","/**\n * What the Slack page says of an install Slack sent back, by the outcome the\n * gateway's install door put in the address (src/adapters/http/slack-routes.ts):\n * never a text the address carries.\n */\nconst OUTCOMES = {\n installed: { tone: 'ok', message: \"The gateway's bot is in Slack\" },\n refused: { tone: 'attention', message: 'The install did not start here, took longer than ten minutes, or Slack refused it: press Install again' },\n 'not-connected': { tone: 'attention', message: 'The fleet is connected to no Slack workspace now: connect it first' },\n 'other-workspace': { tone: 'attention', message: \"Slack installed into another workspace than the fleet's: install into the connected workspace\" },\n unavailable: { tone: 'attention', message: 'Slack did not answer: press Install again' },\n cancelled: { tone: 'attention', message: 'The install was cancelled in Slack: nothing changed' },\n} as const;\n\nexport type InstallOutcome = (typeof OUTCOMES)[keyof typeof OUTCOMES];\n\nfunction isOutcome(outcome: string): outcome is keyof typeof OUTCOMES {\n return Object.hasOwn(OUTCOMES, outcome);\n}\n\nexport function installOutcomeOf(outcome: string | undefined): InstallOutcome | undefined {\n return outcome !== undefined && isOutcome(outcome) ? OUTCOMES[outcome] : undefined;\n}\n"],"names":["BOT_STATES","made","tone","label","waitingForInstall","inSlack","removedInSlack"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/app/%28console%29/slack/page.tsx","../../../../../web/features/slack/ui/slack.tsx","../../../../../web/features/slack/bot-states.ts","../../../../../web/features/slack/install-outcomes.ts"],"sourcesContent":["import { NoSignIn } from '../../../features/sign-in/ui/no-sign-in';\nimport { SLACK_PATH } from '../../../features/slack/paths';\nimport { Slack } from '../../../features/slack/ui/slack';\nimport { signedInPage, type SearchParams } from '../../../lib/gateway-api/page-api';\n\nexport default async function SlackPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const parameters = await searchParams;\n const page = await signedInPage({ path: SLACK_PATH, searchParams: parameters });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <Slack page={page} install={typeof parameters.install === 'string' ? parameters.install : undefined} />;\n}\n","import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { StatusBadge } from '../../outside-parties/ui/status-badge';\nimport { connectSlack, installBot } from '../actions';\nimport { BOT_STATES } from '../bot-states';\nimport { installOutcomeOf } from '../install-outcomes';\nimport { DISCONNECT_SLACK_PATH, EXPOSE_SHIP_PATH, removeBotPath } from '../paths';\n\ninterface ShownBot { appId: string; shipName: string; botName: string; state: keyof typeof BOT_STATES }\n\n/** What the gateway's bot shows as, by its state. */\nconst GATEWAY_BOT_STATES = {\n notMade: { tone: 'waiting', label: 'Not made yet' },\n made: { tone: 'waiting', label: 'Waiting for install' },\n installed: { tone: 'ok', label: 'In Slack' },\n} as const;\n\nfunction Alert({ children }: { children: React.ReactNode }) {\n return (\n <p role=\"alert\" className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {children}\n </p>\n );\n}\n\n/** The configuration token's field and Connect, or Connect again once Slack refused the kept one. */\nfunction ConnectForm({ fleetId, label }: { fleetId: string; label: string }) {\n return (\n <ActionForm action={connectSlack} fleetId={fleetId} submit={{ label, pending: 'Connecting…' }} testId=\"slack-connect-form\">\n <label className={LABEL}>\n <span>App configuration refresh token</span>\n <input className={INPUT} type=\"password\" name=\"refreshToken\" required autoComplete=\"off\" data-testid=\"slack-refresh-token\" />\n <span className=\"text-caption text-muted-foreground\">Slack issues it for you and this workspace on its app management page, under Your App Configuration Tokens.</span>\n </label>\n </ActionForm>\n );\n}\n\n/** The ships exposed as bots, each with its state, Install and Remove for an account holding gateway:slack, and Expose a ship…. */\nfunction ShipsInSlack({ fleetId, bots, canChange, isTokenFresh }: { fleetId: string; bots: readonly ShownBot[]; canChange: boolean; isTokenFresh: boolean }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-bots\">\n <div className=\"flex flex-wrap items-center justify-between gap-3\">\n <h2 className=\"text-heading font-semibold\">Ships in Slack</h2>\n {canChange && isTokenFresh ? (\n <a className={BUTTONS.secondary} href={inFleet(EXPOSE_SHIP_PATH, fleetId)} data-testid=\"slack-expose\">\n Expose a ship…\n </a>\n ) : null}\n </div>\n {bots.length === 0 ? (\n <p className=\"text-muted-foreground\">No ship is a Slack bot yet.</p>\n ) : (\n <ul className=\"grid gap-3\">\n {bots.map((bot) => (\n <li key={bot.appId} className=\"grid gap-2 border-t border-border pt-3\" data-testid=\"slack-bot\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <strong>{bot.shipName}</strong>\n {bot.botName === bot.shipName ? null : <span className=\"text-muted-foreground\">In Slack as {bot.botName} until Slack is told the new name</span>}\n <StatusBadge tone={BOT_STATES[bot.state].tone} label={BOT_STATES[bot.state].label} />\n </span>\n {canChange ? (\n <div className=\"flex flex-wrap items-start gap-2\">\n {bot.state === 'inSlack' || !isTokenFresh ? null : (\n <ActionForm action={installBot} fleetId={fleetId} submit={{ label: 'Install', pending: 'Opening Slack…' }} className=\"grid gap-2\" testId=\"slack-bot-install-form\">\n <input type=\"hidden\" name=\"appId\" value={bot.appId} />\n </ActionForm>\n )}\n {isTokenFresh ? (\n <a className={BUTTONS.secondary} href={inFleet(removeBotPath(bot.appId), fleetId)} data-testid=\"slack-bot-remove\">\n Remove\n </a>\n ) : null}\n </div>\n ) : null}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n}\n\n/**\n * The Slack page (gateway scopes 9.6): the workspace and its configuration\n * token's state, the gateway's bot, the ships in Slack with their states,\n * Expose a ship…, Install, Remove and Disconnect, for an account holding\n * gateway:slack; the same state, read-only, for others.\n */\nexport async function Slack({ page, install }: { page: SignedInPage; install: string | undefined }) {\n const { api, fleetId } = page;\n const read = await readOf(api.slack.view.query());\n const outcome = installOutcomeOf(install);\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Slack</h1>\n {outcome === undefined ? null : outcome.tone === 'ok' ? (\n <p role=\"status\" className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\" data-testid=\"slack-install-outcome\">\n {outcome.message}\n </p>\n ) : (\n <Alert>{outcome.message}</Alert>\n )}\n {!read.isOk ? (\n <Alert>{read.refusal}</Alert>\n ) : read.value.state === 'notConnected' ? (\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-not-connected\">\n <h2 className=\"text-heading font-semibold\">Connect a Slack workspace</h2>\n <p className=\"text-muted-foreground\">The fleet connects one workspace. With it the gateway makes its own bot, named after the fleet.</p>\n {read.value.canChange ? <ConnectForm fleetId={fleetId} label=\"Connect\" /> : <p className=\"text-muted-foreground\">Connecting Slack needs gateway:slack.</p>}\n </section>\n ) : (\n <>\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-workspace\">\n <h2 className=\"text-heading font-semibold\">{read.value.workspace.name ?? read.value.workspace.teamId}</h2>\n <p className=\"text-muted-foreground\">\n Connected by {read.value.connectedBy} on {new Date(read.value.connectedAt).toLocaleDateString('en-GB', { day: 'numeric', month: 'long', year: 'numeric' })}\n </p>\n {read.value.tokenState === 'fresh' ? (\n <span>\n <StatusBadge tone=\"ok\" label=\"Configuration token fresh\" />\n </span>\n ) : (\n <>\n <Alert>Slack refused the configuration token. Connect again to make or change bots; bots already installed keep working.</Alert>\n {read.value.canChange ? <ConnectForm fleetId={fleetId} label=\"Connect again\" /> : null}\n </>\n )}\n {read.value.canChange ? (\n <div>\n <a className={BUTTONS.secondary} href={inFleet(DISCONNECT_SLACK_PATH, fleetId)} data-testid=\"slack-disconnect\">\n Disconnect\n </a>\n </div>\n ) : null}\n </section>\n <section className={`${CARD} grid gap-3`} data-testid=\"slack-gateway-bot\">\n <h2 className=\"text-heading font-semibold\">The gateway&apos;s bot</h2>\n <p className=\"text-muted-foreground\">It shows a person what waits for their person ship, in a direct message.</p>\n <span>\n <StatusBadge tone={GATEWAY_BOT_STATES[read.value.gatewayBot].tone} label={GATEWAY_BOT_STATES[read.value.gatewayBot].label} />\n </span>\n {read.value.canChange && read.value.gatewayBot !== 'installed' && read.value.tokenState === 'fresh' ? (\n <ActionForm action={installBot} fleetId={fleetId} submit={{ label: 'Install', pending: 'Opening Slack…' }} testId=\"slack-install-form\" />\n ) : null}\n </section>\n <ShipsInSlack fleetId={fleetId} bots={read.value.bots} canChange={read.value.canChange} isTokenFresh={read.value.tokenState === 'fresh'} />\n </>\n )}\n </div>\n );\n}\n","/** How a bot's state shows on the Slack page (gateway scopes 9.2). */\nexport const BOT_STATES = {\n made: { tone: 'waiting', label: 'Made' },\n waitingForInstall: { tone: 'waiting', label: 'Waiting for install' },\n inSlack: { tone: 'ok', label: 'In Slack' },\n removedInSlack: { tone: 'attention', label: 'Removed in Slack' },\n} as const;\n","/**\n * What the Slack page says of an install Slack sent back, by the outcome the\n * gateway's install door put in the address (src/adapters/http/slack-routes.ts):\n * never a text the address carries.\n */\nconst OUTCOMES = {\n installed: { tone: 'ok', message: \"The gateway's bot is in Slack\" },\n refused: { tone: 'attention', message: 'The install did not start here, took longer than ten minutes, or Slack refused it: press Install again' },\n 'not-connected': { tone: 'attention', message: 'The fleet is connected to no Slack workspace now: connect it first' },\n 'other-workspace': { tone: 'attention', message: \"Slack installed into another workspace than the fleet's: install into the connected workspace\" },\n unavailable: { tone: 'attention', message: 'Slack did not answer: press Install again' },\n cancelled: { tone: 'attention', message: 'The install was cancelled in Slack: nothing changed' },\n} as const;\n\nexport type InstallOutcome = (typeof OUTCOMES)[keyof typeof OUTCOMES];\n\nfunction isOutcome(outcome: string): outcome is keyof typeof OUTCOMES {\n return Object.hasOwn(OUTCOMES, outcome);\n}\n\nexport function installOutcomeOf(outcome: string | undefined): InstallOutcome | undefined {\n return outcome !== undefined && isOutcome(outcome) ? OUTCOMES[outcome] : undefined;\n}\n"],"names":["BOT_STATES","made","tone","label","waitingForInstall","inSlack","removedInSlack"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[47967,a=>{"use strict";var b=a.i(7997),c=a.i(22126),d=a.i(76890),e=a.i(55476),f=a.i(66283),g=a.i(69372),h=a.i(49144),i=a.i(434);async function j({page:a,appId:c}){let{api:k,fleetId:l}=a,m=await (0,f.F)(k.slack.view.query()),n=m.isOk&&"connected"===m.value.state?m.value.bots.find(a=>a.appId===c):void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("a",{href:(0,e.i)(d.E,l),className:"text-muted-foreground hover:text-foreground",children:"← Slack"}),void 0===n?(0,b.jsx)("p",{role:"alert",className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:m.isOk?"The gateway made no such bot in this fleet":m.refusal}):(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Remove ",n.shipName," from Slack?"]}),(0,b.jsxs)("ul",{className:"list-disc pl-5",children:[(0,b.jsx)("li",{children:"Its bot is removed from the workspace, with its conversations there"}),(0,b.jsx)("li",{children:"The ship stays in the fleet; exposing it again makes a new bot"})]}),(0,b.jsx)(g.ActionForm,{action:i.d,fleetId:l,submit:{label:`Remove ${n.shipName}`,pending:"Removing…",kind:"destructive"},testId:"slack-remove-form",children:(0,b.jsx)("input",{type:"hidden",name:"appId",value:n.appId})}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.E,l),children:"Cancel"})})]})]})}async function k({searchParams:a}){let e=await a,g="string"==typeof e.app?e.app:"",h=await (0,f._)({path:(0,d.b)(g),searchParams:e});return"noSignIn"===h.kind?(0,b.jsx)(c.f,{}):(0,b.jsx)(j,{page:h,appId:g})}a.s(["default",0,k,"metadata",0,{title:"Slack"}],47967)},42793,function(a){a.n(a.i(47967))}];
1
+ module.exports=[47967,a=>{"use strict";var b=a.i(7997),c=a.i(22126),d=a.i(76890),e=a.i(55476),f=a.i(66283),g=a.i(69372),h=a.i(49144),i=a.i(434);async function j({page:a,appId:c}){let{api:k,fleetId:l}=a,m=await (0,f.F)(k.slack.view.query()),n=m.isOk&&"connected"===m.value.state?m.value.bots.find(a=>a.appId===c):void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("a",{href:(0,e.i)(d.E,l),className:"text-muted-foreground hover:text-foreground",children:"← Slack"}),void 0===n?(0,b.jsx)("p",{role:"alert",className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:m.isOk?"The gateway made no such bot in this fleet":m.refusal}):(0,b.jsxs)("section",{className:`${h.r} grid gap-3`,children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Remove ",n.shipName," from Slack?"]}),(0,b.jsxs)("ul",{className:"list-disc pl-5",children:[(0,b.jsx)("li",{children:"Its bot is removed from the workspace, with its conversations there"}),(0,b.jsx)("li",{children:"The ship stays in the fleet; exposing it again makes a new bot"})]}),(0,b.jsx)(g.ActionForm,{action:i.d,fleetId:l,submit:{label:`Remove ${n.shipName}`,pending:"Removing…",kind:"destructive"},testId:"slack-remove-form",children:(0,b.jsx)("input",{type:"hidden",name:"appId",value:n.appId})}),(0,b.jsx)("div",{children:(0,b.jsx)("a",{className:h.x.secondary,href:(0,e.i)(d.E,l),children:"Cancel"})})]})]})}async function k({searchParams:a}){let e=await a,g="string"==typeof e.app?e.app:"",h=await (0,f._)({path:(0,d.b)(g),searchParams:e});return"noSignIn"===h.kind?(0,b.jsx)(c.f,{}):(0,b.jsx)(j,{page:h,appId:g})}a.s(["default",0,k],47967)},42793,function(a){a.n(a.i(47967))}];
2
2
 
3
3
  //# sourceMappingURL=web_app_%28console%29_slack_remove_page_tsx_15q4ril_on0ed._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/app/%28console%29/slack/remove/page.tsx","../../../../../web/features/slack/ui/remove-bot.tsx"],"sourcesContent":["import type { Metadata } from 'next';\n\nimport { NoSignIn } from '../../../../features/sign-in/ui/no-sign-in';\nimport { removeBotPath } from '../../../../features/slack/paths';\nimport { RemoveBot } from '../../../../features/slack/ui/remove-bot';\nimport { signedInPage, type SearchParams } from '../../../../lib/gateway-api/page-api';\n\nexport const metadata: Metadata = { title: 'Slack' };\n\nexport default async function RemoveBotPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const parameters = await searchParams;\n const appId = typeof parameters.app === 'string' ? parameters.app : '';\n const page = await signedInPage({ path: removeBotPath(appId), searchParams: parameters });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <RemoveBot page={page} appId={appId} />;\n}\n","import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { removeBot } from '../actions';\nimport { SLACK_PATH } from '../paths';\n\n/** Removing a ship's bot, after one confirm that lists what happens (gateway scopes 9.2). */\nexport async function RemoveBot({ page, appId }: { page: SignedInPage; appId: string }) {\n const { api, fleetId } = page;\n const read = await readOf(api.slack.view.query());\n const bot = read.isOk && read.value.state === 'connected' ? read.value.bots.find((each) => each.appId === appId) : undefined;\n return (\n <div className=\"grid gap-4\">\n <a href={inFleet(SLACK_PATH, fleetId)} className=\"text-muted-foreground hover:text-foreground\">\n ← Slack\n </a>\n {bot === undefined ? (\n <p role=\"alert\" className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {read.isOk ? 'The gateway made no such bot in this fleet' : read.refusal}\n </p>\n ) : (\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-heading font-semibold\">Remove {bot.shipName} from Slack?</h2>\n <ul className=\"list-disc pl-5\">\n <li>Its bot is removed from the workspace, with its conversations there</li>\n <li>The ship stays in the fleet; exposing it again makes a new bot</li>\n </ul>\n <ActionForm action={removeBot} fleetId={fleetId} submit={{ label: `Remove ${bot.shipName}`, pending: 'Removing…', kind: 'destructive' }} testId=\"slack-remove-form\">\n <input type=\"hidden\" name=\"appId\" value={bot.appId} />\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(SLACK_PATH, fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n )}\n </div>\n );\n}\n"],"names":["RemoveBot","page","appId","api","fleetId","read","slack","view","query","bot","isOk","value","state","bots","find","each","undefined","className","href","role","refusal","shipName","action","submit","label","pending","kind","testId","type","name","secondary"],"mappings":"uDAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCHA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,KAIO,eAAeA,EAAU,MAAEC,CAAI,OAAEC,CAAK,CAAyC,EACpF,GAAM,KAAEC,CAAG,SAAEC,CAAO,CAAE,CAAGH,EACnBI,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAM,EAACF,EAAIG,KAAK,CAACC,IAAI,CAACC,KAAK,IACxCC,EAAMJ,EAAKK,IAAI,EAAyB,cAArBL,EAAKM,KAAK,CAACC,KAAK,CAAmBP,EAAKM,KAAK,CAACE,IAAI,CAACC,IAAI,CAAC,AAACC,GAASA,EAAKb,KAAK,GAAKA,QAASc,EACnH,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAIC,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEC,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,EAAA,CAAU,CAAEd,GAAUa,UAAU,uDAA8C,iBAGtFD,IAARP,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEU,KAAK,QAAQF,UAAU,gHACvBZ,EAAKK,IAAI,CAAG,6CAA+CL,EAAKe,OAAO,GAG1E,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQH,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,WACtC,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGA,UAAU,uCAA6B,UAAQR,EAAIY,QAAQ,CAAC,kBAChE,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGJ,UAAU,2BACZ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,wEACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,sEAEN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAACK,OAAQ,EAAA,CAAS,CAAElB,QAASA,EAASmB,OAAQ,CAAEC,MAAO,CAAC,OAAO,EAAEf,EAAIY,QAAQ,CAAA,CAAE,CAAEI,QAAS,YAAaC,KAAM,aAAc,EAAGC,OAAO,6BAC9I,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMC,KAAK,SAASC,KAAK,QAAQlB,MAAOF,EAAIP,KAAK,KAEpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEe,UAAW,EAAA,CAAO,CAACa,SAAS,CAAEZ,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,EAAA,CAAU,CAAEd,YAAU,kBAQjF,CD/Be,eAAe,EAAc,cAAE,CAAY,CAA2C,EACnG,IAAM,EAAa,MAAM,EACnB,EAAkC,UAA1B,OAAOC,EAAW,GAAG,CAAgBE,EAAW,GAAG,CAAG,GAC9DF,EAAO,MAAMA,CAAAA,EAAAA,EAAAA,CAAAA,AAAY,EAAC,CAAE,KAAM,CAAA,EAAA,EAAA,CAAA,AAAa,EAACA,GAAQ,aAAcU,CAAW,SACvF,AAAkB,YAAY,CAA1B,EAAK,IAAI,CACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAQ,CAAA,CAAA,GAEX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAU,KAAM,EAAM,MAAO,GACvC,iCAVkC,CAAE,MAAO,OAAQ"}
1
+ {"version":3,"sources":["../../../../../web/app/%28console%29/slack/remove/page.tsx","../../../../../web/features/slack/ui/remove-bot.tsx"],"sourcesContent":["import { NoSignIn } from '../../../../features/sign-in/ui/no-sign-in';\nimport { removeBotPath } from '../../../../features/slack/paths';\nimport { RemoveBot } from '../../../../features/slack/ui/remove-bot';\nimport { signedInPage, type SearchParams } from '../../../../lib/gateway-api/page-api';\n\nexport default async function RemoveBotPage({ searchParams }: { searchParams: Promise<SearchParams> }) {\n const parameters = await searchParams;\n const appId = typeof parameters.app === 'string' ? parameters.app : '';\n const page = await signedInPage({ path: removeBotPath(appId), searchParams: parameters });\n if (page.kind === 'noSignIn') {\n return <NoSignIn />;\n }\n return <RemoveBot page={page} appId={appId} />;\n}\n","import { inFleet } from '../../../lib/gateway-api/page-account';\nimport { readOf, type SignedInPage } from '../../../lib/gateway-api/page-api';\nimport { ActionForm } from '../../forms/ui/action-form';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { removeBot } from '../actions';\nimport { SLACK_PATH } from '../paths';\n\n/** Removing a ship's bot, after one confirm that lists what happens (gateway scopes 9.2). */\nexport async function RemoveBot({ page, appId }: { page: SignedInPage; appId: string }) {\n const { api, fleetId } = page;\n const read = await readOf(api.slack.view.query());\n const bot = read.isOk && read.value.state === 'connected' ? read.value.bots.find((each) => each.appId === appId) : undefined;\n return (\n <div className=\"grid gap-4\">\n <a href={inFleet(SLACK_PATH, fleetId)} className=\"text-muted-foreground hover:text-foreground\">\n ← Slack\n </a>\n {bot === undefined ? (\n <p role=\"alert\" className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {read.isOk ? 'The gateway made no such bot in this fleet' : read.refusal}\n </p>\n ) : (\n <section className={`${CARD} grid gap-3`}>\n <h2 className=\"text-heading font-semibold\">Remove {bot.shipName} from Slack?</h2>\n <ul className=\"list-disc pl-5\">\n <li>Its bot is removed from the workspace, with its conversations there</li>\n <li>The ship stays in the fleet; exposing it again makes a new bot</li>\n </ul>\n <ActionForm action={removeBot} fleetId={fleetId} submit={{ label: `Remove ${bot.shipName}`, pending: 'Removing…', kind: 'destructive' }} testId=\"slack-remove-form\">\n <input type=\"hidden\" name=\"appId\" value={bot.appId} />\n </ActionForm>\n <div>\n <a className={BUTTONS.secondary} href={inFleet(SLACK_PATH, fleetId)}>\n Cancel\n </a>\n </div>\n </section>\n )}\n </div>\n );\n}\n"],"names":["RemoveBot","page","appId","api","fleetId","read","slack","view","query","bot","isOk","value","state","bots","find","each","undefined","className","href","role","refusal","shipName","action","submit","label","pending","kind","testId","type","name","secondary"],"mappings":"uDAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCDA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,KAIO,eAAeA,EAAU,MAAEC,CAAI,OAAEC,CAAK,CAAyC,EACpF,GAAM,KAAEC,CAAG,SAAEC,CAAO,CAAE,CAAGH,EACnBI,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAM,EAACF,EAAIG,KAAK,CAACC,IAAI,CAACC,KAAK,IACxCC,EAAMJ,EAAKK,IAAI,EAAyB,cAArBL,EAAKM,KAAK,CAACC,KAAK,CAAmBP,EAAKM,KAAK,CAACE,IAAI,CAACC,IAAI,CAAC,AAACC,GAASA,EAAKb,KAAK,GAAKA,QAASc,EACnH,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAIC,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEC,KAAM,CAAA,EAAA,EAAA,CAAO,AAAP,EAAQ,EAAA,CAAU,CAAEd,GAAUa,UAAU,uDAA8C,iBAGtFD,IAARP,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEU,KAAK,QAAQF,UAAU,gHACvBZ,EAAKK,IAAI,CAAG,6CAA+CL,EAAKe,OAAO,GAG1E,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQH,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,WAAW,CAAC,WACtC,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGA,UAAU,uCAA6B,UAAQR,EAAIY,QAAQ,CAAC,kBAChE,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAGJ,UAAU,2BACZ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,wEACJ,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,UAAG,sEAEN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAACK,OAAQ,EAAA,CAAS,CAAElB,QAASA,EAASmB,OAAQ,CAAEC,MAAO,CAAC,OAAO,EAAEf,EAAIY,QAAQ,CAAA,CAAE,CAAEI,QAAS,YAAaC,KAAM,aAAc,EAAGC,OAAO,6BAC9I,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMC,KAAK,SAASC,KAAK,QAAQlB,MAAOF,EAAIP,KAAK,KAEpD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEe,UAAW,EAAA,CAAO,CAACa,SAAS,CAAEZ,KAAM,CAAA,EAAA,EAAA,CAAA,AAAO,EAAC,EAAA,CAAU,CAAEd,YAAU,kBAQjF,CDnCe,eAAe,EAAc,cAAE,CAAY,CAA2C,EACnG,IAAM,EAAa,MAAM,EACnBJ,EAAkC,UAA1B,OAAO,EAAW,GAAG,CAAgB,EAAW,GAAG,CAAG,GAC9D,EAAO,MAAM,CAAA,EAAA,EAAA,CAAA,AAAY,EAAC,CAAE,KAAM,CAAA,EAAA,EAAA,CAAA,AAAa,EAAC,GAAQ,aAAcQ,CAAW,SACvF,AAAkB,YAAY,CAA1B,EAAK,IAAI,CACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAQ,CAAA,CAAA,GAEX,CAAA,EAAA,EAAA,GAAA,EAACM,EAAAA,CAAU,KAAM,EAAM,MAAO,GACvC"}