@aeolus-fleet/gateway 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/README.md +13 -6
  2. package/dist/adapters/crypto/account-sign-in-seals.d.ts +7 -0
  3. package/dist/adapters/crypto/account-sign-in-seals.js +21 -0
  4. package/dist/adapters/crypto/account-sign-in-seals.js.map +1 -0
  5. package/dist/adapters/crypto/sign-in-seals.d.ts +1 -1
  6. package/dist/adapters/crypto/sign-in-seals.js +3 -6
  7. package/dist/adapters/crypto/sign-in-seals.js.map +1 -1
  8. package/dist/adapters/fleet/core-version.d.ts +1 -1
  9. package/dist/adapters/fleet/core-version.js +1 -1
  10. package/dist/adapters/fleet/fleet-ships.d.ts +6 -0
  11. package/dist/adapters/fleet/fleet-ships.js +23 -0
  12. package/dist/adapters/fleet/fleet-ships.js.map +1 -0
  13. package/dist/adapters/fleet/proxy-ship-reads.d.ts +2 -2
  14. package/dist/adapters/fleet/proxy-ship-reads.js +6 -3
  15. package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -1
  16. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -1
  17. package/dist/adapters/fleet/rest-fleet-door.js +34 -14
  18. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  19. package/dist/adapters/http/account-sign-in-routes.d.ts +19 -0
  20. package/dist/adapters/http/account-sign-in-routes.js +61 -0
  21. package/dist/adapters/http/account-sign-in-routes.js.map +1 -0
  22. package/dist/adapters/http/forms.d.ts +9 -0
  23. package/dist/adapters/http/forms.js +23 -0
  24. package/dist/adapters/http/forms.js.map +1 -0
  25. package/dist/adapters/http/front-door.d.ts +15 -0
  26. package/dist/adapters/http/front-door.js +59 -0
  27. package/dist/adapters/http/front-door.js.map +1 -0
  28. package/dist/adapters/http/live.d.ts +2 -12
  29. package/dist/adapters/http/live.js +4 -65
  30. package/dist/adapters/http/live.js.map +1 -1
  31. package/dist/adapters/http/oauth-routes.d.ts +14 -16
  32. package/dist/adapters/http/oauth-routes.js +23 -139
  33. package/dist/adapters/http/oauth-routes.js.map +1 -1
  34. package/dist/adapters/http/person-tools.d.ts +9 -4
  35. package/dist/adapters/http/person-tools.js +49 -5
  36. package/dist/adapters/http/person-tools.js.map +1 -1
  37. package/dist/adapters/pagasae/shared-sign-in.d.ts +11 -0
  38. package/dist/adapters/pagasae/shared-sign-in.js +123 -0
  39. package/dist/adapters/pagasae/shared-sign-in.js.map +1 -0
  40. package/dist/adapters/prisma/generated/browser.d.ts +1 -1
  41. package/dist/adapters/prisma/generated/client.d.ts +1 -1
  42. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  43. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  44. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +1 -0
  45. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +1 -0
  46. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  47. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +1 -0
  48. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +1 -0
  49. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  50. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +30 -2
  51. package/dist/adapters/prisma/opened-deliveries.js +18 -12
  52. package/dist/adapters/prisma/opened-deliveries.js.map +1 -1
  53. package/dist/adapters/trpc/router.d.ts +143 -4
  54. package/dist/adapters/trpc/router.js +151 -5
  55. package/dist/adapters/trpc/router.js.map +1 -1
  56. package/dist/adapters/web/next-web-app.d.ts +10 -0
  57. package/dist/adapters/web/next-web-app.js +27 -0
  58. package/dist/adapters/web/next-web-app.js.map +1 -0
  59. package/dist/app.d.ts +9 -1
  60. package/dist/app.js +54 -28
  61. package/dist/app.js.map +1 -1
  62. package/dist/bin/aeolus-gateway.js +12 -1
  63. package/dist/bin/aeolus-gateway.js.map +1 -1
  64. package/dist/config.d.ts +18 -0
  65. package/dist/config.js +16 -1
  66. package/dist/config.js.map +1 -1
  67. package/dist/core/account-sign-in/account-in-view.d.ts +43 -0
  68. package/dist/core/account-sign-in/account-in-view.js +52 -0
  69. package/dist/core/account-sign-in/account-in-view.js.map +1 -0
  70. package/dist/core/account-sign-in/account-of-sign-in.d.ts +23 -0
  71. package/dist/core/account-sign-in/account-of-sign-in.js +41 -0
  72. package/dist/core/account-sign-in/account-of-sign-in.js.map +1 -0
  73. package/dist/core/account-sign-in/complete-account-sign-in.d.ts +37 -0
  74. package/dist/core/account-sign-in/complete-account-sign-in.js +25 -0
  75. package/dist/core/account-sign-in/complete-account-sign-in.js.map +1 -0
  76. package/dist/core/account-sign-in/ports.d.ts +92 -0
  77. package/dist/core/account-sign-in/ports.js +3 -0
  78. package/dist/core/account-sign-in/ports.js.map +1 -0
  79. package/dist/core/account-sign-in/sign-out-account.d.ts +15 -0
  80. package/dist/core/account-sign-in/sign-out-account.js +12 -0
  81. package/dist/core/account-sign-in/sign-out-account.js.map +1 -0
  82. package/dist/core/account-sign-in/start-account-sign-in.d.ts +25 -0
  83. package/dist/core/account-sign-in/start-account-sign-in.js +26 -0
  84. package/dist/core/account-sign-in/start-account-sign-in.js.map +1 -0
  85. package/dist/core/actors/authenticate-actor.d.ts +14 -15
  86. package/dist/core/actors/authenticate-actor.js +10 -12
  87. package/dist/core/actors/authenticate-actor.js.map +1 -1
  88. package/dist/core/actors/credential-of.d.ts +4 -6
  89. package/dist/core/actors/credential-of.js +4 -8
  90. package/dist/core/actors/credential-of.js.map +1 -1
  91. package/dist/core/connection/answer-pings.d.ts +19 -0
  92. package/dist/core/connection/answer-pings.js +34 -0
  93. package/dist/core/connection/answer-pings.js.map +1 -0
  94. package/dist/core/connection/ports.d.ts +18 -1
  95. package/dist/core/oauth/read-authorization.js +2 -2
  96. package/dist/core/oauth/read-authorization.js.map +1 -1
  97. package/dist/core/oauth/redirect-uri.d.ts +7 -0
  98. package/dist/core/oauth/redirect-uri.js +23 -0
  99. package/dist/core/oauth/redirect-uri.js.map +1 -1
  100. package/dist/core/operator/authenticate-operator.d.ts +4 -3
  101. package/dist/core/operator/authenticate-operator.js +4 -2
  102. package/dist/core/operator/authenticate-operator.js.map +1 -1
  103. package/dist/core/parties/list-owner-choices.d.ts +24 -0
  104. package/dist/core/parties/list-owner-choices.js +25 -0
  105. package/dist/core/parties/list-owner-choices.js.map +1 -0
  106. package/dist/core/parties/list-parties.js +1 -1
  107. package/dist/core/parties/list-parties.js.map +1 -1
  108. package/dist/core/parties/ports.d.ts +14 -5
  109. package/dist/core/parties/shown-party.d.ts +8 -2
  110. package/dist/core/parties/shown-party.js.map +1 -1
  111. package/dist/core/people/crew-person-ship.d.ts +3 -5
  112. package/dist/core/people/crew-person-ship.js +6 -5
  113. package/dist/core/people/crew-person-ship.js.map +1 -1
  114. package/dist/core/people/inbox-entry.d.ts +2 -1
  115. package/dist/core/people/inbox-entry.js +3 -0
  116. package/dist/core/people/inbox-entry.js.map +1 -1
  117. package/dist/core/people/list-ships.d.ts +17 -0
  118. package/dist/core/people/list-ships.js +20 -0
  119. package/dist/core/people/list-ships.js.map +1 -0
  120. package/dist/core/people/open-delivery.d.ts +14 -9
  121. package/dist/core/people/open-delivery.js +24 -4
  122. package/dist/core/people/open-delivery.js.map +1 -1
  123. package/dist/core/people/person-crew.d.ts +13 -1
  124. package/dist/core/people/person-crew.js.map +1 -1
  125. package/dist/core/people/ports.d.ts +42 -3
  126. package/dist/core/people/read-inbox.d.ts +15 -9
  127. package/dist/core/people/read-inbox.js +17 -6
  128. package/dist/core/people/read-inbox.js.map +1 -1
  129. package/dist/core/people/send-message.d.ts +32 -0
  130. package/dist/core/people/send-message.js +22 -0
  131. package/dist/core/people/send-message.js.map +1 -0
  132. package/dist/core/requests/ask-for-server.d.ts +2 -2
  133. package/dist/core/requests/watch-waiting.d.ts +2 -1
  134. package/dist/core/requests/watch-waiting.js +2 -2
  135. package/dist/core/requests/watch-waiting.js.map +1 -1
  136. package/dist/core/sign-in/complete-sign-in.d.ts +4 -11
  137. package/dist/core/sign-in/complete-sign-in.js +1 -23
  138. package/dist/core/sign-in/complete-sign-in.js.map +1 -1
  139. package/dist/core/sign-in/own-page.d.ts +10 -0
  140. package/dist/core/sign-in/own-page.js +35 -0
  141. package/dist/core/sign-in/own-page.js.map +1 -0
  142. package/dist/core/sign-in/ports.d.ts +3 -24
  143. package/dist/ping-worker.d.ts +20 -0
  144. package/dist/ping-worker.js +33 -0
  145. package/dist/ping-worker.js.map +1 -0
  146. package/package.json +23 -5
  147. package/src/adapters/prisma/migrations/20261021120000_opened_deliveries_sent_at/migration.sql +4 -0
  148. package/src/adapters/prisma/schema.prisma +2 -1
  149. package/web/.next/BUILD_ID +1 -0
  150. package/web/.next/app-path-routes-manifest.json +17 -0
  151. package/web/.next/build/chunks/[root-of-the-server]__17pn3jjqv9c44._.js +192 -0
  152. package/web/.next/build/chunks/[root-of-the-server]__17pn3jjqv9c44._.js.map +8 -0
  153. package/web/.next/build/chunks/[root-of-the-server]__1ehkf7gbe4e6q._.js +502 -0
  154. package/web/.next/build/chunks/[root-of-the-server]__1ehkf7gbe4e6q._.js.map +11 -0
  155. package/web/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1t6pazwwggn3s._.js +13 -0
  156. package/web/.next/build/chunks/[turbopack-node]_transforms_postcss_ts_1t6pazwwggn3s._.js.map +5 -0
  157. package/web/.next/build/chunks/[turbopack]_runtime.js +1056 -0
  158. package/web/.next/build/chunks/[turbopack]_runtime.js.map +11 -0
  159. package/web/.next/build/chunks/node_modules_0ds4fgws35qq2._.js +7337 -0
  160. package/web/.next/build/chunks/node_modules_0ds4fgws35qq2._.js.map +47 -0
  161. package/web/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_1inl-dyesk97a._.js +6 -0
  162. package/web/.next/build/chunks/pool_entry-[turbopack-node]_transforms_postcss_ts_1inl-dyesk97a._.js.map +5 -0
  163. package/web/.next/build/package.json +1 -0
  164. package/web/.next/build-manifest.json +194 -0
  165. package/web/.next/diagnostics/build-diagnostics.json +6 -0
  166. package/web/.next/diagnostics/framework.json +1 -0
  167. package/web/.next/diagnostics/route-bundle-stats.json +195 -0
  168. package/web/.next/export-marker.json +6 -0
  169. package/web/.next/fallback-build-manifest.json +15 -0
  170. package/web/.next/images-manifest.json +68 -0
  171. package/web/.next/next-minimal-server.js.nft.json +1 -0
  172. package/web/.next/next-server.js.nft.json +1 -0
  173. package/web/.next/package.json +1 -0
  174. package/web/.next/prerender-manifest.json +40 -0
  175. package/web/.next/required-server-files.js +367 -0
  176. package/web/.next/required-server-files.json +367 -0
  177. package/web/.next/routes-manifest.json +144 -0
  178. package/web/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  179. package/web/.next/server/app/_global-error/page/build-manifest.json +23 -0
  180. package/web/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  181. package/web/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  182. package/web/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  183. package/web/.next/server/app/_global-error/page.js +12 -0
  184. package/web/.next/server/app/_global-error/page.js.map +5 -0
  185. package/web/.next/server/app/_global-error/page.js.nft.json +1 -0
  186. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  187. package/web/.next/server/app/_global-error.html +1 -0
  188. package/web/.next/server/app/_global-error.meta +30 -0
  189. package/web/.next/server/app/_global-error.rsc +18 -0
  190. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +23 -0
  191. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +18 -0
  192. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +2 -0
  193. package/web/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  194. package/web/.next/server/app/_not-found/page/build-manifest.json +23 -0
  195. package/web/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
  196. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  197. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +15 -0
  198. package/web/.next/server/app/_not-found/page.js +17 -0
  199. package/web/.next/server/app/_not-found/page.js.map +5 -0
  200. package/web/.next/server/app/_not-found/page.js.nft.json +1 -0
  201. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  202. package/web/.next/server/app/authorize/failed/page/app-paths-manifest.json +3 -0
  203. package/web/.next/server/app/authorize/failed/page/build-manifest.json +23 -0
  204. package/web/.next/server/app/authorize/failed/page/next-font-manifest.json +11 -0
  205. package/web/.next/server/app/authorize/failed/page/react-loadable-manifest.json +1 -0
  206. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +15 -0
  207. package/web/.next/server/app/authorize/failed/page.js +18 -0
  208. package/web/.next/server/app/authorize/failed/page.js.map +5 -0
  209. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -0
  210. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +3 -0
  211. package/web/.next/server/app/authorize/pick/page/app-paths-manifest.json +3 -0
  212. package/web/.next/server/app/authorize/pick/page/build-manifest.json +23 -0
  213. package/web/.next/server/app/authorize/pick/page/next-font-manifest.json +11 -0
  214. package/web/.next/server/app/authorize/pick/page/react-loadable-manifest.json +1 -0
  215. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +15 -0
  216. package/web/.next/server/app/authorize/pick/page.js +19 -0
  217. package/web/.next/server/app/authorize/pick/page.js.map +5 -0
  218. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -0
  219. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +3 -0
  220. package/web/.next/server/app/authorize/waiting/approval/page/app-paths-manifest.json +3 -0
  221. package/web/.next/server/app/authorize/waiting/approval/page/build-manifest.json +23 -0
  222. package/web/.next/server/app/authorize/waiting/approval/page/next-font-manifest.json +11 -0
  223. package/web/.next/server/app/authorize/waiting/approval/page/react-loadable-manifest.json +1 -0
  224. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +15 -0
  225. package/web/.next/server/app/authorize/waiting/approval/page.js +19 -0
  226. package/web/.next/server/app/authorize/waiting/approval/page.js.map +5 -0
  227. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -0
  228. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +3 -0
  229. package/web/.next/server/app/outside-parties/[name]/change/page/app-paths-manifest.json +3 -0
  230. package/web/.next/server/app/outside-parties/[name]/change/page/build-manifest.json +23 -0
  231. package/web/.next/server/app/outside-parties/[name]/change/page/next-font-manifest.json +11 -0
  232. package/web/.next/server/app/outside-parties/[name]/change/page/react-loadable-manifest.json +1 -0
  233. package/web/.next/server/app/outside-parties/[name]/change/page/server-reference-manifest.json +35 -0
  234. package/web/.next/server/app/outside-parties/[name]/change/page.js +22 -0
  235. package/web/.next/server/app/outside-parties/[name]/change/page.js.map +5 -0
  236. package/web/.next/server/app/outside-parties/[name]/change/page.js.nft.json +1 -0
  237. package/web/.next/server/app/outside-parties/[name]/change/page_client-reference-manifest.js +3 -0
  238. package/web/.next/server/app/outside-parties/[name]/page/app-paths-manifest.json +3 -0
  239. package/web/.next/server/app/outside-parties/[name]/page/build-manifest.json +23 -0
  240. package/web/.next/server/app/outside-parties/[name]/page/next-font-manifest.json +11 -0
  241. package/web/.next/server/app/outside-parties/[name]/page/react-loadable-manifest.json +1 -0
  242. package/web/.next/server/app/outside-parties/[name]/page/server-reference-manifest.json +15 -0
  243. package/web/.next/server/app/outside-parties/[name]/page.js +20 -0
  244. package/web/.next/server/app/outside-parties/[name]/page.js.map +5 -0
  245. package/web/.next/server/app/outside-parties/[name]/page.js.nft.json +1 -0
  246. package/web/.next/server/app/outside-parties/[name]/page_client-reference-manifest.js +3 -0
  247. package/web/.next/server/app/outside-parties/[name]/retire/page/app-paths-manifest.json +3 -0
  248. package/web/.next/server/app/outside-parties/[name]/retire/page/build-manifest.json +23 -0
  249. package/web/.next/server/app/outside-parties/[name]/retire/page/next-font-manifest.json +11 -0
  250. package/web/.next/server/app/outside-parties/[name]/retire/page/react-loadable-manifest.json +1 -0
  251. package/web/.next/server/app/outside-parties/[name]/retire/page/server-reference-manifest.json +35 -0
  252. package/web/.next/server/app/outside-parties/[name]/retire/page.js +21 -0
  253. package/web/.next/server/app/outside-parties/[name]/retire/page.js.map +5 -0
  254. package/web/.next/server/app/outside-parties/[name]/retire/page.js.nft.json +1 -0
  255. package/web/.next/server/app/outside-parties/[name]/retire/page_client-reference-manifest.js +3 -0
  256. package/web/.next/server/app/outside-parties/add/page/app-paths-manifest.json +3 -0
  257. package/web/.next/server/app/outside-parties/add/page/build-manifest.json +23 -0
  258. package/web/.next/server/app/outside-parties/add/page/next-font-manifest.json +11 -0
  259. package/web/.next/server/app/outside-parties/add/page/react-loadable-manifest.json +1 -0
  260. package/web/.next/server/app/outside-parties/add/page/server-reference-manifest.json +35 -0
  261. package/web/.next/server/app/outside-parties/add/page.js +19 -0
  262. package/web/.next/server/app/outside-parties/add/page.js.map +5 -0
  263. package/web/.next/server/app/outside-parties/add/page.js.nft.json +1 -0
  264. package/web/.next/server/app/outside-parties/add/page_client-reference-manifest.js +3 -0
  265. package/web/.next/server/app/outside-parties/page/app-paths-manifest.json +3 -0
  266. package/web/.next/server/app/outside-parties/page/build-manifest.json +23 -0
  267. package/web/.next/server/app/outside-parties/page/next-font-manifest.json +11 -0
  268. package/web/.next/server/app/outside-parties/page/react-loadable-manifest.json +1 -0
  269. package/web/.next/server/app/outside-parties/page/server-reference-manifest.json +25 -0
  270. package/web/.next/server/app/outside-parties/page.js +20 -0
  271. package/web/.next/server/app/outside-parties/page.js.map +5 -0
  272. package/web/.next/server/app/outside-parties/page.js.nft.json +1 -0
  273. package/web/.next/server/app/outside-parties/page_client-reference-manifest.js +3 -0
  274. package/web/.next/server/app/overview/changes/route/app-paths-manifest.json +3 -0
  275. package/web/.next/server/app/overview/changes/route/build-manifest.json +12 -0
  276. package/web/.next/server/app/overview/changes/route/server-reference-manifest.json +4 -0
  277. package/web/.next/server/app/overview/changes/route.js +6 -0
  278. package/web/.next/server/app/overview/changes/route.js.map +5 -0
  279. package/web/.next/server/app/overview/changes/route.js.nft.json +1 -0
  280. package/web/.next/server/app/overview/changes/route_client-reference-manifest.js +3 -0
  281. package/web/.next/server/app/overview/page/app-paths-manifest.json +3 -0
  282. package/web/.next/server/app/overview/page/build-manifest.json +23 -0
  283. package/web/.next/server/app/overview/page/next-font-manifest.json +11 -0
  284. package/web/.next/server/app/overview/page/react-loadable-manifest.json +1 -0
  285. package/web/.next/server/app/overview/page/server-reference-manifest.json +45 -0
  286. package/web/.next/server/app/overview/page.js +24 -0
  287. package/web/.next/server/app/overview/page.js.map +5 -0
  288. package/web/.next/server/app/overview/page.js.nft.json +1 -0
  289. package/web/.next/server/app/overview/page_client-reference-manifest.js +3 -0
  290. package/web/.next/server/app/overview/requests/[requestId]/page/app-paths-manifest.json +3 -0
  291. package/web/.next/server/app/overview/requests/[requestId]/page/build-manifest.json +23 -0
  292. package/web/.next/server/app/overview/requests/[requestId]/page/next-font-manifest.json +11 -0
  293. package/web/.next/server/app/overview/requests/[requestId]/page/react-loadable-manifest.json +1 -0
  294. package/web/.next/server/app/overview/requests/[requestId]/page/server-reference-manifest.json +25 -0
  295. package/web/.next/server/app/overview/requests/[requestId]/page.js +24 -0
  296. package/web/.next/server/app/overview/requests/[requestId]/page.js.map +5 -0
  297. package/web/.next/server/app/overview/requests/[requestId]/page.js.nft.json +1 -0
  298. package/web/.next/server/app/overview/requests/[requestId]/page_client-reference-manifest.js +3 -0
  299. package/web/.next/server/app/parties/page/app-paths-manifest.json +3 -0
  300. package/web/.next/server/app/parties/page/build-manifest.json +23 -0
  301. package/web/.next/server/app/parties/page/next-font-manifest.json +11 -0
  302. package/web/.next/server/app/parties/page/react-loadable-manifest.json +1 -0
  303. package/web/.next/server/app/parties/page/server-reference-manifest.json +55 -0
  304. package/web/.next/server/app/parties/page.js +22 -0
  305. package/web/.next/server/app/parties/page.js.map +5 -0
  306. package/web/.next/server/app/parties/page.js.nft.json +1 -0
  307. package/web/.next/server/app/parties/page_client-reference-manifest.js +3 -0
  308. package/web/.next/server/app/sign-in/failed/page/app-paths-manifest.json +3 -0
  309. package/web/.next/server/app/sign-in/failed/page/build-manifest.json +23 -0
  310. package/web/.next/server/app/sign-in/failed/page/next-font-manifest.json +11 -0
  311. package/web/.next/server/app/sign-in/failed/page/react-loadable-manifest.json +1 -0
  312. package/web/.next/server/app/sign-in/failed/page/server-reference-manifest.json +15 -0
  313. package/web/.next/server/app/sign-in/failed/page.js +18 -0
  314. package/web/.next/server/app/sign-in/failed/page.js.map +5 -0
  315. package/web/.next/server/app/sign-in/failed/page.js.nft.json +1 -0
  316. package/web/.next/server/app/sign-in/failed/page_client-reference-manifest.js +3 -0
  317. package/web/.next/server/app-paths-manifest.json +17 -0
  318. package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js +3 -0
  319. package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js.map +1 -0
  320. package/web/.next/server/chunks/[root-of-the-server]__00bbah0fbuex2._.js +369 -0
  321. package/web/.next/server/chunks/[root-of-the-server]__00bbah0fbuex2._.js.map +1 -0
  322. package/web/.next/server/chunks/[turbopack]_runtime.js +937 -0
  323. package/web/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
  324. package/web/.next/server/chunks/ssr/0vkm_server_app_overview_requests_[requestId]_page_actions_08cpboirhdm8t.js +3 -0
  325. package/web/.next/server/chunks/ssr/0vkm_server_app_overview_requests_[requestId]_page_actions_08cpboirhdm8t.js.map +1 -0
  326. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +4 -0
  327. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js.map +1 -0
  328. package/web/.next/server/chunks/ssr/[root-of-the-server]__04_bc8g0oe4jt._.js +3 -0
  329. package/web/.next/server/chunks/ssr/[root-of-the-server]__04_bc8g0oe4jt._.js.map +1 -0
  330. package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js +3 -0
  331. package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js.map +1 -0
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js +3 -0
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js.map +1 -0
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ntyo9p3x-w6a._.js +3 -0
  335. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ntyo9p3x-w6a._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/[root-of-the-server]__0py1t7q9ntzgc._.js +3 -0
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__0py1t7q9ntzgc._.js.map +1 -0
  338. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rzvf7wb60m05._.js +3 -0
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rzvf7wb60m05._.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__10rfwy-punm8_._.js +3 -0
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__10rfwy-punm8_._.js.map +1 -0
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +3 -0
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__11e7zi5yg_f_4._.js +4 -0
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__11e7zi5yg_f_4._.js.map +1 -0
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js +3 -0
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js +3 -0
  349. package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/[root-of-the-server]__197il4swfpq1a._.js +3 -0
  351. package/web/.next/server/chunks/ssr/[root-of-the-server]__197il4swfpq1a._.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/[root-of-the-server]__1afrhvkbp010p._.js +3 -0
  353. package/web/.next/server/chunks/ssr/[root-of-the-server]__1afrhvkbp010p._.js.map +1 -0
  354. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpk1uw97id0a._.js +4 -0
  355. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpk1uw97id0a._.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js +3 -0
  357. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js.map +1 -0
  358. package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js +14 -0
  359. package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js.map +1 -0
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +4 -0
  361. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js.map +1 -0
  362. package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js +3 -0
  363. package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js.map +1 -0
  364. package/web/.next/server/chunks/ssr/[turbopack]_runtime.js +937 -0
  365. package/web/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
  366. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +4 -0
  367. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -0
  368. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +57 -0
  369. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -0
  370. package/web/.next/server/chunks/ssr/_03xm-6l-r6ko0._.js +4 -0
  371. package/web/.next/server/chunks/ssr/_03xm-6l-r6ko0._.js.map +1 -0
  372. package/web/.next/server/chunks/ssr/_04iwj3w0divwb._.js +4 -0
  373. package/web/.next/server/chunks/ssr/_04iwj3w0divwb._.js.map +1 -0
  374. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +4 -0
  375. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -0
  376. package/web/.next/server/chunks/ssr/_13qzwpag13tvy._.js +4 -0
  377. package/web/.next/server/chunks/ssr/_13qzwpag13tvy._.js.map +1 -0
  378. package/web/.next/server/chunks/ssr/_1bfq0g9c1iw__._.js +4 -0
  379. package/web/.next/server/chunks/ssr/_1bfq0g9c1iw__._.js.map +1 -0
  380. package/web/.next/server/chunks/ssr/_1jfy4064jcghi._.js +3 -0
  381. package/web/.next/server/chunks/ssr/_1jfy4064jcghi._.js.map +1 -0
  382. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +4 -0
  383. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -0
  384. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +4 -0
  385. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -0
  386. package/web/.next/server/chunks/ssr/node_modules_0gxlxpuufujz9._.js +33 -0
  387. package/web/.next/server/chunks/ssr/node_modules_0gxlxpuufujz9._.js.map +1 -0
  388. package/web/.next/server/chunks/ssr/node_modules_0h91jdk0pr40d._.js +33 -0
  389. package/web/.next/server/chunks/ssr/node_modules_0h91jdk0pr40d._.js.map +1 -0
  390. package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js +3 -0
  391. package/web/.next/server/chunks/ssr/node_modules_0ue_35q2cegwf._.js.map +1 -0
  392. package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +17 -0
  393. package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js.map +1 -0
  394. package/web/.next/server/chunks/ssr/node_modules_next_164yuq6c86vw2._.js +291 -0
  395. package/web/.next/server/chunks/ssr/node_modules_next_164yuq6c86vw2._.js.map +1 -0
  396. package/web/.next/server/chunks/ssr/node_modules_next_17rgm9-6qzdn5._.js +313 -0
  397. package/web/.next/server/chunks/ssr/node_modules_next_17rgm9-6qzdn5._.js.map +1 -0
  398. package/web/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js +6 -0
  399. package/web/.next/server/chunks/ssr/node_modules_next_dist_0janj0i6dqko7._.js.map +1 -0
  400. package/web/.next/server/chunks/ssr/node_modules_next_dist_1dupwucoqt5qm._.js +3 -0
  401. package/web/.next/server/chunks/ssr/node_modules_next_dist_1dupwucoqt5qm._.js.map +1 -0
  402. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_0p8s4lhdi0ir6._.js +3 -0
  403. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_0p8s4lhdi0ir6._.js.map +1 -0
  404. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892nagajq.js +3 -0
  405. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0q-w892nagajq.js.map +1 -0
  406. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0xky89qu.js +3 -0
  407. package/web/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0xky89qu.js.map +1 -0
  408. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@edge-runtime_cookies_index_1kiz_an963mbg.js +3 -0
  409. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@edge-runtime_cookies_index_1kiz_an963mbg.js.map +1 -0
  410. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js +3 -0
  411. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js.map +1 -0
  412. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03zgfhccdkaiy.js +3 -0
  413. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_03zgfhccdkaiy.js.map +1 -0
  414. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0fj-1791_p39n.js +3 -0
  415. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0fj-1791_p39n.js.map +1 -0
  416. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pq59x3iko2ai.js +3 -0
  417. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pq59x3iko2ai.js.map +1 -0
  418. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0svltk31-r84e.js +3 -0
  419. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0svltk31-r84e.js.map +1 -0
  420. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ytc4y16h581t.js +3 -0
  421. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ytc4y16h581t.js.map +1 -0
  422. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_15hcath_cy93j.js +3 -0
  423. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_15hcath_cy93j.js.map +1 -0
  424. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js +3 -0
  425. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js.map +1 -0
  426. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z4y02i7.js +3 -0
  427. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z4y02i7.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ej-pov8ir4hb.js +3 -0
  429. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ej-pov8ir4hb.js.map +1 -0
  430. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1emdm3ck_2g9k.js +3 -0
  431. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1emdm3ck_2g9k.js.map +1 -0
  432. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mvwdrj8rcdc5.js +3 -0
  433. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1mvwdrj8rcdc5.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uc-ufaepnlh_.js +3 -0
  435. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1uc-ufaepnlh_.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ymh04086158y.js +3 -0
  437. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1ymh04086158y.js.map +1 -0
  438. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z9khw-ht54ev.js +3 -0
  439. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1z9khw-ht54ev.js.map +1 -0
  440. package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js +3 -0
  441. package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js.map +1 -0
  442. package/web/.next/server/chunks/ssr/web_0vot73dagfg_x._.js +3 -0
  443. package/web/.next/server/chunks/ssr/web_0vot73dagfg_x._.js.map +1 -0
  444. package/web/.next/server/chunks/ssr/web_17c7_dhsf-sjp._.js +3 -0
  445. package/web/.next/server/chunks/ssr/web_17c7_dhsf-sjp._.js.map +1 -0
  446. package/web/.next/server/chunks/ssr/web_1j5yjwqkgyeve._.js +3 -0
  447. package/web/.next/server/chunks/ssr/web_1j5yjwqkgyeve._.js.map +1 -0
  448. package/web/.next/server/chunks/ssr/web_1nqu01kfi0u66._.js +3 -0
  449. package/web/.next/server/chunks/ssr/web_1nqu01kfi0u66._.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/web_1zd285_dq60z5._.js +3 -0
  451. package/web/.next/server/chunks/ssr/web_1zd285_dq60z5._.js.map +1 -0
  452. package/web/.next/server/chunks/ssr/web_207u8paamz3z-._.js +10 -0
  453. package/web/.next/server/chunks/ssr/web_207u8paamz3z-._.js.map +1 -0
  454. package/web/.next/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_0crg1npwvbfn5.js +3 -0
  455. package/web/.next/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_0crg1npwvbfn5.js.map +1 -0
  456. package/web/.next/server/chunks/ssr/web__next-internal_server_app_outside-parties_add_page_actions_0wclx47vjdhe6.js +3 -0
  457. package/web/.next/server/chunks/ssr/web__next-internal_server_app_outside-parties_add_page_actions_0wclx47vjdhe6.js.map +1 -0
  458. package/web/.next/server/chunks/ssr/web__next-internal_server_app_overview_page_actions_0hxu14a57nlf2.js +3 -0
  459. package/web/.next/server/chunks/ssr/web__next-internal_server_app_overview_page_actions_0hxu14a57nlf2.js.map +1 -0
  460. package/web/.next/server/chunks/ssr/web_app_not-found_tsx_1miwllm8xrp2a._.js +3 -0
  461. package/web/.next/server/chunks/ssr/web_app_not-found_tsx_1miwllm8xrp2a._.js.map +1 -0
  462. package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_change_page_tsx_0kfjh3f55us56._.js +3 -0
  463. package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_change_page_tsx_0kfjh3f55us56._.js.map +1 -0
  464. package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_retire_page_tsx_0qhcnjpjipu_2._.js +3 -0
  465. package/web/.next/server/chunks/ssr/web_app_outside-parties_[name]_retire_page_tsx_0qhcnjpjipu_2._.js.map +1 -0
  466. package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_0qlcwxupzw726._.js +3 -0
  467. package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_0qlcwxupzw726._.js.map +1 -0
  468. package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_17_cklg40kzxe._.js +3 -0
  469. package/web/.next/server/chunks/ssr/web_app_overview_error_tsx_17_cklg40kzxe._.js.map +1 -0
  470. package/web/.next/server/chunks/ssr/web_app_parties_page_tsx_1lilxm339jj89._.js +3 -0
  471. package/web/.next/server/chunks/ssr/web_app_parties_page_tsx_1lilxm339jj89._.js.map +1 -0
  472. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +3 -0
  473. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js.map +1 -0
  474. package/web/.next/server/chunks/ssr/web_features_0fxkmm4vqke5q._.js +3 -0
  475. package/web/.next/server/chunks/ssr/web_features_0fxkmm4vqke5q._.js.map +1 -0
  476. package/web/.next/server/chunks/ssr/web_features_0h0ueu8_-_z5k._.js +3 -0
  477. package/web/.next/server/chunks/ssr/web_features_0h0ueu8_-_z5k._.js.map +1 -0
  478. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js +3 -0
  479. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js.map +1 -0
  480. package/web/.next/server/chunks/ssr/web_features_0vq1wjkuh6dmr._.js +3 -0
  481. package/web/.next/server/chunks/ssr/web_features_0vq1wjkuh6dmr._.js.map +1 -0
  482. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +3 -0
  483. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -0
  484. package/web/.next/server/chunks/ssr/web_features_authorize_ui_waiting-for-approval_tsx_00iwjvj4orq9g._.js +3 -0
  485. package/web/.next/server/chunks/ssr/web_features_authorize_ui_waiting-for-approval_tsx_00iwjvj4orq9g._.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js +3 -0
  487. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js.map +1 -0
  488. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js +3 -0
  489. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js.map +1 -0
  490. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js +3 -0
  491. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js.map +1 -0
  492. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +3 -0
  493. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -0
  494. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +3 -0
  495. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -0
  496. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js +3 -0
  497. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js.map +1 -0
  498. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +3 -0
  499. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js.map +1 -0
  500. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +3 -0
  501. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -0
  502. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +3 -0
  503. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -0
  504. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +3 -0
  505. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +1 -0
  506. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +3 -0
  507. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map +1 -0
  508. package/web/.next/server/chunks/web__next-internal_server_app_overview_changes_route_actions_16jqwsctr1pzg.js +3 -0
  509. package/web/.next/server/chunks/web__next-internal_server_app_overview_changes_route_actions_16jqwsctr1pzg.js.map +1 -0
  510. package/web/.next/server/functions-config-manifest.json +4 -0
  511. package/web/.next/server/interception-route-rewrite-manifest.js +1 -0
  512. package/web/.next/server/middleware-build-manifest.js +194 -0
  513. package/web/.next/server/middleware-manifest.json +6 -0
  514. package/web/.next/server/next-font-manifest.js +1 -0
  515. package/web/.next/server/next-font-manifest.json +59 -0
  516. package/web/.next/server/pages/500.html +1 -0
  517. package/web/.next/server/pages-manifest.json +3 -0
  518. package/web/.next/server/prefetch-hints.json +11 -0
  519. package/web/.next/server/preview-props.json +5 -0
  520. package/web/.next/server/server-reference-manifest.js +1 -0
  521. package/web/.next/server/server-reference-manifest.json +202 -0
  522. package/web/.next/static/6OjpPl7qD1uqwr6E41aT5/_buildManifest.js +11 -0
  523. package/web/.next/static/6OjpPl7qD1uqwr6E41aT5/_clientMiddlewareManifest.js +1 -0
  524. package/web/.next/static/6OjpPl7qD1uqwr6E41aT5/_ssgManifest.js +1 -0
  525. package/web/.next/static/chunks/0a1vw3r93lh06.js +1 -0
  526. package/web/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
  527. package/web/.next/static/chunks/0lzisjsmhlhjf.js +1 -0
  528. package/web/.next/static/chunks/0umf92h1sb77c.js +1 -0
  529. package/web/.next/static/chunks/131oz96e71xwn.js +1 -0
  530. package/web/.next/static/chunks/1cduebcshlfd5.js +1 -0
  531. package/web/.next/static/chunks/1ma7v1viiz247.js +1 -0
  532. package/web/.next/static/chunks/1w-xaw2grqv_2.js +1 -0
  533. package/web/.next/static/chunks/22u81hd6kxqsx.js +1 -0
  534. package/web/.next/static/chunks/2ewacyhp73due.js +1 -0
  535. package/web/.next/static/chunks/2hz8yws_wswjz.js +31 -0
  536. package/web/.next/static/chunks/2qpupho1jn-iy.js +1 -0
  537. package/web/.next/static/chunks/2ta7dqldhv69y.js +1 -0
  538. package/web/.next/static/chunks/30n1j9zag1f0q.css +3 -0
  539. package/web/.next/static/chunks/3knqujtrdi225.js +1 -0
  540. package/web/.next/static/chunks/3sv0_hjr9t4cp.js +1 -0
  541. package/web/.next/static/chunks/3yltnnufhaitm.js +1 -0
  542. package/web/.next/static/chunks/41rcj9-d-7p_4.js +22 -0
  543. package/web/.next/static/chunks/turbopack-3-ry682tkyiqk.js +1 -0
  544. package/web/.next/static/media/geist_mono_variable-s.p.3ms9vq719j3f8.woff2 +0 -0
  545. package/web/.next/static/media/geist_variable-s.p.0mrjj4bg00-he.woff2 +0 -0
  546. package/web/.next/trace +1 -0
  547. package/web/.next/trace-build +1 -0
  548. package/web/.next/turbopack +0 -0
  549. package/web/.next/types/cache-life.d.ts +114 -0
  550. package/web/.next/types/root-params.d.ts +3 -0
  551. package/web/.next/types/routes.d.ts +85 -0
  552. package/web/.next/types/validator.ts +288 -0
  553. package/web/next.config.ts +9 -0
  554. package/dist/adapters/crypto/page-sessions.d.ts +0 -15
  555. package/dist/adapters/crypto/page-sessions.js +0 -40
  556. package/dist/adapters/crypto/page-sessions.js.map +0 -1
  557. package/dist/adapters/http/add-server-page.d.ts +0 -7
  558. package/dist/adapters/http/add-server-page.js +0 -175
  559. package/dist/adapters/http/add-server-page.js.map +0 -1
  560. package/dist/adapters/http/delivery-page.d.ts +0 -24
  561. package/dist/adapters/http/delivery-page.js +0 -115
  562. package/dist/adapters/http/delivery-page.js.map +0 -1
  563. package/dist/adapters/http/html.d.ts +0 -15
  564. package/dist/adapters/http/html.js +0 -53
  565. package/dist/adapters/http/html.js.map +0 -1
  566. package/dist/adapters/http/outside-parties-page.d.ts +0 -33
  567. package/dist/adapters/http/outside-parties-page.js +0 -153
  568. package/dist/adapters/http/outside-parties-page.js.map +0 -1
  569. package/dist/adapters/http/outside-party-page.d.ts +0 -7
  570. package/dist/adapters/http/outside-party-page.js +0 -212
  571. package/dist/adapters/http/outside-party-page.js.map +0 -1
  572. package/dist/adapters/http/overview-page.d.ts +0 -17
  573. package/dist/adapters/http/overview-page.js +0 -298
  574. package/dist/adapters/http/overview-page.js.map +0 -1
  575. package/dist/adapters/http/parties-page.d.ts +0 -7
  576. package/dist/adapters/http/parties-page.js +0 -139
  577. package/dist/adapters/http/parties-page.js.map +0 -1
  578. package/dist/adapters/http/scope-rows.d.ts +0 -10
  579. package/dist/adapters/http/scope-rows.js +0 -30
  580. package/dist/adapters/http/scope-rows.js.map +0 -1
  581. package/dist/adapters/http/signal.d.ts +0 -61
  582. package/dist/adapters/http/signal.js +0 -263
  583. package/dist/adapters/http/signal.js.map +0 -1
  584. package/dist/core/sign-in/sign-out.d.ts +0 -10
  585. package/dist/core/sign-in/sign-out.js +0 -9
  586. package/dist/core/sign-in/sign-out.js.map +0 -1
  587. package/dist/core/sign-in/start-page-sign-in.d.ts +0 -25
  588. package/dist/core/sign-in/start-page-sign-in.js +0 -30
  589. package/dist/core/sign-in/start-page-sign-in.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ module.exports=[54629,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(94705),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.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)(k.W,{fleetId:p}),(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.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)(k.W,{fleetId:p}),(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(22126);async function p({params:a,searchParams:c}){let{name:e}=await a,f=await (0,d._)({path:(0,h.N)(e,"change"),searchParams:await c});return"noSignIn"===f.kind?(0,b.jsx)(o.f,{}):(0,b.jsx)(n,{page:f,name:e})}a.s(["default",0,p,"metadata",0,{title:"Outside parties"}],54629)},76733,function(a){a.n(a.i(54629))}];
2
+
3
+ //# sourceMappingURL=web_app_outside-parties_%5Bname%5D_change_page_tsx_0kfjh3f55us56._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/outside-party/ui/change-party.tsx","../../../../../web/app/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 { Back, 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 gap-4\">\n <Back fleetId={fleetId} />\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 gap-4\">\n <Back fleetId={fleetId} />\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 { partyPath } from '../../../../features/outside-parties/paths';\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: '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 <NoSignIn />;\n }\n return <ChangeParty page={page} name={name} />;\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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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[17177,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(94705),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.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)(i.W,{fleetId:m}),(0,b.jsx)(i.y,{children:n.refusal})]});let o=n.value;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)(i.W,{fleetId:m}),(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(22126);async function l({params:a,searchParams:c}){let{name:e}=await a,f=await (0,d._)({path:(0,g.N)(e,"retire"),searchParams:await c});return"noSignIn"===f.kind?(0,b.jsx)(k.f,{}):(0,b.jsx)(j,{page:f,name:e})}a.s(["default",0,l,"metadata",0,{title:"Outside parties"}],17177)},30223,function(a){a.n(a.i(17177))}];
2
+
3
+ //# sourceMappingURL=web_app_outside-parties_%5Bname%5D_retire_page_tsx_0qhcnjpjipu_2._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/outside-party/ui/retire-party.tsx","../../../../../web/app/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 { Back, 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 gap-4\">\n <Back fleetId={fleetId} />\n <Refusal>{read.refusal}</Refusal>\n </div>\n );\n }\n const party = read.value;\n return (\n <div className=\"grid gap-4\">\n <Back fleetId={fleetId} />\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 { partyPath } from '../../../../features/outside-parties/paths';\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: '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 <NoSignIn />;\n }\n return <RetireParty page={page} name={name} />;\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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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[16457,a=>{"use strict";let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/web/app/overview/error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/web/app/overview/error.tsx","default");a.s(["default",0,b])},701,a=>{"use strict";var b=a.i(16457);a.n(b)},42849,function(a){a.n(a.i(701))}];
2
+
3
+ //# sourceMappingURL=web_app_overview_error_tsx_0qlcwxupzw726._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/app/overview/error.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/app/overview/error.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport default registerClientReference(\n function() { throw new Error(\"Attempted to call the default export of [project]/web/app/overview/error.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/app/overview/error.tsx\",\n \"default\",\n);\n"],"names":["Error"],"mappings":"6CAEe,CAAA,EADf,AACe,EADf,CAAA,CAAA,OACe,uBAAA,AAAuB,EAClC,WAAa,MAAM,AAAIA,MAAM,wQAA0Q,EACvS,uCACA","ignoreList":[0]}
@@ -0,0 +1,3 @@
1
+ module.exports=[31206,a=>{"use strict";var b=a.i(87924);function c({message:a,onTryAgain:d}){return(0,b.jsxs)("section",{role:"alert",className:"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"The Overview could not be read"}),(0,b.jsxs)("p",{"data-testid":"overview-failed-reason",className:"mt-2 text-muted-foreground",children:[""===a?"The gateway did not answer.":a," Try again in a moment."]}),(0,b.jsx)("div",{className:"mt-4",children:(0,b.jsx)("button",{type:"button",onClick:d,className:"inline-flex h-9 items-center rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover",children:"Try again"})})]})}a.s(["default",0,function({error:a,reset:d}){return(0,b.jsx)(c,{message:a.message,onTryAgain:d})}],31206)}];
2
+
3
+ //# sourceMappingURL=web_app_overview_error_tsx_17_cklg40kzxe._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/overview/ui/overview-failed.tsx","../../../../../web/app/overview/error.tsx"],"sourcesContent":["/** The Overview could not be read: why, and the way to try again. */\nexport function OverviewFailed({ message, onTryAgain }: { message: string; onTryAgain: () => void }) {\n return (\n <section role=\"alert\" className=\"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <h2 className=\"text-heading font-semibold\">The Overview could not be read</h2>\n <p data-testid=\"overview-failed-reason\" className=\"mt-2 text-muted-foreground\">\n {message === '' ? 'The gateway did not answer.' : message} Try again in a moment.\n </p>\n <div className=\"mt-4\">\n <button type=\"button\" onClick={onTryAgain} className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\">\n Try again\n </button>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport { OverviewFailed } from '../../features/overview/ui/overview-failed';\n\nexport default function OverviewError({ error, reset }: { error: Error; reset: () => void }) {\n return <OverviewFailed message={error.message} onTryAgain={reset} />;\n}\n"],"names":["OverviewFailed","message","onTryAgain","role","className","type","onClick"],"mappings":"wDACO,SAASA,EAAe,SAAEC,CAAO,YAAEC,CAAU,CAA+C,EACjG,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQC,KAAK,QAAQC,UAAU,uFAC9B,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAGA,UAAU,sCAA6B,mCAC3C,CAAA,EAAA,EAAA,IAAA,EAAC,IAAA,CAAE,cAAY,yBAAyBA,UAAU,uCACnC,KAAZH,EAAiB,8BAAgCA,EAAQ,6BAE5D,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAIG,UAAU,gBACb,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOC,KAAK,SAASC,QAASJ,EAAYE,UAAU,kHAAyG,kBAMtK,kBCXe,SAAS,AAAc,OAAE,CAAK,OAAE,CAAK,CAAuC,EACzF,MAAOD,CAAAA,EAAAA,EAAAA,GAAAA,EAAC,EAAA,CAAe,QAAS,EAAM,OAAO,CAAE,WAAY,GAC7D"}
@@ -0,0 +1,3 @@
1
+ module.exports=[27449,a=>{"use strict";var b=a.i(7997),c=a.i(33621),d=a.i(66680),e=a.i(66283),f=a.i(69372),g=a.i(49144),h=a.i(69912),i=a.i(65253),j=a.i(98323),k=a.i(5901);function l({party:a,fleetId:c}){return(0,b.jsxs)("div",{className:"grid gap-2",children:["awaitingCrew"===a.state?(0,b.jsxs)(f.ActionForm,{action:k.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:g.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)(f.ActionForm,{action:k.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)(f.ActionForm,{action:k.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:g.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 m({fleetId:a,owners:c}){return(0,b.jsxs)("section",{className:`${g.r} grid gap-3`,children:[(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Approve an MCP server"}),(0,b.jsxs)(f.ActionForm,{action:k.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:g.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:g.w,name:"name",required:!0})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP URL"}),(0,b.jsx)("input",{className:g.w,name:"url",type:"url",required:!0})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsxs)("select",{className:g.w,name:"credentialKind",children:[(0,b.jsx)("option",{value:"bearer",children:"Bearer token"}),(0,b.jsx)("option",{value:"clientCredentials",children:"OAuth client credentials"})]})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:g.w,name:"token",type:"password"})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:g.w,name:"clientId"})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:g.w,name:"clientSecret",type:"password"})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:g.w,name:"issuer",type:"url"})]}),(0,b.jsxs)("label",{className:g.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:g.w,name:"scope"})]}),(0,b.jsx)(h.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:g.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:g.w,name:"concurrencyLimit",type:"number",min:1,max:10,defaultValue:4})]})]})]})}async function n({page:a}){let{api:c,fleetId:d,scopes:f}=a,g=await (0,e.F)(c.parties.list.query()),h=f.includes("fleet:manage"),k=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=i.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:"mcpServer"===a.kind?a.url:a.clientId}),(0,b.jsx)("td",{className:"p-2",children:"mcpServer"===a.kind?a.credentialKind:"MCP client"}),(0,b.jsx)("td",{className:"p-2",children:(0,b.jsx)(j.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)(l,{party:a,fleetId:d}):null})]},a.name)})})]})}):(0,b.jsx)("p",{role:"alert",className:"text-tone-attention-fg",children:g.refusal}),void 0===k?null:(0,b.jsx)(m,{fleetId:d,owners:k})]})}var o=a.i(22126);async function p({searchParams:a}){let d=await (0,e._)({path:c.f,searchParams:await a});return"noSignIn"===d.kind?(0,b.jsx)(o.f,{}):(0,b.jsx)(n,{page:d})}a.s(["default",0,p,"metadata",0,{title:"Parties"}],27449)},81977,function(a){a.n(a.i(27449))}];
2
+
3
+ //# sourceMappingURL=web_app_parties_page_tsx_1lilxm339jj89._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/app/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 { ActionForm } from '../../forms/ui/action-form';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { 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\">\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\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\">{party.kind === 'mcpServer' ? party.url : party.clientId}</td>\n <td className=\"p-2\">{party.kind === 'mcpServer' ? party.credentialKind : 'MCP 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","choices","isOk","current","help","refusal","undefined","min","max","defaultValue","Parties","page","api","scopes","parties","list","query","canManage","includes","ownerChoices","role","length","map","url","clientId","credentialKind","tone","proxyShipName"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[13930,a=>{let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActionForm() from the server but ActionForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/web/features/forms/ui/action-form.tsx","ActionForm");a.s(["ActionForm",0,b])},69372,a=>{var b=a.i(13930);a.n(b)},49144,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},69912,a=>{var b=a.i(7997),c=a.i(49144);a.s(["f",0,function({choices:a,current:d,help:e,refusal:f}){let g=null===d||a.some(a=>a.shipId===d.shipId)?a:[d,...a];return(0,b.jsxs)("label",{className:c.z,children:[(0,b.jsx)("span",{children:"Owner"}),(0,b.jsxs)("select",{className:c.w,name:"ownerShipId",defaultValue:d?.shipId??"",required:!0,"data-testid":"owner-field",children:[null===d?(0,b.jsx)("option",{value:"",disabled:!0,children:"Pick its owner"}):null,g.map(a=>(0,b.jsx)("option",{value:a.shipId,children:a.name},a.shipId))]}),(0,b.jsx)("span",{className:"text-muted-foreground",children:f??e})]})}])},65253,98323,a=>{let b={mcpServer:{protocol:"MCP",side:"server"},mcpClient:{protocol:"MCP",side:"client"}};a.s(["G",0,b,"Y",0,{commissioning:{tone:"active",label:"Commissioning"},awaitingCrew:{tone:"waiting",label:"Awaiting crew"},crewed:{tone:"ok",label:"Crewed"}},"N",0,{server:{one:"server",many:"servers"},client:{one:"client",many:"clients"}},"R",0,function(a){let c=a.map(a=>b[a.kind]),d=[...new Set(c.map(a=>a.protocol))];return{total:a.length,sides:{server:c.filter(a=>"server"===a.side).length,client:c.filter(a=>"client"===a.side).length},protocols:d.map(a=>({protocol:a,count:c.filter(b=>b.protocol===a).length}))}}],65253);var c=a.i(7997);let d={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};a.s(["T",0,function({tone:a,label:b}){return(0,c.jsx)("span",{className:`inline-flex items-center rounded-full border px-2 text-caption ${d[a]}`,children:b})},"E",0,function({children:a,isMono:b=!1}){return(0,c.jsx)("span",{className:`inline-flex items-center rounded-md border border-border px-2 text-caption ${b?"font-mono":""}`,children:a})}],98323)},22126,a=>{var b=a.i(7997),c=a.i(49144);a.s(["f",0,function(){return(0,b.jsxs)("section",{className:c.r,"data-testid":"no-sign-in",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Nobody signs in here"}),(0,b.jsx)("p",{className:"mt-2 text-muted-foreground",children:"This gateway signs no one in to its pages: it is no app at pagasae."})]})}])}]})();
2
+
3
+ //# sourceMappingURL=web_features_085cv0gogrxxf._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/ui/action-form.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/features/forms/ui/action-form.tsx%22%20%7D","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/outside-parties/party-kinds.ts","../../../../../web/features/outside-parties/ui/status-badge.tsx","../../../../../web/features/sign-in/ui/no-sign-in.tsx"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ActionForm = registerClientReference(\n function() { throw new Error(\"Attempted to call ActionForm() from the server but ActionForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/features/forms/ui/action-form.tsx\",\n \"ActionForm\",\n);\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","/**\n * An outside party is a party and its protocol (design B, How A2A slots\n * in): the protocol is a tag on every card and the list counts per\n * protocol, so an A2A agent joins as one more kind here.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../src/adapters/trpc/router.js';\n\n/** An outside party as the API lists it. */\nexport type ListedParty = inferRouterOutputs<GatewayRouter>['parties']['list'][number];\n\n/** Which side an outside party is on: a server the fleet's ships call, or a client that calls them. */\nexport type Side = 'server' | 'client';\n\nexport const PARTY_KINDS: Record<ListedParty['kind'], { protocol: string; side: Side }> = {\n mcpServer: { protocol: 'MCP', side: 'server' },\n mcpClient: { protocol: 'MCP', side: 'client' },\n};\n\nexport const SIDES: Record<Side, { one: string; many: string }> = {\n server: { one: 'server', many: 'servers' },\n client: { one: 'client', many: 'clients' },\n};\n\n/** The tones the design tokens colour a status by. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\n/** A proxy ship's state as the console shows a status. */\nexport const PARTY_STATES: Record<ListedParty['state'], { tone: Tone; label: string }> = {\n commissioning: { tone: 'active', label: 'Commissioning' },\n awaitingCrew: { tone: 'waiting', label: 'Awaiting crew' },\n crewed: { tone: 'ok', label: 'Crewed' },\n};\n\nexport interface Counts {\n total: number;\n sides: Record<Side, number>;\n protocols: { protocol: string; count: number }[];\n}\n\n/** How many outside parties the fleet has, per side and per protocol. */\nexport function countsOf(parties: readonly Pick<ListedParty, 'kind'>[]): Counts {\n const kinds = parties.map((party) => PARTY_KINDS[party.kind]);\n const protocols = [...new Set(kinds.map((kind) => kind.protocol))];\n return {\n total: parties.length,\n sides: { server: kinds.filter((kind) => kind.side === 'server').length, client: kinds.filter((kind) => kind.side === 'client').length },\n protocols: protocols.map((protocol) => ({ protocol, count: kinds.filter((kind) => kind.protocol === protocol).length })),\n };\n}\n","import type { Tone } from '../party-kinds';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, as the console shows one. */\nexport function StatusBadge({ tone, label }: { tone: Tone; label: string }) {\n return <span className={`inline-flex items-center rounded-full border px-2 text-caption ${TONES[tone]}`}>{label}</span>;\n}\n\n/** A plain tag: a protocol, a side, an id. */\nexport function Tag({ children, isMono = false }: { children: React.ReactNode; isMono?: boolean }) {\n return <span className={`inline-flex items-center rounded-md border border-border px-2 text-caption ${isMono ? 'font-mono' : ''}`}>{children}</span>;\n}\n","import { CARD } from '../../forms/ui/look';\n\n/** A gateway that is no app at pagasae signs no one in to its pages (header design H5). */\nexport function NoSignIn() {\n return (\n <section className={CARD} data-testid=\"no-sign-in\">\n <h2 className=\"text-heading font-semibold\">Nobody signs in here</h2>\n <p className=\"mt-2 text-muted-foreground\">This gateway signs no one in to its pages: it is no app at pagasae.</p>\n </section>\n );\n}\n"],"names":["ActionForm","Error","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","name","defaultValue","required","value","disabled","map","PARTY_KINDS","mcpServer","protocol","side","mcpClient","SIDES","server","one","many","client","PARTY_STATES","commissioning","tone","label","awaitingCrew","crewed","countsOf","parties","kinds","party","kind","protocols","Set","total","length","sides","filter","count","NoSignIn"],"mappings":"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","ignoreList":[0]}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[49144,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},51496,a=>{let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call LiveRefresh() from the server but LiveRefresh is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/web/features/overview/state/live-refresh.tsx","LiveRefresh");a.s(["LiveRefresh",0,b])},20285,a=>{var b=a.i(51496);a.n(b)},65044,a=>{var b=a.i(7997),c=a.i(11393);let d={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};function e({status:a}){return(0,b.jsx)("span",{className:`inline-flex shrink-0 items-center rounded-full border px-2 py-0.5 text-caption ${d[a.tone]}`,children:a.label})}function f({name:a}){return(0,b.jsx)("span",{"aria-hidden":"true",className:"inline-flex size-8 shrink-0 items-center justify-center rounded-md bg-secondary font-semibold text-secondary-foreground",children:a.slice(0,1).toUpperCase()})}function g({request:a,now:d}){let h=(0,c.M)(a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(f,{name:h}),(0,b.jsxs)("span",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate",children:h}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:(0,c.E)(a)})]}),(0,b.jsx)(e,{status:(0,c.T)(a,d)})]})}a.s(["f",0,function({title:a,requests:c,now:d,hrefOf:e,currentId:f}){return(0,b.jsxs)("section",{className:"grid gap-2",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," · ",c.length]}),c.map(a=>void 0===e?(0,b.jsx)("div",{className:"flex items-center gap-3 rounded-md border border-border bg-card p-3",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId):(0,b.jsx)("a",{href:e(a),"aria-current":a.requestId===f?"true":void 0,"data-testid":"overview-request",className:"flex items-center gap-3 rounded-md border border-border bg-card p-3 hover:bg-accent aria-[current=true]:border-ring",children:(0,b.jsx)(g,{request:a,now:d})},a.requestId))]})}],65044)},22126,a=>{var b=a.i(7997),c=a.i(49144);a.s(["f",0,function(){return(0,b.jsxs)("section",{className:c.r,"data-testid":"no-sign-in",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Nobody signs in here"}),(0,b.jsx)("p",{className:"mt-2 text-muted-foreground",children:"This gateway signs no one in to its pages: it is no app at pagasae."})]})}])}]})();
2
+
3
+ //# sourceMappingURL=web_features_0fxkmm4vqke5q._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/ui/look.ts","../../../../../web/features/overview/state/live-refresh.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/features/overview/state/live-refresh.tsx%22%20%7D","../../../../../web/features/overview/ui/requests-list.tsx","../../../../../web/features/overview/ui/status-badge.tsx","../../../../../web/features/sign-in/ui/no-sign-in.tsx"],"sourcesContent":["/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const LiveRefresh = registerClientReference(\n function() { throw new Error(\"Attempted to call LiveRefresh() from the server but LiveRefresh is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/features/overview/state/live-refresh.tsx\",\n \"LiveRefresh\",\n);\n","import { requestStatus, subjectKind, subjectName, type ShownRequest } from '../services/requests';\nimport { StatusBadge } from './status-badge';\n\nfunction PartyMark({ name }: { name: string }) {\n return (\n <span aria-hidden=\"true\" className=\"inline-flex size-8 shrink-0 items-center justify-center rounded-md bg-secondary font-semibold text-secondary-foreground\">\n {name.slice(0, 1).toUpperCase()}\n </span>\n );\n}\n\nfunction RequestRow({ request, now }: { request: ShownRequest; now: Date }) {\n const name = subjectName(request);\n return (\n <>\n <PartyMark name={name} />\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">{name}</span>\n <span className=\"text-caption text-muted-foreground\">{subjectKind(request)}</span>\n </span>\n <StatusBadge status={requestStatus(request, now)} />\n </>\n );\n}\n\n/** Requests in a list: each a link to decide it, or, for the person's own, its state alone. */\nexport function RequestsList({ title, requests, now, hrefOf, currentId }: { title: string; requests: readonly ShownRequest[]; now: Date; hrefOf?: (request: ShownRequest) => string; currentId?: string }) {\n return (\n <section className=\"grid gap-2\">\n <h2 className=\"text-section font-semibold\">\n {title} · {requests.length}\n </h2>\n {requests.map((request) =>\n hrefOf === undefined ? (\n <div key={request.requestId} className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3\">\n <RequestRow request={request} now={now} />\n </div>\n ) : (\n <a\n key={request.requestId}\n href={hrefOf(request)}\n aria-current={request.requestId === currentId ? 'true' : undefined}\n data-testid=\"overview-request\"\n className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3 hover:bg-accent aria-[current=true]:border-ring\"\n >\n <RequestRow request={request} now={now} />\n </a>\n ),\n )}\n </section>\n );\n}\n","import type { Status, Tone } from '../services/requests';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, always with its words, so it never rests on colour alone. */\nexport function StatusBadge({ status }: { status: Status }) {\n return <span className={`inline-flex shrink-0 items-center rounded-full border px-2 py-0.5 text-caption ${TONES[status.tone]}`}>{status.label}</span>;\n}\n","import { CARD } from '../../forms/ui/look';\n\n/** A gateway that is no app at pagasae signs no one in to its pages (header design H5). */\nexport function NoSignIn() {\n return (\n <section className={CARD} data-testid=\"no-sign-in\">\n <h2 className=\"text-heading font-semibold\">Nobody signs in here</h2>\n <p className=\"mt-2 text-muted-foreground\">This gateway signs no one in to its pages: it is no app at pagasae.</p>\n </section>\n );\n}\n"],"names":["CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","LiveRefresh","Error","TONES","waiting","active","ok","attention","ended","StatusBadge","status","className","tone","label","NoSignIn"],"mappings":"6CAGA,IAAMC,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,0BCbd,IAAMO,EAAc,CAAA,EAAA,AAD3B,EAAA,CAAA,CAAA,OAC2B,uBAAA,AAAuB,EAC9C,WAAa,MAAM,AAAIC,MAAM,oOAAsO,EACnQ,yDACA,sGCLJ,EAAA,EAAA,CAAA,CAAA,OCEA,IAAMC,EAA8B,CAClCC,QAAS,qEACTC,OAAQ,kEACRC,GAAI,sDACJC,UAAW,2EACXC,MAAO,8DACT,EAGO,SAASC,EAAY,QAAEC,CAAM,CAAsB,EACxD,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKC,UAAW,CAAC,+EAA+E,EAAER,CAAK,CAACO,EAAOE,IAAI,CAAC,CAAA,CAAE,UAAGF,EAAOG,KAAK,EAC/I,CDVA,SAAS,EAAU,CAAE,MAAI,CAAoB,EAC3C,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,cAAY,OAAO,UAAU,mIAChC,EAAK,KAAK,CAAC,EAAG,GAAG,WAAW,IAGnC,CAEA,SAAS,EAAW,SAAE,CAAO,KAAE,CAAG,CAAwC,EACxE,IAAM,EAAO,CAAA,EAAA,EAAA,CAAA,AAAW,EAAC,GACzB,MACE,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAU,KAAM,IACjB,CAAA,EAAA,EAAA,IAAA,EAACH,OAAAA,CAAK,UAAU,yCACd,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oBAAY,IAC5B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,8CAAsC,CAAA,EAAA,EAAA,CAAA,AAAW,EAACG,QAEpE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,OAAQ,CAAA,EAAA,EAAA,CAAA,AAAa,EAAC,EAAS,OAGlD,YAGO,SAAS,AAAa,OAAE,CAAK,UAAE,CAAQ,KAAE,CAAG,QAAE,CAAM,WAAE,CAAS,CAAmI,EACvM,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,uBACjB,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,uCACX,EAAM,MAAI,EAAS,MAAM,IAE3B,EAAS,GAAG,CAAC,AAAC,QACF,IAAX,EACE,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAA4B,UAAU,+EACrC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAW,QAAS,EAAS,IAAK,KAD3B,EAAQ,SAAS,EAI3B,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAEC,KAAM,EAAO,GACb,eAAc,EAAQ,SAAS,GAAK,EAAY,OAAS,OACzD,cAAY,mBACZ,UAAU,+HAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAW,QAAS,EAAS,IAAK,KAN9B,EAAQ,SAAS,KAYlC,qCEnDA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAASC,EACd,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQH,UAAW,EAAA,CAAI,CAAE,cAAY,uBACpC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAGA,UAAU,sCAA6B,yBAC3C,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEA,UAAU,sCAA6B,0EAGhD","ignoreList":[1]}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[38203,a=>{a.s(["r",0,"holder","e",0,"/authorize/waiting","U",0,function(a,b){let c=Math.max(0,Math.floor((a.getTime()-b.getTime())/36e5));return`${String(Math.floor(c/24))} d ${String(c%24)} h`}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])}]})();
2
+
3
+ //# sourceMappingURL=web_features_0h0ueu8_-_z5k._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/authorize/services/authorize.ts","../../../../../web/features/forms/ui/look.ts"],"sourcesContent":["/**\n * What the authorize pages work out: the time a request waiting for\n * approval has left, why a browser got nowhere connecting an MCP client,\n * and the authorization request the pick page carries on to the sign-in.\n */\nimport type { SearchParams } from '../../../lib/gateway-api/page-api';\n\nconst MS_PER_HOUR = 3_600_000;\nconst HOURS_PER_DAY = 24;\n\n/** The time a request has left, in days and hours, as the waiting page's ring shows it. */\nexport function timeLeft(expiresAt: Date, now: Date): string {\n const hours = Math.max(0, Math.floor((expiresAt.getTime() - now.getTime()) / MS_PER_HOUR));\n return `${String(Math.floor(hours / HOURS_PER_DAY))} d ${String(hours % HOURS_PER_DAY)} h`;\n}\n\nconst START_AGAIN = 'Start again from your MCP client.';\n\n/** Why a browser got nowhere, as the gateway's authorize doors name it (src/adapters/http/oauth-routes.ts). */\nconst REASONS: Record<string, string> = {\n invalidClient: `The gateway does not know this MCP client, or the address it asks to be sent back to. ${START_AGAIN}`,\n noPick: 'Pick on the page whether to sign in as yourself or to ask for access for the client.',\n unknownSignIn: `This sign-in is unknown, or took over 10 minutes. ${START_AGAIN}`,\n otherBrowser: `This sign-in was started in another browser, so it is not yours to finish. ${START_AGAIN}`,\n fleetNotServed: 'This gateway does not serve the fleet you signed in to.',\n outsidePartiesOff: \"Your fleet's outside parties are off, so no MCP client can ask for access. Sign in as yourself instead, or ask whoever runs your fleet.\",\n pagasaeRefused: `The sign-in service did not sign you in. ${START_AGAIN}`,\n unknownWaiting: `This request is unknown, or ended long ago. ${START_AGAIN}`,\n otherBrowserWaiting: `This request was made in another browser, so it is not yours to follow. ${START_AGAIN}`,\n noSignIn: 'This gateway signs no one in, so no MCP client can connect to it: its operator sets pagasae first.',\n};\n\nconst UNKNOWN_REASON = `The connection did not go through. ${START_AGAIN}`;\n\nexport function failedReasonText(reason: string | undefined): string {\n return (reason === undefined ? undefined : REASONS[reason]) ?? UNKNOWN_REASON;\n}\n\n/** The gateway's waiting address, which sends the browser on once its request no longer waits. */\nexport const WAITING_DOOR = '/authorize/waiting';\n\n/** The pick the page adds to the request, as the sign-in door reads it. */\nexport const HOLDER_FIELD = 'holder';\n\n/** The request's parameters the browser sent once each, without a pick: the page adds its own. */\nexport function pickFieldsOf(searchParams: SearchParams): [string, string][] {\n return Object.entries(searchParams).flatMap(([name, value]) => (typeof value === 'string' && name !== HOLDER_FIELD ? [[name, value]] : []));\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n"],"names":["MS_PER_HOUR","HOURS_PER_DAY","timeLeft","expiresAt","now","hours","Math","max","floor","getTime","String","START_AGAIN","REASONS","invalidClient","noPick","unknownSignIn","otherBrowser","fleetNotServed","outsidePartiesOff","pagasaeRefused","unknownWaiting","otherBrowserWaiting","noSignIn","UNKNOWN_REASON","failedReasonText","reason","undefined","WAITING_DOOR","HOLDER_FIELD","pickFieldsOf","searchParams","Object","entries","flatMap","name","value","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL"],"mappings":"wDA0C4B,eAHA,2BA5BrB,SAASE,AAASC,CAAe,CAAEC,CAAS,EACjD,IAAMC,EAAQC,KAAKC,GAAG,CAAC,EAAGD,KAAKE,KAAK,CAAC,CAACL,EAAUM,OAAO,GAAKL,EAAIK,OAAO,EAAA,CAAE,CALvD,GAK2DT,IAC7E,MAAO,CAAA,EAAGU,OAAOJ,KAAKE,KAAK,CAACH,OAAwB,CAAhBJ,EAAmB,EAAES,OAAOL,EAL5C,IAKmE,EAAfJ,AAAiB,CAAC,AAC5F,eCXA,IAAMoC,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},35149,a=>{var b=a.i(87924),c=a.i(88412);a.s(["f",0,function({choices:a,current:d,help:e,refusal:f}){let g=null===d||a.some(a=>a.shipId===d.shipId)?a:[d,...a];return(0,b.jsxs)("label",{className:c.z,children:[(0,b.jsx)("span",{children:"Owner"}),(0,b.jsxs)("select",{className:c.w,name:"ownerShipId",defaultValue:d?.shipId??"",required:!0,"data-testid":"owner-field",children:[null===d?(0,b.jsx)("option",{value:"",disabled:!0,children:"Pick its owner"}):null,g.map(a=>(0,b.jsx)("option",{value:a.shipId,children:a.name},a.shipId))]}),(0,b.jsx)("span",{className:"text-muted-foreground",children:f??e})]})}])},25964,a=>{var b=a.i(50944),c=a.i(72131);a.s(["LiveRefresh",0,function({fleetId:a}){let d;return d=(0,b.useRouter)(),(0,c.useEffect)(()=>{let b=new EventSource(`/overview/changes?fleet=${encodeURIComponent(a)}`);return b.onmessage=()=>{d.refresh()},()=>{b.close()}},[a,d]),null}],25964)},1542,24229,a=>{var b=a.i(87924);let c={primary:"bg-primary text-primary-foreground hover:bg-primary-hover",secondary:"border border-border bg-card text-card-foreground hover:bg-accent"};a.s(["f",0,function({isPending:a,pendingLabel:d,variant:e="secondary",children:f,className:g="",disabled:h,...i}){return(0,b.jsx)("button",{...i,disabled:!0===h||a,"aria-busy":a,className:`inline-flex h-9 items-center gap-2 rounded-md px-4 disabled:cursor-not-allowed disabled:opacity-70 ${c[e]} ${g}`,children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{"aria-hidden":"true",className:"size-3.5 animate-spin rounded-full border-2 border-current border-t-transparent"}),d]}):f})}],1542),a.s(["f",0,function({message:a,isFailure:c}){return c?(0,b.jsx)("p",{role:"alert","data-testid":"overview-failure",className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a}):(0,b.jsx)("p",{role:"status","data-testid":"overview-success",className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a})}],24229)}]})();
2
+
3
+ //# sourceMappingURL=web_features_0k3zd1eymtkgq._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/overview/hooks/use-live-refresh.ts","../../../../../web/features/overview/state/live-refresh.tsx","../../../../../web/features/overview/ui/action-button.tsx","../../../../../web/features/overview/ui/notice.tsx"],"sourcesContent":["/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useEffect } from 'react';\n\n/** The page's live updates, which the web app's server follows on the gateway's API for the browser. */\nexport const CHANGES_PATH = '/overview/changes';\n\n/**\n * Keeps the page in step with its fleet's requests: whenever one changes,\n * the page reads itself again on the server, as its own caller. The browser\n * opens the stream again by itself when it drops.\n */\nexport function useLiveRefresh(fleetId: string): void {\n const router = useRouter();\n useEffect(() => {\n const changes = new EventSource(`${CHANGES_PATH}?fleet=${encodeURIComponent(fleetId)}`);\n changes.onmessage = () => {\n router.refresh();\n };\n return () => {\n changes.close();\n };\n }, [fleetId, router]);\n}\n","'use client';\n\nimport { useLiveRefresh } from '../hooks/use-live-refresh';\n\n/** Keeps the page it sits in live: it shows nothing itself. */\nexport function LiveRefresh({ fleetId }: { fleetId: string }) {\n useLiveRefresh(fleetId);\n return null;\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nconst VARIANTS = {\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover',\n secondary: 'border border-border bg-card text-card-foreground hover:bg-accent',\n} as const;\n\n/**\n * A button for an action: the moment it is pressed and until the answer\n * comes, it shows a spinner and its working label, and cannot run twice.\n */\nexport function ActionButton({\n isPending,\n pendingLabel,\n variant = 'secondary',\n children,\n className = '',\n disabled,\n ...button\n}: ButtonHTMLAttributes<HTMLButtonElement> & { isPending: boolean; pendingLabel: string; variant?: keyof typeof VARIANTS; children: ReactNode }) {\n return (\n <button\n {...button}\n disabled={disabled === true || isPending}\n aria-busy={isPending}\n className={`inline-flex h-9 items-center gap-2 rounded-md px-4 disabled:cursor-not-allowed disabled:opacity-70 ${VARIANTS[variant]} ${className}`}\n >\n {isPending ? (\n <>\n <span aria-hidden=\"true\" className=\"size-3.5 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n {pendingLabel}\n </>\n ) : (\n children\n )}\n </button>\n );\n}\n","/** What an action came to, said in place: a success as a status, a failure as an alert by the control. */\nexport function Notice({ message, isFailure }: { message: string; isFailure: boolean }) {\n return isFailure ? (\n <p role=\"alert\" data-testid=\"overview-failure\" className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {message}\n </p>\n ) : (\n <p role=\"status\" data-testid=\"overview-success\" className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {message}\n </p>\n );\n}\n"],"names":["CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","name","defaultValue","required","value","disabled","map","CHANGES_PATH","useLiveRefresh","fleetId","router","changes","EventSource","encodeURIComponent","onmessage","refresh","close","VARIANTS","ActionButton","isPending","pendingLabel","variant","children","button"],"mappings":"6CAGA,IAAMC,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,2CCfrB,EAAA,EAAA,CAAA,CAAA,kBAiBO,SAASO,AAAW,SAAEC,CAAO,SAAEC,CAAO,MAAEC,CAAI,CAAEC,SAAO,CAAgH,EAC1K,IAAMC,EAAoB,OAAZH,GAAoBD,EAAQK,IAAI,CAAC,AAACC,GAAWA,EAAOC,MAAM,GAAKN,EAAQM,MAAM,EAAIP,EAAU,CAACC,KAAYD,EAAQ,CAC9H,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMQ,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAEC,KAAK,cAAcC,aAAcT,GAASM,QAAU,GAAII,QAAQ,CAAA,CAAA,EAAC,cAAY,wBACxF,OAAZV,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOW,MAAM,GAAGC,QAAQ,CAAA,CAAA,WAAC,mBAGxB,KACHT,EAAMU,GAAG,CAAC,AAACR,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAA2BM,MAAON,EAAOC,MAAM,UAC7CD,EAAOG,IAAI,EADDH,EAAOC,MAAM,MAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKC,UAAU,iCAAyBL,GAAWD,MAG1D,eCnCA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,4BCEO,SAAS,AAAY,CAAE,SAAO,CAAuB,QAE1D,ODOMgB,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IACxB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAMC,EAAU,IAAIC,YAAY,GAAGL,aAAa,OAAO,IAAEM,mBAAmBJ,IAAU,EAItF,OAHAE,EAAQG,SAAS,CAAG,KAClBJ,EAAOK,OAAO,EAChB,EACO,KACLJ,EAAQK,KAAK,EACf,CACF,EAAG,CCjBY,EDiBFN,EAAO,EChBb,IACT,2CCNA,IAAMO,EAAW,CACf/B,QAAS,4DACTC,UAAW,mEACb,aAMO,SAAS+B,AAAa,WAC3BC,CAAS,cACTC,CAAY,SACZC,EAAU,WAAW,UACrBC,CAAQ,WACRtB,EAAY,EAAE,UACdK,CAAQ,CACR,GAAGkB,EAC0I,EAC7I,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACE,GAAGA,CAAM,CACVlB,UAAuB,IAAbA,GAAqBc,EAC/B,YAAWA,EACXnB,UAAW,CAAC,mGAAmG,EAAEiB,CAAQ,CAACI,EAAQ,CAAC,CAAC,EAAErB,EAAAA,CAAW,UAEhJmB,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,cAAY,OAAOnB,UAAU,oFAClCoB,KAGHE,GAIR,oBCpCO,SAAS,AAAO,SAAE,CAAO,WAAE,CAAS,CAA2C,EACpF,OAAO,EACL,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,QAAQ,cAAY,mBAAmB,UAAU,gHACtD,IAGH,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,SAAS,cAAY,mBAAmB,UAAU,2FACvD,GAGP"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[38203,a=>{a.s(["r",0,"holder","e",0,"/authorize/waiting","U",0,function(a,b){let c=Math.max(0,Math.floor((a.getTime()-b.getTime())/36e5));return`${String(Math.floor(c/24))} d ${String(c%24)} h`}])},819,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(88412),e=a.i(38203);a.s(["PickHolder",0,function({fields:a}){let[f,g]=(0,c.useState)(void 0),h=(0,c.useRef)(!1),i=a=>()=>{h.current||g(a)};return(0,b.jsxs)("form",{method:"get",action:"/authorize/sign-in",onSubmit:a=>{h.current?a.preventDefault():h.current=!0},className:"grid gap-3 sm:grid-cols-2",children:[a.map(([a,c])=>(0,b.jsx)("input",{type:"hidden",name:a,value:c},a)),(0,b.jsxs)("button",{type:"submit",name:e.r,value:"account",onClick:i("account"),"aria-busy":"account"===f,"data-testid":"authorize-pick-account",className:`${d.r} grid gap-1 text-left hover:bg-accent`,children:[(0,b.jsx)("strong",{children:"account"===f?"Signing in...":"Sign in as yourself"}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"The client acts as you."})]}),(0,b.jsxs)("button",{type:"submit",name:e.r,value:"party",onClick:i("party"),"aria-busy":"party"===f,"data-testid":"authorize-pick-party",className:`${d.r} grid gap-1 text-left hover:bg-accent`,children:[(0,b.jsx)("strong",{children:"party"===f?"Signing in...":"Ask for access for this client"}),(0,b.jsx)("span",{className:"text-muted-foreground",children:"An approver of your fleet decides; the client then acts as its own party."})]})]})}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])}]})();
2
+
3
+ //# sourceMappingURL=web_features_0vq1wjkuh6dmr._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/authorize/services/authorize.ts","../../../../../web/features/authorize/ui/pick-holder.tsx","../../../../../web/features/forms/ui/look.ts"],"sourcesContent":["/**\n * What the authorize pages work out: the time a request waiting for\n * approval has left, why a browser got nowhere connecting an MCP client,\n * and the authorization request the pick page carries on to the sign-in.\n */\nimport type { SearchParams } from '../../../lib/gateway-api/page-api';\n\nconst MS_PER_HOUR = 3_600_000;\nconst HOURS_PER_DAY = 24;\n\n/** The time a request has left, in days and hours, as the waiting page's ring shows it. */\nexport function timeLeft(expiresAt: Date, now: Date): string {\n const hours = Math.max(0, Math.floor((expiresAt.getTime() - now.getTime()) / MS_PER_HOUR));\n return `${String(Math.floor(hours / HOURS_PER_DAY))} d ${String(hours % HOURS_PER_DAY)} h`;\n}\n\nconst START_AGAIN = 'Start again from your MCP client.';\n\n/** Why a browser got nowhere, as the gateway's authorize doors name it (src/adapters/http/oauth-routes.ts). */\nconst REASONS: Record<string, string> = {\n invalidClient: `The gateway does not know this MCP client, or the address it asks to be sent back to. ${START_AGAIN}`,\n noPick: 'Pick on the page whether to sign in as yourself or to ask for access for the client.',\n unknownSignIn: `This sign-in is unknown, or took over 10 minutes. ${START_AGAIN}`,\n otherBrowser: `This sign-in was started in another browser, so it is not yours to finish. ${START_AGAIN}`,\n fleetNotServed: 'This gateway does not serve the fleet you signed in to.',\n outsidePartiesOff: \"Your fleet's outside parties are off, so no MCP client can ask for access. Sign in as yourself instead, or ask whoever runs your fleet.\",\n pagasaeRefused: `The sign-in service did not sign you in. ${START_AGAIN}`,\n unknownWaiting: `This request is unknown, or ended long ago. ${START_AGAIN}`,\n otherBrowserWaiting: `This request was made in another browser, so it is not yours to follow. ${START_AGAIN}`,\n noSignIn: 'This gateway signs no one in, so no MCP client can connect to it: its operator sets pagasae first.',\n};\n\nconst UNKNOWN_REASON = `The connection did not go through. ${START_AGAIN}`;\n\nexport function failedReasonText(reason: string | undefined): string {\n return (reason === undefined ? undefined : REASONS[reason]) ?? UNKNOWN_REASON;\n}\n\n/** The gateway's waiting address, which sends the browser on once its request no longer waits. */\nexport const WAITING_DOOR = '/authorize/waiting';\n\n/** The pick the page adds to the request, as the sign-in door reads it. */\nexport const HOLDER_FIELD = 'holder';\n\n/** The request's parameters the browser sent once each, without a pick: the page adds its own. */\nexport function pickFieldsOf(searchParams: SearchParams): [string, string][] {\n return Object.entries(searchParams).flatMap(([name, value]) => (typeof value === 'string' && name !== HOLDER_FIELD ? [[name, value]] : []));\n}\n","'use client';\n\nimport { useRef, useState, type SyntheticEvent } from 'react';\n\nimport { CARD } from '../../forms/ui/look';\nimport { HOLDER_FIELD } from '../services/authorize';\n\ntype Holder = 'account' | 'party';\n\n/** The sign-in door that starts the sign-in through pagasae for the pick. */\nconst SIGN_IN_DOOR = '/authorize/sign-in';\n\n/**\n * The two picks (Q1 a), each starting a sign-in through pagasae. The\n * button pressed says the sign-in is on its way at once; a second press\n * meanwhile sends nothing. The buttons stay enabled, so the browser still\n * sends the pick.\n */\nexport function PickHolder({ fields }: { fields: readonly [string, string][] }) {\n const [picked, setPicked] = useState<Holder | undefined>(undefined);\n const isSent = useRef(false);\n const onSubmit = (event: SyntheticEvent<HTMLFormElement>) => {\n if (isSent.current) {\n event.preventDefault();\n return;\n }\n isSent.current = true;\n };\n const pick = (holder: Holder) => () => {\n if (!isSent.current) {\n setPicked(holder);\n }\n };\n return (\n <form method=\"get\" action={SIGN_IN_DOOR} onSubmit={onSubmit} className=\"grid gap-3 sm:grid-cols-2\">\n {fields.map(([name, value]) => (\n <input key={name} type=\"hidden\" name={name} value={value} />\n ))}\n <button type=\"submit\" name={HOLDER_FIELD} value=\"account\" onClick={pick('account')} aria-busy={picked === 'account'} data-testid=\"authorize-pick-account\" className={`${CARD} grid gap-1 text-left hover:bg-accent`}>\n <strong>{picked === 'account' ? 'Signing in...' : 'Sign in as yourself'}</strong>\n <span className=\"text-muted-foreground\">The client acts as you.</span>\n </button>\n <button type=\"submit\" name={HOLDER_FIELD} value=\"party\" onClick={pick('party')} aria-busy={picked === 'party'} data-testid=\"authorize-pick-party\" className={`${CARD} grid gap-1 text-left hover:bg-accent`}>\n <strong>{picked === 'party' ? 'Signing in...' : 'Ask for access for this client'}</strong>\n <span className=\"text-muted-foreground\">An approver of your fleet decides; the client then acts as its own party.</span>\n </button>\n </form>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n"],"names":["MS_PER_HOUR","HOURS_PER_DAY","timeLeft","expiresAt","now","hours","Math","max","floor","getTime","String","START_AGAIN","REASONS","invalidClient","noPick","unknownSignIn","otherBrowser","fleetNotServed","outsidePartiesOff","pagasaeRefused","unknownWaiting","otherBrowserWaiting","noSignIn","UNKNOWN_REASON","failedReasonText","reason","undefined","WAITING_DOOR","HOLDER_FIELD","pickFieldsOf","searchParams","Object","entries","flatMap","name","value","SIGN_IN_DOOR","PickHolder","fields","picked","setPicked","isSent","onSubmit","event","current","preventDefault","pick","holder","method","action","className","map","type","onClick","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL"],"mappings":"wDA0C4B,eAHA,2BA5BrB,SAAkBG,AAATD,CAAwB,CAAEE,CAAS,EACjD,IAAMC,EAAQC,KAAKC,GAAG,CAAC,EAAGD,KAAKE,KAAK,CAAC,AAACL,GAAUM,OAAO,GAAKL,EAAIK,OAAO,EAAA,CAAE,CALvD,GAK2DT,IAC7E,MAAO,CAAA,EAAGU,OAAOJ,KAAKE,KAAK,CAACH,OAAwB,CAAhBJ,EAAmB,EAAES,OAAOL,EAL5C,IAKmE,EAAfJ,AAAiB,CAC3F,AAD4F,8BCX5F,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,2BAaO,SAASoC,AAAW,QAAEC,CAAM,CAA2C,EAC5E,GAAM,CAACC,EAAQC,EAAU,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,OAAqBd,GACnDe,EAAS,CAAA,EAAA,EAAA,MAAA,AAAM,EAAC,IAQhBK,EAAO,AAACC,GAAmB,KAC3B,AAACN,EAAOG,OAAO,EAAE,AACnBJ,EAAUO,EAEd,EACA,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKC,OAAO,MAAMC,OAxBF,CAwBUb,oBAAcM,SAb1B,AAACC,CAamCD,GAZnD,AAAID,EAAOG,OAAO,CAChBD,CADkB,CACZE,cAAc,GAGtBJ,EAAOG,OAAO,EAAG,CACnB,EAO+DM,UAAU,sCACpEZ,EAAOa,GAAG,CAAC,CAAC,CAACjB,EAAMC,EAAM,GACxB,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAiBiB,KAAK,SAASlB,KAAMA,EAAMC,MAAOA,GAAvCD,IAEd,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOkB,KAAK,SAASlB,KAAM,EAAA,CAAY,CAAEC,MAAM,UAAUkB,QAASP,EAAK,WAAY,YAAsB,YAAXP,EAAsB,cAAY,yBAAyBW,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,qCAAqC,CAAC,WACjN,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,UAAmB,YAAXX,EAAuB,gBAAkB,wBAClD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKW,UAAU,iCAAwB,+BAE1C,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOE,KAAK,SAASlB,KAAM,EAAA,CAAY,CAAEC,MAAM,QAAQkB,QAASP,EAAK,SAAU,YAAsB,UAAXP,EAAoB,cAAY,uBAAuBW,UAAW,CAAA,EAAG,EAAA,CAAI,CAAC,qCAAqC,CAAC,WACzM,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,UAAmB,UAAXX,EAAqB,gBAAkB,mCAChD,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKW,UAAU,iCAAwB,mFAIhD,eC7CA,IAAMK,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA"}
@@ -0,0 +1,3 @@
1
+ module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(35149),h=a.i(77237),i=a.i(5050);let j=(0,i.createServerReference)("608c027fe8149e66524c01289698c18140e03fb815",i.callServer,void 0,i.findSourceMapURL,"approveServer"),k=(0,i.createServerReference)("604e59108806ad2673809d074c8d3ca013d552346b",i.callServer,void 0,i.findSourceMapURL,"checkServer"),l=["Address","Check","Owner"],m=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function n({at:a}){return(0,b.jsx)("ol",{className:"flex gap-4",children:l.map((c,d)=>(0,b.jsxs)("li",{"aria-current":d===a?"step":void 0,className:d<=a?"font-medium":"text-muted-foreground",children:[d+1," ",c]},c))})}function o({refusal:a}){return void 0===a?null:(0,b.jsx)(f.f,{state:{kind:"refused",message:a}})}function p({state:a,action:f,fleetId:g}){let[i,j]=(0,c.useState)(a.fields.credentialKind??"bearer");return(0,b.jsxs)("form",{action:f,className:`${e.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsxs)("fieldset",{className:"grid gap-3",children:[(0,b.jsx)("legend",{className:"font-medium",children:"The server's credential"}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsxs)("select",{className:e.w,name:"credentialKind",value:i,onChange:a=>{j(a.target.value)},children:[(0,b.jsx)("option",{value:"bearer",children:"Bearer token"}),(0,b.jsx)("option",{value:"clientCredentials",children:"OAuth client credentials"})]})]}),"clientCredentials"===i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"clientId",defaultValue:a.fields.clientId??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"clientSecret"})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"issuer",defaultValue:a.fields.issuer??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"scope",defaultValue:a.fields.scope??""})]})]}):(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"token"})]})]}),(0,b.jsx)("div",{children:(0,b.jsx)(h.f,{pending:"Checking the server…",testId:"add-server-check",children:"Check the server"})})]})}function q({state:a,refused:c,action:f,onBack:i,fleetId:j}){let k="refused"===c.kind&&c.requestId===a.requestId,l=k?c.fields:a.fields,{tools:n}=a,p=l.url??"",r=l.name??(URL.canParse(p)?(new URL(p).hostname.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,""):"");return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("section",{className:`${e.r} grid gap-2`,"data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:["The server answers: ",n.length," ",1===n.length?"tool":"tools"]}),(0,b.jsx)("ul",{className:"grid gap-1",children:n.map(a=>(0,b.jsxs)("li",{className:"grid",children:[(0,b.jsx)("span",{className:"font-mono",children:a.name}),void 0===a.description?null:(0,b.jsx)("span",{className:"text-muted-foreground",children:a.description})]},a.name))})]}),(0,b.jsxs)("form",{action:f,className:`${e.r} grid gap-3`,"data-testid":"add-server-owner",children:[(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:k?c.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),m.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:l[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:p}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"name",defaultValue:r,required:!0})]}),(0,b.jsx)(g.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===l.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:e.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:l.concurrencyLimit??"4"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(h.f,{pending:"Adding…",testId:"add-server-approve",children:["Add ",""===r?"server":r]}),(0,b.jsx)("button",{type:"button",className:e.x.secondary,onClick:i,children:"Back to the address"})]})]})]})}a.s(["AddServer",0,function({fleetId:a}){let[d,e]=(0,c.useActionState)(k,{step:"address",fields:{}}),[f,g]=(0,c.useActionState)(j,{kind:"idle"}),[h,i]=(0,c.useState)(void 0),l="owner"===d.step&&h!==d.requestId?d:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add MCP server"}),(0,b.jsx)(n,{at:2*(void 0!==l)}),void 0===l?(0,b.jsx)(p,{state:d,action:e,fleetId:a}):(0,b.jsx)(q,{state:l,refused:f,action:g,onBack:()=>{i(l.requestId)},fleetId:a})]})}],29372)}];
2
+
3
+ //# sourceMappingURL=web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3A60e4ca%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A99d634%20%3Ctext/javascript%3E","../../../../../web/features/add-server/suggested-name.ts"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { approveServer, checkServer, type AddServerState, type ApproveState } from '../actions';\nimport { suggestedName } from '../suggested-name';\n\n/** The steps of adding a server, as the design numbers them. */\nconst STEPS = ['Address', 'Check', 'Owner'] as const;\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\nfunction Steps({ at }: { at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {STEPS.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n\nfunction Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n\nfunction AddressStep({ state, action, fleetId }: { state: Extract<AddServerState, { step: 'address' }> | { fields: Record<string, string>; refusal?: string }; action: (form: FormData) => void; fleetId: string }) {\n const [credentialKind, setCredentialKind] = useState(state.fields.credentialKind ?? 'bearer');\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <fieldset className=\"grid gap-3\">\n <legend className=\"font-medium\">The server&apos;s credential</legend>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(event.target.value); }}>\n <option value=\"bearer\">Bearer token</option>\n <option value=\"clientCredentials\">OAuth client credentials</option>\n </select>\n </label>\n {credentialKind === 'clientCredentials' ? (\n <>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} type=\"text\" name=\"clientId\" defaultValue={state.fields.clientId ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} type=\"password\" name=\"clientSecret\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} type=\"url\" name=\"issuer\" defaultValue={state.fields.issuer ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} type=\"text\" name=\"scope\" defaultValue={state.fields.scope ?? ''} />\n </label>\n </>\n ) : (\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} type=\"password\" name=\"token\" />\n </label>\n )}\n </fieldset>\n <div>\n <SubmitButton pending=\"Checking the server…\" testId=\"add-server-check\">\n Check the server\n </SubmitButton>\n </div>\n </form>\n );\n}\n\nfunction OwnerStep({ state, refused, action, onBack, fleetId }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const { tools } = state;\n const url = fields.url ?? '';\n const name = fields.name ?? suggestedName(url);\n return (\n <>\n <section className={`${CARD} grid gap-2`} data-testid=\"add-server-tools\">\n <h2 className=\"text-section font-semibold\">\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </h2>\n <ul className=\"grid gap-1\">\n {tools.map((tool) => (\n <li key={tool.name} className=\"grid\">\n <span className=\"font-mono\">{tool.name}</span>\n {tool.description === undefined ? null : <span className=\"text-muted-foreground\">{tool.description}</span>}\n </li>\n ))}\n </ul>\n </section>\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship&apos;s name</span>\n <input className={INPUT} type=\"text\" name=\"name\" defaultValue={name} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <div className=\"flex gap-2\">\n <SubmitButton pending=\"Adding…\" testId=\"add-server-approve\">\n Add {name === '' ? 'server' : name}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. Each\n * button says at once that its step is on its way.\n */\nexport function AddServer({ fleetId }: { fleetId: string }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [refused, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n <Steps at={owner === undefined ? 0 : 2} />\n {owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={refused} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"608c027fe8149e66524c01289698c18140e03fb815\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"608c027fe8149e66524c01289698c18140e03fb815\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"604e59108806ad2673809d074c8d3ca013d552346b\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"604e59108806ad2673809d074c8d3ca013d552346b\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","/** A proxy ship's name offered from a server's address: its host's first name that says whose it is. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const labels = new URL(url).hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[67663,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(88412),e=a.i(38203);function f(a){let b=new WebSocket(a),c={close:()=>{b.close()}};return b.onopen=()=>c.onOpen?.(),b.onmessage=a=>c.onMessage?.(a.data),b.onclose=a=>c.onClose?.(a.code),c}a.s(["WaitingForApproval",0,function({waiting:a,clientName:g,expiresAt:h,shownAt:i}){(0,c.useEffect)(()=>{var b;let c,d,g,h,i,j,k,l,m;return b={origin:location,open:f,goOn:a=>{location.replace(a)},later:(a,b)=>{let c=setTimeout(a,b);return()=>{clearTimeout(c)}},now:()=>Date.now()},h=new URLSearchParams({waiting:a}).toString(),i=`${e.e}?${h}`,j=`${"https:"===b.origin.protocol?"wss:":"ws:"}//${b.origin.host}${e.e}/live?${h}`,k=500,l=!1,(m=()=>{let a=b.open(j);g=a,a.onOpen=()=>{k=500},a.onMessage=a=>{let d=function(a){let b;if("string"==typeof a){try{b=JSON.parse(a)}catch{return}if("object"==typeof b&&null!==b)return"go"in b&&!0===b.go?"goOn":"expiresAt"in b&&"string"==typeof b.expiresAt?{expiresAt:b.expiresAt}:void 0}}(a);if(void 0!==d){if("goOn"===d)return void b.goOn(i);c?.(),c=b.later(()=>{b.goOn(i)},Math.max(0,Date.parse(d.expiresAt)-b.now()))}},a.onClose=a=>{l||4403===a||(d=b.later(m,k),k=Math.min(2*k,1e4))}})(),()=>{l=!0,c?.(),d?.(),g?.close()}},[a]);let[j,k]=(0,c.useState)(()=>new Date(i));(0,c.useEffect)(()=>{let a=setInterval(()=>{k(new Date)},6e4);return()=>{clearInterval(a)}},[]);let l=(0,e.U)(new Date(h),j);return(0,b.jsxs)("section",{className:`${d.r} grid gap-3`,"data-testid":"authorize-waiting",children:[(0,b.jsx)("h1",{className:"text-heading font-semibold",children:"Waiting for approval"}),(0,b.jsxs)("p",{role:"status","aria-live":"polite",className:"inline-flex w-fit rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-1 text-tone-attention-fg",children:[(0,b.jsx)("span",{"data-testid":"authorize-waiting-left",children:l})," left"]}),(0,b.jsxs)("p",{children:[(0,b.jsx)("strong",{children:g})," waits for an approver of your fleet."]}),(0,b.jsx)("p",{children:"Goes on by itself."}),(0,b.jsx)("p",{className:"text-muted-foreground",children:"Closed this page? Connect again later."})]})}],67663)}];
2
+
3
+ //# sourceMappingURL=web_features_authorize_ui_waiting-for-approval_tsx_00iwjvj4orq9g._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/authorize/ui/waiting-for-approval.tsx","../../../../../web/features/authorize/hooks/follow-waiting.ts","../../../../../web/features/authorize/hooks/use-follow-waiting.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { CARD } from '../../forms/ui/look';\nimport { useFollowWaiting } from '../hooks/use-follow-waiting';\nimport { timeLeft } from '../services/authorize';\n\nconst MS_PER_MINUTE = 60_000;\n\n/** The client waits for an approver of the fleet: its time left, and the page goes on by itself once the request is decided. */\nexport function WaitingForApproval({ waiting, clientName, expiresAt, shownAt }: { waiting: string; clientName: string; expiresAt: string; shownAt: string }) {\n useFollowWaiting(waiting);\n const [now, setNow] = useState(() => new Date(shownAt));\n useEffect(() => {\n const tick = setInterval(() => {\n setNow(new Date());\n }, MS_PER_MINUTE);\n return () => {\n clearInterval(tick);\n };\n }, []);\n const left = timeLeft(new Date(expiresAt), now);\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"authorize-waiting\">\n <h1 className=\"text-heading font-semibold\">Waiting for approval</h1>\n <p role=\"status\" aria-live=\"polite\" className=\"inline-flex w-fit rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-1 text-tone-attention-fg\">\n <span data-testid=\"authorize-waiting-left\">{left}</span>&nbsp;left\n </p>\n <p>\n <strong>{clientName}</strong> waits for an approver of your fleet.\n </p>\n <p>Goes on by itself.</p>\n <p className=\"text-muted-foreground\">Closed this page? Connect again later.</p>\n </section>\n );\n}\n","/**\n * How the waiting page follows its request on the gateway's live channel:\n * it goes to the gateway's waiting address once told to, there to be sent\n * on, and goes there too when the request expires. A dropped channel opens\n * again with backoff. It never reloads on a timer.\n */\nimport { WAITING_DOOR } from '../services/authorize';\n\n/** Why the gateway closed the live channel for good: it was not opened from the waiting page. */\nconst CLOSE_OTHER_ORIGIN = 4403;\nconst FIRST_RETRY_MS = 500;\nconst LAST_RETRY_MS = 10_000;\n\n/** The live channel as the page follows it: what it is told, and when it opens and closes. */\nexport interface LiveChannel {\n onOpen?: () => void;\n onMessage?: (data: unknown) => void;\n onClose?: (code: number) => void;\n close(): void;\n}\n\nexport interface FollowWaitingDeps {\n origin: { protocol: string; host: string };\n open(url: string): LiveChannel;\n goOn(url: string): void;\n /** Runs later, answering how to cancel it. */\n later(run: () => void, delayMs: number): () => void;\n now(): number;\n}\n\n/** Whether the live channel says to go on, or when the request expires. */\nfunction toldOf(data: unknown): 'goOn' | { expiresAt: string } | undefined {\n if (typeof data !== 'string') {\n return undefined;\n }\n let told: unknown;\n try {\n told = JSON.parse(data);\n } catch {\n return undefined;\n }\n if (typeof told !== 'object' || told === null) {\n return undefined;\n }\n if ('go' in told && told.go === true) {\n return 'goOn';\n }\n return 'expiresAt' in told && typeof told.expiresAt === 'string' ? { expiresAt: told.expiresAt } : undefined;\n}\n\n/** Follows the waiting until it goes on; answers how to stop, as the page goes. */\nexport function followWaiting(waiting: string, deps: FollowWaitingDeps): () => void {\n const asked = new URLSearchParams({ waiting }).toString();\n const door = `${WAITING_DOOR}?${asked}`;\n const live = `${deps.origin.protocol === 'https:' ? 'wss:' : 'ws:'}//${deps.origin.host}${WAITING_DOOR}/live?${asked}`;\n let retry = FIRST_RETRY_MS;\n let cancelExpiry: (() => void) | undefined;\n let cancelReopen: (() => void) | undefined;\n let channel: LiveChannel | undefined;\n let isLeft = false;\n const open = () => {\n const opened = deps.open(live);\n channel = opened;\n opened.onOpen = () => {\n retry = FIRST_RETRY_MS;\n };\n opened.onMessage = (data) => {\n const told = toldOf(data);\n if (told === undefined) {\n return;\n }\n if (told === 'goOn') {\n deps.goOn(door);\n return;\n }\n cancelExpiry?.();\n cancelExpiry = deps.later(() => {\n deps.goOn(door);\n }, Math.max(0, Date.parse(told.expiresAt) - deps.now()));\n };\n opened.onClose = (code) => {\n if (isLeft || code === CLOSE_OTHER_ORIGIN) {\n return;\n }\n cancelReopen = deps.later(open, retry);\n retry = Math.min(retry * 2, LAST_RETRY_MS);\n };\n };\n open();\n return () => {\n isLeft = true;\n cancelExpiry?.();\n cancelReopen?.();\n channel?.close();\n };\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { followWaiting, type LiveChannel } from './follow-waiting';\n\n/** The browser's WebSocket as the waiting page's live channel. */\nfunction webSocketChannel(url: string): LiveChannel {\n const socket = new WebSocket(url);\n const channel: LiveChannel = {\n close: () => {\n socket.close();\n },\n };\n socket.onopen = () => channel.onOpen?.();\n socket.onmessage = (event) => channel.onMessage?.(event.data);\n socket.onclose = (event) => channel.onClose?.(event.code);\n return channel;\n}\n\n/** Follows the page's request live while the page shows (follow-waiting.ts). */\nexport function useFollowWaiting(waiting: string): void {\n useEffect(\n () =>\n followWaiting(waiting, {\n origin: location,\n open: webSocketChannel,\n goOn: (url) => {\n location.replace(url);\n },\n later: (run, delayMs) => {\n const timer = setTimeout(run, delayMs);\n return () => {\n clearTimeout(timer);\n };\n },\n now: () => Date.now(),\n }),\n [waiting],\n );\n}\n"],"names":["CLOSE_OTHER_ORIGIN","FIRST_RETRY_MS","LAST_RETRY_MS","toldOf","data","undefined","told","JSON","parse","go","expiresAt","followWaiting","waiting","deps","asked","URLSearchParams","toString","door","live","origin","protocol","host","retry","cancelExpiry","cancelReopen","channel","isLeft","open","opened","onOpen","onMessage","goOn","later","Math","max","Date","now","onClose","code","min","close"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[30587,36855,77237,a=>{a.s(["H",0,"fleet","Q",0,{kind:"idle"}],30587);var b=a.i(87924);a.s(["f",0,function({state:a,testId:c}){switch(a.kind){case"idle":return null;case"done":return(0,b.jsx)("p",{role:"status","data-testid":c,className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a.message});case"refused":case"openNetwork":return(0,b.jsx)("p",{role:"alert","data-testid":c,className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a.message})}}],36855);var c=a.i(35112),d=a.i(88412);a.s(["f",0,function({children:a,pending:e,kind:f="primary",testId:g}){let h=(0,c.useFormStatus)();return(0,b.jsx)("button",{type:"submit",className:d.x[f],disabled:h.pending,"aria-busy":h.pending,"data-testid":g,children:h.pending?e:a})}],77237)},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},35149,a=>{var b=a.i(87924),c=a.i(88412);a.s(["f",0,function({choices:a,current:d,help:e,refusal:f}){let g=null===d||a.some(a=>a.shipId===d.shipId)?a:[d,...a];return(0,b.jsxs)("label",{className:c.z,children:[(0,b.jsx)("span",{children:"Owner"}),(0,b.jsxs)("select",{className:c.w,name:"ownerShipId",defaultValue:d?.shipId??"",required:!0,"data-testid":"owner-field",children:[null===d?(0,b.jsx)("option",{value:"",disabled:!0,children:"Pick its owner"}):null,g.map(a=>(0,b.jsx)("option",{value:a.shipId,children:a.name},a.shipId))]}),(0,b.jsx)("span",{className:"text-muted-foreground",children:f??e})]})}])}]})();
2
+
3
+ //# sourceMappingURL=web_features_forms_03k1kg82ux_ee._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/submit-button.tsx","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","defaultValue","required","disabled","map"],"mappings":"oEAyB2B,cAdI,CAAEC,KAAM,MAAO,sCCRvC,SAAS,AAAQ,OAAE,CAAK,QAAE,CAAM,CAAyC,EAC9E,OAAQ,EAAM,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,SAAS,cAAa,EAAQ,UAAU,2FAC7C,EAAM,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEG,KAAK,QAAQ,cAAa,EAAQ,UAAUC,gHAC5C,EAAM,OAAO,EAGtB,CACF,UClBA,IAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAAS,AAAa,CAAE,UAAQ,SAAE,CAAO,MAAE,EAAO,SAAS,QAAE,CAAM,CAAgF,EACxJ,IAAMJ,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,SAAS,UAAW,EAAA,CAAO,CAAC,EAAK,CAAEC,SAAU,EAAO,OAAOE,CAAE,YAAW,EAAO,OAAO,CAAE,cAAa,WAC/G,EAAO,OAAOC,CAAG,EAAU,GAGlC,qBCZA,IAAMS,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,2CCfrB,EAAA,EAAA,CAAA,CAAA,kBAiBO,SAAoB,AAAXO,SAAaC,CAAO,SAAEC,CAAO,MAAEC,CAAI,SAAEC,CAAO,CAAgH,EAC1K,IAAMC,EAAoB,OAAZH,GAAoBD,EAAQK,IAAI,CAAC,AAACC,GAAWA,EAAOC,MAAM,GAAKN,EAAQM,MAAM,EAAIP,EAAU,CAACC,KAAYD,EAAQ,CAC9H,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMQ,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAE1B,KAAK,cAAc2B,aAAcR,GAASM,QAAU,GAAIG,QAAQ,CAAA,CAAA,EAAC,cAAY,wBACxF,OAAZT,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOlB,MAAM,GAAG4B,QAAQ,CAAA,CAAA,WAAC,mBAGxB,KACHP,EAAMQ,GAAG,CAAC,AAACN,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAA2BvB,MAAOuB,EAAOC,MAAM,UAC7CD,EAAOxB,IAAI,EADDwB,EAAOC,MAAM,MAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKC,UAAU,iCAAyBL,GAAWD,MAG1D"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[30587,36855,77237,a=>{a.s(["H",0,"fleet","Q",0,{kind:"idle"}],30587);var b=a.i(87924);a.s(["f",0,function({state:a,testId:c}){switch(a.kind){case"idle":return null;case"done":return(0,b.jsx)("p",{role:"status","data-testid":c,className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a.message});case"refused":case"openNetwork":return(0,b.jsx)("p",{role:"alert","data-testid":c,className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a.message})}}],36855);var c=a.i(35112),d=a.i(88412);a.s(["f",0,function({children:a,pending:e,kind:f="primary",testId:g}){let h=(0,c.useFormStatus)();return(0,b.jsx)("button",{type:"submit",className:d.x[f],disabled:h.pending,"aria-busy":h.pending,"data-testid":g,children:h.pending?e:a})}],77237)},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])}]})();
2
+
3
+ //# sourceMappingURL=web_features_forms_1-88lvs4ivi73._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/submit-button.tsx","../../../../../web/features/forms/ui/look.ts"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL"],"mappings":"oEAyB2B,cAdI,CAAEC,KAAM,MAAO,sCCRvC,SAAS,AAAQ,OAAE,CAAK,QAAE,CAAM,CAAyC,EAC9E,OAAQ,EAAM,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,SAAS,cAAa,EAAQ,UAAU,2FAC7C,EAAM,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEG,KAAK,QAAQ,cAAa,EAAQ,UAAUC,gHAC5C,EAAM,OAAO,EAGtB,CACF,UClBA,IAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAAS,AAAa,UAAE,CAAQ,SAAE,CAAO,MAAE,EAAO,SAAS,QAAE,CAAM,CAAgF,EACxJ,IAAMJ,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,SAAS,UAAW,EAAA,CAAO,CAAC,EAAK,CAAEC,SAAU,EAAO,OAAOE,CAAE,YAAW,EAAO,OAAO,CAAE,cAAa,WAC/G,EAAO,OAAOC,CAAG,EAAU,GAGlC,qBCZA,IAAMS,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA"}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[30587,36855,77237,a=>{a.s(["H",0,"fleet","Q",0,{kind:"idle"}],30587);var b=a.i(87924);a.s(["f",0,function({state:a,testId:c}){switch(a.kind){case"idle":return null;case"done":return(0,b.jsx)("p",{role:"status","data-testid":c,className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a.message});case"refused":case"openNetwork":return(0,b.jsx)("p",{role:"alert","data-testid":c,className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a.message})}}],36855);var c=a.i(35112),d=a.i(88412);a.s(["f",0,function({children:a,pending:e,kind:f="primary",testId:g}){let h=(0,c.useFormStatus)();return(0,b.jsx)("button",{type:"submit",className:d.x[f],disabled:h.pending,"aria-busy":h.pending,"data-testid":g,children:h.pending?e:a})}],77237)},31614,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(36855),f=a.i(77237);a.s(["ActionForm",0,function({action:a,fleetId:g,children:h,submit:i,className:j="grid gap-3",testId:k}){let[l,m]=(0,c.useActionState)(a,d.Q);return(0,b.jsxs)("form",{action:m,className:j,"data-testid":k,children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),h,(0,b.jsx)("div",{children:(0,b.jsx)(f.f,{pending:i.pending,...void 0===i.kind?{}:{kind:i.kind},children:i.label})}),(0,b.jsx)(e.f,{state:l})]})}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])}]})();
2
+
3
+ //# sourceMappingURL=web_features_forms_15gausi3cpweg._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/submit-button.tsx","../../../../../web/features/forms/ui/action-form.tsx","../../../../../web/features/forms/ui/look.ts"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n","'use client';\n\nimport { useActionState, type ReactNode } from 'react';\n\nimport { FLEET_FIELD, IDLE, type FormState } from '../form-state';\nimport type { ButtonKind } from './look';\nimport { Outcome } from './outcome';\nimport { SubmitButton } from './submit-button';\n\n/** A page's form: its fields, the fleet it is for, its button, and how it ended. */\nexport function ActionForm({\n action,\n fleetId,\n children,\n submit,\n className = 'grid gap-3',\n testId,\n}: {\n action: (previous: FormState, form: FormData) => Promise<FormState>;\n fleetId: string;\n children?: ReactNode;\n submit: { label: ReactNode; pending: string; kind?: ButtonKind };\n className?: string;\n testId?: string;\n}) {\n const [state, formAction] = useActionState(action, IDLE);\n return (\n <form action={formAction} className={className} data-testid={testId}>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n {children}\n <div>\n <SubmitButton pending={submit.pending} {...(submit.kind === undefined ? {} : { kind: submit.kind })}>\n {submit.label}\n </SubmitButton>\n </div>\n <Outcome state={state} />\n </form>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","ActionForm","action","fleetId","children","submit","className","testId","state","formAction","type","pending","undefined","label","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL"],"mappings":"oEAyB2B,cAdI,CAAEC,KAAM,MAAO,sCCRvC,SAAS,AAAQ,OAAE,CAAK,QAAE,CAAM,CAAyC,EAC9E,OAAQ,EAAM,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,KAAK,SAAS,cAAa,EAAQ,UAAU,2FAC7C,EAAM,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEG,KAAK,QAAQ,cAAa,EAAQ,UAAUC,gHAC5C,EAAM,OAAO,EAGtB,CACF,UClBA,IAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAAS,AAAa,UAAE,CAAQ,SAAE,CAAO,MAAE,EAAO,SAAS,QAAE,CAAM,CAAgF,EACxJ,IAAMJ,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,SAAS,UAAW,EAAA,CAAO,CAAC,EAAK,CAAEC,SAAU,EAAO,OAAOE,CAAE,YAAW,EAAO,OAAO,CAAE,cAAa,WAC/G,EAAO,OAAOC,CAAG,EAAU,GAGlC,sCCbA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,2BAGO,SAASQ,AAAW,QACzBC,CAAM,CACNC,SAAO,UACPC,CAAQ,QACRC,CAAM,WACNC,EAAY,YAAY,QACxBC,CAAM,CAQP,EACC,GAAM,CAACC,EAAOC,EAAW,CAAG,CAAA,EAAA,EAAA,cAAA,AAAc,EAACP,EAAQ,EAAA,CAAI,EACvD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKA,OAAQO,EAAYH,UAAWA,EAAW,cAAaC,YAC3D,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMG,KAAK,SAASlB,KAAM,EAAA,CAAW,CAAEC,MAAOU,IAC9CC,EACD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAACO,QAASN,EAAOM,OAAO,CAAG,QAAoBC,IAAhBP,EAAOhB,IAAI,CAAiB,CAAC,EAAI,CAAEA,KAAMgB,EAAOhB,IAAI,AAAC,CAAC,UAC/FgB,EAAOQ,KAAK,KAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,CAAA,CAACL,MAAOA,MAGtB,eCnCA,IAAMO,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA"}
@@ -0,0 +1,3 @@
1
+ module.exports=[18434,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(88412),f=a.i(36855),g=a.i(77237),h=a.i(5050);let i=(0,h.createServerReference)("60e2bf017ba5b01825eeb12959d7f90016c723d9d6",h.callServer,void 0,h.findSourceMapURL,"switchOutsideParties"),j={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};function k({tone:a,label:c}){return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full border px-2 text-caption ${j[a]}`,children:c})}a.s(["SwitchCard",0,function({isOn:a,canSwitch:h,fleetId:j}){let[l,m]=(0,c.useActionState)(i,d.Q);return(0,b.jsxs)("section",{className:`${e.r} grid gap-3`,"data-testid":"outside-parties-switch",children:[(0,b.jsxs)("h2",{className:"flex items-center gap-2 text-section font-semibold",children:["Outside parties are ",a?"on":"off"," ",a?(0,b.jsx)(k,{tone:"ok",label:"On"}):(0,b.jsx)(k,{tone:"ended",label:"Off"})]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:a?"Approved outside MCP servers and clients reach the fleet, as its network rules allow.":"No outside MCP server or client reaches the fleet, and no request for one can be approved."}),"openNetwork"===l.kind?(0,b.jsxs)("form",{action:m,role:"alert",className:"grid gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg p-4 text-tone-attention-fg",children:[(0,b.jsx)("h3",{className:"font-semibold",children:"Open network"}),(0,b.jsx)("p",{children:l.message}),(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"isOn",value:"true"}),(0,b.jsx)("input",{type:"hidden",name:"isOpenNetworkConfirmed",value:"true"}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(g.f,{kind:"destructive",pending:"Turning on…",testId:"outside-parties-turn-on-anyway",children:"Turn on anyway"}),(0,b.jsx)("a",{className:e.x.secondary,href:"",children:"Keep off"})]})]}):h?(0,b.jsxs)("form",{action:m,children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:j}),(0,b.jsx)("input",{type:"hidden",name:"isOn",value:String(!a)}),(0,b.jsx)(g.f,{kind:a?"secondary":"primary",pending:a?"Turning off…":"Turning on…",testId:"outside-parties-turn",children:a?"Turn off":"Turn on"})]}):(0,b.jsxs)("p",{className:"text-muted-foreground",children:["Turning them on or off needs ","fleet:network","."]}),"openNetwork"===l.kind?null:(0,b.jsx)(f.f,{state:l})]})}],18434)}];
2
+
3
+ //# sourceMappingURL=web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/outside-parties/ui/switch-card.tsx","../../../../../web/features/outside-parties/data%3A059c57%20%3Ctext/javascript%3E","../../../../../web/features/outside-parties/ui/status-badge.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD, IDLE } from '../../forms/form-state';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { switchOutsideParties } from '../actions';\nimport { StatusBadge } from './status-badge';\n\n/** The scope that turns outside parties on or off (0056). */\nconst SWITCHING_SCOPE = 'fleet:network';\n\n/**\n * Whether the fleet's outside parties are on, and the switch for an account\n * holding fleet:network. An open network's warning asks to confirm, or to\n * keep them off.\n */\nexport function SwitchCard({ isOn, canSwitch, fleetId }: { isOn: boolean; canSwitch: boolean; fleetId: string }) {\n const [state, formAction] = useActionState(switchOutsideParties, IDLE);\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"outside-parties-switch\">\n <h2 className=\"flex items-center gap-2 text-section font-semibold\">\n Outside parties are {isOn ? 'on' : 'off'} {isOn ? <StatusBadge tone=\"ok\" label=\"On\" /> : <StatusBadge tone=\"ended\" label=\"Off\" />}\n </h2>\n <p className=\"text-muted-foreground\">\n {isOn ? 'Approved outside MCP servers and clients reach the fleet, as its network rules allow.' : 'No outside MCP server or client reaches the fleet, and no request for one can be approved.'}\n </p>\n {state.kind === 'openNetwork' ? (\n <form action={formAction} role=\"alert\" className=\"grid gap-3 rounded-md border border-tone-attention-border bg-tone-attention-bg p-4 text-tone-attention-fg\">\n <h3 className=\"font-semibold\">Open network</h3>\n <p>{state.message}</p>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"isOn\" value=\"true\" />\n <input type=\"hidden\" name=\"isOpenNetworkConfirmed\" value=\"true\" />\n <div className=\"flex gap-2\">\n <SubmitButton kind=\"destructive\" pending=\"Turning on…\" testId=\"outside-parties-turn-on-anyway\">\n Turn on anyway\n </SubmitButton>\n <a className={BUTTONS.secondary} href=\"\">\n Keep off\n </a>\n </div>\n </form>\n ) : canSwitch ? (\n <form action={formAction}>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"isOn\" value={String(!isOn)} />\n <SubmitButton kind={isOn ? 'secondary' : 'primary'} pending={isOn ? 'Turning off…' : 'Turning on…'} testId=\"outside-parties-turn\">\n {isOn ? 'Turn off' : 'Turn on'}\n </SubmitButton>\n </form>\n ) : (\n <p className=\"text-muted-foreground\">Turning them on or off needs {SWITCHING_SCOPE}.</p>\n )}\n {state.kind === 'openNetwork' ? null : <Outcome state={state} />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60e2bf017ba5b01825eeb12959d7f90016c723d9d6\":{\"name\":\"switchOutsideParties\"}},\"web/features/outside-parties/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60e2bf017ba5b01825eeb12959d7f90016c723d9d6\",callServer,void 0,findSourceMapURL,\"switchOutsideParties\");export{$$RSC_SERVER_ACTION_0 as switchOutsideParties};","import type { Tone } from '../party-kinds';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, as the console shows one. */\nexport function StatusBadge({ tone, label }: { tone: Tone; label: string }) {\n return <span className={`inline-flex items-center rounded-full border px-2 text-caption ${TONES[tone]}`}>{label}</span>;\n}\n\n/** A plain tag: a protocol, a side, an id. */\nexport function Tag({ children, isMono = false }: { children: React.ReactNode; isMono?: boolean }) {\n return <span className={`inline-flex items-center rounded-md border border-border px-2 text-caption ${isMono ? 'font-mono' : ''}`}>{children}</span>;\n}\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ module.exports=[94705,18379,a=>{"use strict";var b=a.i(37936);a.i(70396);var c=a.i(73727),d=a.i(55476),e=a.i(66283),f=a.i(1324),g=a.i(72913),h=a.i(29517);let i=["messages:send","messages:receive"],j="scope:",k="scopesShown";function l(a,b){let c,{form:d,scopes:e}=b,f=d.ownerShipId?.trim();if(void 0!==f&&f!==a.ownerShipId){let a=(0,h.f)("ship").safeParse(f);if(!a.success)return{kind:"refused",message:"The owner's ship id is not a ship id (shp_...)"};c=a.data}let g=void 0===c?{}:{ownerShipId:c},l=a.scopes;if("true"!==d[k]||null===l)return{kind:"changes",...g,grant:[],revoke:[]};let m=e.filter(a=>!i.includes(a)),n=a=>void 0!==d[`${j}${a}`];return{kind:"changes",...g,grant:m.filter(a=>n(a)&&!l.includes(a)),revoke:m.filter(a=>!n(a)&&l.includes(a))}}a.s(["_",0,i,"e",0,k,"u",0,j,"t",0,l],18379);var m=a.i(13095);let n="name";async function o(a,b){let h=(0,f.v)(b,f.H),i=(0,f.v)(b,n),j=await (0,e.z)(h);try{let[a,c]=await Promise.all([j.parties.get.query({name:i}),j.account.inView.query()]),d=l(a,{form:(0,f.O)(b),scopes:"signedIn"===c.kind?c.scopes:[]});if("refused"===d.kind)return d;void 0!==d.ownerShipId&&await j.parties.changeOwner.mutate({name:i,ownerShipId:d.ownerShipId}),(d.grant.length>0||d.revoke.length>0)&&await j.parties.changeScopes.mutate({name:i,grant:d.grant,revoke:d.revoke})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)((0,g.N)(i),h))}async function p(a,b){let h=(0,f.v)(b,f.H),i=await (0,e.z)(h);try{await i.parties.retire.mutate({name:(0,f.v)(b,n)})}catch(a){return{kind:"refused",message:(0,e.s)(a)}}(0,c.redirect)((0,d.i)(g.$,h))}(0,m.ensureServerEntryExports)([o,p]),(0,b.registerServerReference)(o,"6046d5e9e1e94ede16ad194a0f9b2c9baaec61bfaf",null),(0,b.registerServerReference)(p,"609e7c96642e3eb30f66cef9ae595c9bf168d0880d",null),a.s(["v",0,o,"t",0,p],94705)}];
2
+
3
+ //# sourceMappingURL=web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map