@aeolus-fleet/gateway 0.33.0 → 0.34.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 (637) hide show
  1. package/README.md +12 -2
  2. package/dist/adapters/crypto/party-sign-in-seals.d.ts +3 -0
  3. package/dist/adapters/crypto/party-sign-in-seals.js +15 -0
  4. package/dist/adapters/crypto/party-sign-in-seals.js.map +1 -0
  5. package/dist/adapters/fleet/rest-fleet-door.js +2 -2
  6. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  7. package/dist/adapters/fleet/ship-names.d.ts +7 -0
  8. package/dist/adapters/fleet/ship-names.js +25 -0
  9. package/dist/adapters/fleet/ship-names.js.map +1 -0
  10. package/dist/adapters/http/party-sign-in-routes.d.ts +25 -0
  11. package/dist/adapters/http/party-sign-in-routes.js +45 -0
  12. package/dist/adapters/http/party-sign-in-routes.js.map +1 -0
  13. package/dist/adapters/http/slack-routes.d.ts +0 -13
  14. package/dist/adapters/http/slack-routes.js +19 -4
  15. package/dist/adapters/http/slack-routes.js.map +1 -1
  16. package/dist/adapters/mcp/mcp-servers.js +22 -4
  17. package/dist/adapters/mcp/mcp-servers.js.map +1 -1
  18. package/dist/adapters/oauth/authorization-servers.d.ts +2 -0
  19. package/dist/adapters/oauth/authorization-servers.js +127 -0
  20. package/dist/adapters/oauth/authorization-servers.js.map +1 -0
  21. package/dist/adapters/oauth/party-sign-ins.d.ts +2 -0
  22. package/dist/adapters/oauth/party-sign-ins.js +152 -0
  23. package/dist/adapters/oauth/party-sign-ins.js.map +1 -0
  24. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  25. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  26. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  27. package/dist/adapters/prisma/generated/browser.d.ts +10 -0
  28. package/dist/adapters/prisma/generated/client.d.ts +10 -0
  29. package/dist/adapters/prisma/generated/internal/class.d.ts +22 -0
  30. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  31. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  32. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +178 -1
  33. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +26 -1
  34. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  35. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +27 -0
  36. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +26 -1
  37. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  38. package/dist/adapters/prisma/generated/models/PartyGrant.d.ts +1276 -0
  39. package/dist/adapters/prisma/generated/models/PartyGrant.js +2 -0
  40. package/dist/adapters/prisma/generated/models/PartyGrant.js.map +1 -0
  41. package/dist/adapters/prisma/generated/models/PartySignInNotice.d.ts +1003 -0
  42. package/dist/adapters/prisma/generated/models/PartySignInNotice.js +2 -0
  43. package/dist/adapters/prisma/generated/models/PartySignInNotice.js.map +1 -0
  44. package/dist/adapters/prisma/generated/models/SlackEvent.d.ts +17 -14
  45. package/dist/adapters/prisma/generated/models.d.ts +2 -0
  46. package/dist/adapters/prisma/party-grants.d.ts +10 -0
  47. package/dist/adapters/prisma/party-grants.js +118 -0
  48. package/dist/adapters/prisma/party-grants.js.map +1 -0
  49. package/dist/adapters/prisma/party-store.js +21 -2
  50. package/dist/adapters/prisma/party-store.js.map +1 -1
  51. package/dist/adapters/prisma/sign-in-notices.d.ts +8 -0
  52. package/dist/adapters/prisma/sign-in-notices.js +22 -0
  53. package/dist/adapters/prisma/sign-in-notices.js.map +1 -0
  54. package/dist/adapters/prisma/slack-events.js +1 -1
  55. package/dist/adapters/prisma/slack-events.js.map +1 -1
  56. package/dist/adapters/prisma/slack-posts.js +0 -4
  57. package/dist/adapters/prisma/slack-posts.js.map +1 -1
  58. package/dist/adapters/slack/slack-messages.js +2 -2
  59. package/dist/adapters/slack/slack-messages.js.map +1 -1
  60. package/dist/adapters/trpc/router.d.ts +138 -10
  61. package/dist/adapters/trpc/router.js +147 -6
  62. package/dist/adapters/trpc/router.js.map +1 -1
  63. package/dist/app.d.ts +2 -0
  64. package/dist/app.js +82 -6
  65. package/dist/app.js.map +1 -1
  66. package/dist/core/connection/ports.d.ts +5 -0
  67. package/dist/core/mcp-out/grant-calls.d.ts +69 -0
  68. package/dist/core/mcp-out/grant-calls.js +98 -0
  69. package/dist/core/mcp-out/grant-calls.js.map +1 -0
  70. package/dist/core/mcp-out/hand-call.d.ts +6 -1
  71. package/dist/core/mcp-out/hand-call.js +23 -2
  72. package/dist/core/mcp-out/hand-call.js.map +1 -1
  73. package/dist/core/mcp-out/ports.d.ts +6 -2
  74. package/dist/core/mcp-out/state-party.d.ts +5 -2
  75. package/dist/core/mcp-out/state-party.js +7 -2
  76. package/dist/core/mcp-out/state-party.js.map +1 -1
  77. package/dist/core/parties/add-sign-in-server.d.ts +25 -0
  78. package/dist/core/parties/add-sign-in-server.js +70 -0
  79. package/dist/core/parties/add-sign-in-server.js.map +1 -0
  80. package/dist/core/parties/approve-party.d.ts +2 -2
  81. package/dist/core/parties/check-approving.d.ts +3 -3
  82. package/dist/core/parties/check-approving.js +2 -2
  83. package/dist/core/parties/check-approving.js.map +1 -1
  84. package/dist/core/parties/party.d.ts +3 -2
  85. package/dist/core/parties/party.js +4 -1
  86. package/dist/core/parties/party.js.map +1 -1
  87. package/dist/core/parties/ports.d.ts +49 -0
  88. package/dist/core/parties/read-party-tools.d.ts +5 -2
  89. package/dist/core/parties/read-party-tools.js +7 -2
  90. package/dist/core/parties/read-party-tools.js.map +1 -1
  91. package/dist/core/parties/retire-party.d.ts +5 -1
  92. package/dist/core/parties/retire-party.js +6 -1
  93. package/dist/core/parties/retire-party.js.map +1 -1
  94. package/dist/core/parties/shown-party.d.ts +2 -2
  95. package/dist/core/parties/sign-in-servers.d.ts +4 -0
  96. package/dist/core/parties/sign-in-servers.js +13 -0
  97. package/dist/core/parties/sign-in-servers.js.map +1 -0
  98. package/dist/core/parties/switch-tools.d.ts +3 -1
  99. package/dist/core/parties/switch-tools.js +5 -1
  100. package/dist/core/parties/switch-tools.js.map +1 -1
  101. package/dist/core/party-grants/approved-sign-in-party.d.ts +17 -0
  102. package/dist/core/party-grants/approved-sign-in-party.js +21 -0
  103. package/dist/core/party-grants/approved-sign-in-party.js.map +1 -0
  104. package/dist/core/party-grants/call-grant.d.ts +46 -0
  105. package/dist/core/party-grants/call-grant.js +30 -0
  106. package/dist/core/party-grants/call-grant.js.map +1 -0
  107. package/dist/core/party-grants/complete-party-sign-in.d.ts +52 -0
  108. package/dist/core/party-grants/complete-party-sign-in.js +95 -0
  109. package/dist/core/party-grants/complete-party-sign-in.js.map +1 -0
  110. package/dist/core/party-grants/end-account-grants.d.ts +18 -0
  111. package/dist/core/party-grants/end-account-grants.js +16 -0
  112. package/dist/core/party-grants/end-account-grants.js.map +1 -0
  113. package/dist/core/party-grants/end-grant.d.ts +23 -0
  114. package/dist/core/party-grants/end-grant.js +33 -0
  115. package/dist/core/party-grants/end-grant.js.map +1 -0
  116. package/dist/core/party-grants/end-party-grants.d.ts +19 -0
  117. package/dist/core/party-grants/end-party-grants.js +31 -0
  118. package/dist/core/party-grants/end-party-grants.js.map +1 -0
  119. package/dist/core/party-grants/end-retired-persons-grants.d.ts +19 -0
  120. package/dist/core/party-grants/end-retired-persons-grants.js +30 -0
  121. package/dist/core/party-grants/end-retired-persons-grants.js.map +1 -0
  122. package/dist/core/party-grants/keep-grants-alive.d.ts +18 -0
  123. package/dist/core/party-grants/keep-grants-alive.js +19 -0
  124. package/dist/core/party-grants/keep-grants-alive.js.map +1 -0
  125. package/dist/core/party-grants/list-grants.d.ts +30 -0
  126. package/dist/core/party-grants/list-grants.js +34 -0
  127. package/dist/core/party-grants/list-grants.js.map +1 -0
  128. package/dist/core/party-grants/listing-connection.d.ts +29 -0
  129. package/dist/core/party-grants/listing-connection.js +17 -0
  130. package/dist/core/party-grants/listing-connection.js.map +1 -0
  131. package/dist/core/party-grants/party-grant.d.ts +50 -0
  132. package/dist/core/party-grants/party-grant.js +26 -0
  133. package/dist/core/party-grants/party-grant.js.map +1 -0
  134. package/dist/core/party-grants/ports.d.ts +180 -0
  135. package/dist/core/party-grants/ports.js +2 -0
  136. package/dist/core/party-grants/ports.js.map +1 -0
  137. package/dist/core/party-grants/read-own-grant.d.ts +33 -0
  138. package/dist/core/party-grants/read-own-grant.js +23 -0
  139. package/dist/core/party-grants/read-own-grant.js.map +1 -0
  140. package/dist/core/party-grants/refresh-grant.d.ts +41 -0
  141. package/dist/core/party-grants/refresh-grant.js +58 -0
  142. package/dist/core/party-grants/refresh-grant.js.map +1 -0
  143. package/dist/core/party-grants/remove-grant.d.ts +21 -0
  144. package/dist/core/party-grants/remove-grant.js +25 -0
  145. package/dist/core/party-grants/remove-grant.js.map +1 -0
  146. package/dist/core/party-grants/remove-own-grant.d.ts +17 -0
  147. package/dist/core/party-grants/remove-own-grant.js +21 -0
  148. package/dist/core/party-grants/remove-own-grant.js.map +1 -0
  149. package/dist/core/party-grants/sign-in-party.d.ts +23 -0
  150. package/dist/core/party-grants/sign-in-party.js +22 -0
  151. package/dist/core/party-grants/sign-in-party.js.map +1 -0
  152. package/dist/core/party-grants/start-party-sign-in.d.ts +31 -0
  153. package/dist/core/party-grants/start-party-sign-in.js +31 -0
  154. package/dist/core/party-grants/start-party-sign-in.js.map +1 -0
  155. package/dist/core/party-grants/tell-sign-in-needed.d.ts +29 -0
  156. package/dist/core/party-grants/tell-sign-in-needed.js +27 -0
  157. package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -0
  158. package/dist/core/shared/errors.d.ts +1 -1
  159. package/dist/core/shared/errors.js.map +1 -1
  160. package/dist/core/slack/answer-in-slack.d.ts +8 -3
  161. package/dist/core/slack/answer-in-slack.js +11 -3
  162. package/dist/core/slack/answer-in-slack.js.map +1 -1
  163. package/dist/core/slack/kept-slack-event.d.ts +5 -3
  164. package/dist/core/slack/kept-slack-event.js.map +1 -1
  165. package/dist/core/slack/ports.d.ts +7 -8
  166. package/dist/core/slack/send-slack-events.d.ts +6 -3
  167. package/dist/core/slack/send-slack-events.js +32 -4
  168. package/dist/core/slack/send-slack-events.js.map +1 -1
  169. package/dist/core/slack/show-in-slack.js +2 -2
  170. package/dist/core/slack/show-in-slack.js.map +1 -1
  171. package/dist/core/slack/slack-post.d.ts +9 -0
  172. package/dist/core/slack/slack-post.js +8 -0
  173. package/dist/core/slack/slack-post.js.map +1 -1
  174. package/dist/core/slack/take-slack-event.d.ts +4 -2
  175. package/dist/core/slack/take-slack-event.js +8 -2
  176. package/dist/core/slack/take-slack-event.js.map +1 -1
  177. package/dist/core/vault/credential.d.ts +34 -0
  178. package/dist/grant-worker.d.ts +20 -0
  179. package/dist/grant-worker.js +24 -0
  180. package/dist/grant-worker.js.map +1 -0
  181. package/package.json +1 -1
  182. package/src/adapters/prisma/migrations/20261028230000_party_grants/migration.sql +18 -0
  183. package/src/adapters/prisma/migrations/20261029080000_party_sign_in_notices/migration.sql +10 -0
  184. package/src/adapters/prisma/migrations/20261029120000_party_grants_lost/migration.sql +3 -0
  185. package/src/adapters/prisma/migrations/20261029130000_party_grants_refreshed/migration.sql +6 -0
  186. package/src/adapters/prisma/migrations/20261030090000_party_grants_of_account/migration.sql +2 -0
  187. package/src/adapters/prisma/migrations/20261030100000_slack_events_unmatched_answers/migration.sql +2 -0
  188. package/src/adapters/prisma/schema.prisma +46 -1
  189. package/web/.next/BUILD_ID +1 -1
  190. package/web/.next/app-path-routes-manifest.json +3 -1
  191. package/web/.next/build-manifest.json +3 -3
  192. package/web/.next/diagnostics/route-bundle-stats.json +55 -55
  193. package/web/.next/fallback-build-manifest.json +3 -3
  194. package/web/.next/prerender-manifest.json +67 -3
  195. package/web/.next/routes-manifest.json +12 -0
  196. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  197. package/web/.next/server/app/(console)/gateway-off/page.js +6 -6
  198. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  199. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  200. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  201. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +6 -6
  202. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  203. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  204. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +49 -9
  205. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +6 -6
  206. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  207. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  208. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +44 -4
  209. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +7 -7
  210. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  211. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  212. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +49 -9
  213. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +6 -6
  214. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  215. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  216. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +46 -6
  217. package/web/.next/server/app/(console)/outside-parties/add/page.js +8 -7
  218. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  219. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  220. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  221. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +7 -7
  222. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  223. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  224. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  225. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +6 -6
  226. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  227. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  228. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  229. package/web/.next/server/app/(console)/outside-parties/page.js +6 -6
  230. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  231. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  232. package/web/.next/server/app/(console)/overview/changes/route.js +2 -1
  233. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  234. package/web/.next/server/app/(console)/overview/focus/route.js +2 -1
  235. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
  236. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +9 -9
  237. package/web/.next/server/app/(console)/overview/page.js +6 -6
  238. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  239. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  240. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  241. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +5 -5
  242. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  243. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  244. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  245. package/web/.next/server/app/(console)/parties/page.js +6 -6
  246. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  247. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  248. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  249. package/web/.next/server/app/(console)/sign-in/failed/page.js +6 -6
  250. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  251. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  252. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +11 -11
  253. package/web/.next/server/app/(console)/slack/disconnect/page.js +5 -5
  254. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
  255. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
  256. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +11 -11
  257. package/web/.next/server/app/(console)/slack/expose/page.js +5 -5
  258. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
  259. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
  260. package/web/.next/server/app/(console)/slack/link/route.js +2 -1
  261. package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -1
  262. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +11 -11
  263. package/web/.next/server/app/(console)/slack/page.js +5 -5
  264. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
  265. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
  266. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +11 -11
  267. package/web/.next/server/app/(console)/slack/remove/page.js +5 -5
  268. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
  269. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
  270. package/web/.next/server/app/_global-error.html +1 -1
  271. package/web/.next/server/app/_global-error.rsc +1 -1
  272. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  273. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  274. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  275. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  276. package/web/.next/server/app/_not-found/page.js +6 -6
  277. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  278. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  279. package/web/.next/server/app/apple-icon.png/route/app-paths-manifest.json +3 -0
  280. package/web/.next/server/app/apple-icon.png/route/build-manifest.json +12 -0
  281. package/web/.next/server/app/apple-icon.png/route.js +8 -0
  282. package/web/.next/server/app/apple-icon.png/route.js.map +5 -0
  283. package/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
  284. package/web/.next/server/app/apple-icon.png.body +0 -0
  285. package/web/.next/server/app/apple-icon.png.meta +1 -0
  286. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  287. package/web/.next/server/app/authorize/failed/page.js +5 -5
  288. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  289. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  290. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  291. package/web/.next/server/app/authorize/pick/page.js +4 -4
  292. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  293. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  294. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  295. package/web/.next/server/app/authorize/waiting/approval/page.js +6 -6
  296. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  297. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  298. package/web/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
  299. package/web/.next/server/app/icon.svg/route/build-manifest.json +12 -0
  300. package/web/.next/server/app/icon.svg/route.js +8 -0
  301. package/web/.next/server/app/icon.svg/route.js.map +5 -0
  302. package/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
  303. package/web/.next/server/app/icon.svg.body +19 -0
  304. package/web/.next/server/app/icon.svg.meta +1 -0
  305. package/web/.next/server/app-paths-manifest.json +3 -1
  306. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js +315 -0
  307. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js.map +1 -0
  308. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js +315 -0
  309. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js.map +1 -0
  310. package/web/.next/server/chunks/_0_um96p6psnqx._.js +57 -0
  311. package/web/.next/server/chunks/_0_um96p6psnqx._.js.map +1 -0
  312. package/web/.next/server/chunks/_0xw0b7avhvg75._.js +3 -0
  313. package/web/.next/server/chunks/_0xw0b7avhvg75._.js.map +1 -0
  314. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +3 -0
  315. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js.map +1 -0
  316. package/web/.next/server/chunks/_1xf83h9norhws._.js +57 -0
  317. package/web/.next/server/chunks/_1xf83h9norhws._.js.map +1 -0
  318. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js +10 -0
  319. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js.map +1 -0
  320. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  321. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  322. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  323. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  324. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  325. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  326. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  327. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  328. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  329. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  330. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  331. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  332. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +1 -1
  333. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -1
  334. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js +3 -0
  335. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js.map +1 -0
  336. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js +3 -0
  337. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js.map +1 -0
  338. package/web/.next/server/chunks/ssr/{[root-of-the-server]__14w0fxvc_of17._.js → [root-of-the-server]__07ba2bfe20c_p._.js} +2 -2
  339. package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js.map +1 -0
  340. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +4 -0
  341. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js.map +1 -0
  342. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js +1 -1
  343. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js.map +1 -1
  344. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js +3 -0
  345. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js.map +1 -0
  346. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js +3 -0
  347. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js.map +1 -0
  348. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js +3 -0
  349. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +1 -1
  351. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +1 -1
  352. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  353. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  354. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js +3 -0
  355. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js +3 -0
  357. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js.map +1 -0
  358. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +1 -1
  359. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -1
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +1 -1
  361. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -1
  362. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  363. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  364. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js +3 -0
  365. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js.map +1 -0
  366. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1w5swo8gmjyx6._.js → [root-of-the-server]__1kynqd8xcwg2b._.js} +2 -2
  367. package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js.map +1 -0
  368. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +3 -0
  369. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +1 -0
  370. package/web/.next/server/chunks/ssr/{[root-of-the-server]__160zc0ja_jjnu._.js → [root-of-the-server]__1q14l5_4hp9h3._.js} +2 -2
  371. package/web/.next/server/chunks/ssr/[root-of-the-server]__1q14l5_4hp9h3._.js.map +1 -0
  372. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js +3 -0
  373. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js.map +1 -0
  374. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +1 -1
  375. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -1
  376. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js +3 -0
  377. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js.map +1 -0
  378. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js +3 -0
  379. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js.map +1 -0
  380. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js +3 -0
  381. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js.map +1 -0
  382. package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js +3 -0
  383. package/web/.next/server/chunks/ssr/{_0wukvn3-ht3ps._.js.map → _0-boiqan2j4tr._.js.map} +1 -1
  384. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  385. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  386. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +1 -1
  387. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
  388. package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js +3 -0
  389. package/web/.next/server/chunks/ssr/{_00dg5cvqofspn._.js.map → _0bizyb21i2sl8._.js.map} +1 -1
  390. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js +3 -0
  391. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js.map +1 -0
  392. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  393. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  394. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  395. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  396. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  397. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  398. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  399. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js +3 -0
  400. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js.map +1 -0
  401. package/web/.next/server/chunks/ssr/_1e2o809f0ekry._.js +1 -1
  402. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  403. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  404. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  405. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  406. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js +3 -0
  407. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js.map +1 -0
  408. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js +3 -0
  409. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js.map +1 -0
  410. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js +3 -0
  411. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js.map +1 -0
  412. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js +3 -0
  413. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js.map +1 -0
  414. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js +3 -0
  415. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js.map +1 -0
  416. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js +3 -0
  417. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js.map +1 -0
  418. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js +3 -0
  419. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js.map +1 -0
  420. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js +3 -0
  421. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js.map +1 -0
  422. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js +3 -0
  423. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js.map +1 -0
  424. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js +3 -0
  425. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js.map +1 -0
  426. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js +3 -0
  427. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js.map +1 -0
  428. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js +3 -0
  429. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js.map +1 -0
  430. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js +3 -0
  431. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js.map +1 -0
  432. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js +3 -0
  433. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js.map +1 -0
  434. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js +3 -0
  435. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js.map +1 -0
  436. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js +3 -0
  437. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js.map +1 -0
  438. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js +3 -0
  439. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js.map +1 -0
  440. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js +3 -0
  441. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js.map +1 -0
  442. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js +3 -0
  443. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js.map +1 -0
  444. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js +3 -0
  445. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js.map +1 -0
  446. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js +3 -0
  447. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js.map +1 -0
  448. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js +3 -0
  449. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js.map +1 -0
  450. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  451. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  452. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  453. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  454. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js +3 -0
  455. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js.map +1 -0
  456. package/web/.next/server/chunks/ssr/web_features_08yw0utky5j17._.js +3 -0
  457. package/web/.next/server/chunks/ssr/{web_features_19v3mlx8c_h1-._.js.map → web_features_08yw0utky5j17._.js.map} +1 -1
  458. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js +3 -0
  459. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js.map +1 -0
  460. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js +3 -0
  461. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js.map +1 -0
  462. package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js +3 -0
  463. package/web/.next/server/chunks/ssr/{web_features_1rwkgka1xffb1._.js.map → web_features_0mi9a9pdzkdji._.js.map} +1 -1
  464. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js +1 -1
  465. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js.map +1 -1
  466. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js +3 -0
  467. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js.map +1 -0
  468. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js +3 -0
  469. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js.map +1 -0
  470. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  471. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  472. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  473. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  474. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  475. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  476. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js → web_features_forms_1muc8tmsxjj_k._.js} +2 -2
  477. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js.map → web_features_forms_1muc8tmsxjj_k._.js.map} +1 -1
  478. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +1 -1
  479. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -1
  480. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  481. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  482. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  483. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  484. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  485. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  486. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js +3 -0
  487. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js.map +1 -0
  488. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  489. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  490. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js +3 -0
  491. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js.map +1 -0
  492. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  493. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js +1 -1
  494. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +1 -1
  495. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  496. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  497. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  498. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
  499. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js +3 -0
  500. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js.map +1 -0
  501. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js +3 -0
  502. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js.map +1 -0
  503. package/web/.next/server/middleware-build-manifest.js +3 -3
  504. package/web/.next/server/pages/500.html +1 -1
  505. package/web/.next/server/preview-props.json +3 -3
  506. package/web/.next/server/server-reference-manifest.js +1 -1
  507. package/web/.next/server/server-reference-manifest.json +130 -42
  508. package/web/.next/static/chunks/015ume9uk4hla.js +1 -0
  509. package/web/.next/static/chunks/{3d_sjtxh_vkr6.js → 07j7jnfe13wx6.js} +1 -1
  510. package/web/.next/static/chunks/0ji7rkz0ll9gh.js +1 -0
  511. package/web/.next/static/chunks/{3dhy3jady0w6a.js → 0p_kl57bddsiy.js} +1 -1
  512. package/web/.next/static/chunks/{3efghx8whwnok.js → 0psup8zn8e6k5.js} +1 -1
  513. package/web/.next/static/chunks/0vlawcs6_kjs1.js +1 -0
  514. package/web/.next/static/chunks/1s8b8jpg4jai9.js +1 -0
  515. package/web/.next/static/chunks/20t1nmdiq805b.js +1 -0
  516. package/web/.next/static/chunks/26vlpatu47xtw.css +3 -0
  517. package/web/.next/static/chunks/2gghdkr64z9f9.js +1 -0
  518. package/web/.next/static/chunks/{3rbzp0tdc1te-.js → 2s_dov6h7kus5.js} +1 -1
  519. package/web/.next/static/chunks/{1jvae6c-4jwji.js → 2x86i673xcv4t.js} +1 -1
  520. package/web/.next/static/chunks/{1msggkwsn7vyq.js → 31-hltzmw_9fi.js} +1 -1
  521. package/web/.next/static/chunks/35bmc8wm29tr6.js +1 -0
  522. package/web/.next/static/chunks/3rxg2mdhxd6yt.js +1 -0
  523. package/web/.next/static/chunks/42cpzi5s1o44m.js +1 -0
  524. package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
  525. package/web/.next/static/media/icon.0h5hy2etdmq_n.svg +19 -0
  526. package/web/.next/trace +1 -1
  527. package/web/.next/trace-build +1 -1
  528. package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js +0 -369
  529. package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js.map +0 -1
  530. package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js +0 -369
  531. package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js.map +0 -1
  532. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +0 -3
  533. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +0 -1
  534. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +0 -3
  535. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +0 -1
  536. package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js +0 -3
  537. package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js.map +0 -1
  538. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +0 -3
  539. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js.map +0 -1
  540. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js +0 -3
  541. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js.map +0 -1
  542. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e59elwbtqr-6._.js +0 -3
  543. package/web/.next/server/chunks/ssr/[root-of-the-server]__0e59elwbtqr-6._.js.map +0 -1
  544. package/web/.next/server/chunks/ssr/[root-of-the-server]__0kb1gl5t8kz4l._.js +0 -4
  545. package/web/.next/server/chunks/ssr/[root-of-the-server]__0kb1gl5t8kz4l._.js.map +0 -1
  546. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +0 -3
  547. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js.map +0 -1
  548. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +0 -4
  549. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +0 -1
  550. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +0 -3
  551. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js.map +0 -1
  552. package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js.map +0 -1
  553. package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js.map +0 -1
  554. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js +0 -3
  555. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +0 -1
  556. package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js +0 -3
  557. package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js.map +0 -1
  558. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +0 -3
  559. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +0 -1
  560. package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js.map +0 -1
  561. package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +0 -3
  562. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +0 -3
  563. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +0 -1
  564. package/web/.next/server/chunks/ssr/_0wukvn3-ht3ps._.js +0 -3
  565. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js +0 -3
  566. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +0 -1
  567. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +0 -3
  568. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +0 -1
  569. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js +0 -3
  570. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js.map +0 -1
  571. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +0 -3
  572. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +0 -1
  573. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js +0 -3
  574. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js.map +0 -1
  575. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +0 -3
  576. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +0 -1
  577. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +0 -3
  578. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +0 -1
  579. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js +0 -3
  580. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js.map +0 -1
  581. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js +0 -3
  582. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js.map +0 -1
  583. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js +0 -3
  584. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js.map +0 -1
  585. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js +0 -3
  586. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js.map +0 -1
  587. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js +0 -3
  588. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js.map +0 -1
  589. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js +0 -3
  590. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js.map +0 -1
  591. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js +0 -3
  592. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js.map +0 -1
  593. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +0 -3
  594. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +0 -1
  595. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js +0 -3
  596. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js.map +0 -1
  597. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js +0 -3
  598. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js.map +0 -1
  599. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js +0 -3
  600. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js.map +0 -1
  601. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +0 -3
  602. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +0 -1
  603. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +0 -3
  604. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +0 -1
  605. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js +0 -3
  606. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js.map +0 -1
  607. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js +0 -3
  608. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js.map +0 -1
  609. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +0 -3
  610. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +0 -1
  611. package/web/.next/server/chunks/ssr/web_15vnjj3s0z3fa._.js +0 -3
  612. package/web/.next/server/chunks/ssr/web_15vnjj3s0z3fa._.js.map +0 -1
  613. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js +0 -3
  614. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js.map +0 -1
  615. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +0 -3
  616. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +0 -1
  617. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +0 -3
  618. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +0 -3
  619. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +0 -1
  620. package/web/.next/server/chunks/ssr/web_features_1rwkgka1xffb1._.js +0 -3
  621. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js +0 -3
  622. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +0 -1
  623. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js +0 -3
  624. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +0 -1
  625. package/web/.next/static/chunks/1-suv9wttlxqo.js +0 -1
  626. package/web/.next/static/chunks/19kfx4qlur25a.js +0 -1
  627. package/web/.next/static/chunks/1a2-hkn-7471k.js +0 -1
  628. package/web/.next/static/chunks/1yj875esaesyh.css +0 -3
  629. package/web/.next/static/chunks/2-kh9nbonee6w.js +0 -1
  630. package/web/.next/static/chunks/2l92bozm8dcmo.js +0 -1
  631. package/web/.next/static/chunks/2riya89_i0je8.js +0 -1
  632. package/web/.next/static/chunks/310mio1zd_mw7.js +0 -1
  633. package/web/.next/static/chunks/3_pwm8b3mf4mf.js +0 -1
  634. package/web/.next/static/chunks/455eobei0t6t9.js +0 -1
  635. /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_buildManifest.js +0 -0
  636. /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_clientMiddlewareManifest.js +0 -0
  637. /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_ssgManifest.js +0 -0
@@ -0,0 +1,50 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ /** The outside account a grant names, as the outside service's OpenID Connect ID token stated it; none of it where the server gave no ID token. */
3
+ export interface OutsideAccount {
4
+ /** The `sub` the outside issuer named the account by: no two persons' grants of a party name the same one (Q13). */
5
+ readonly subject: string | null;
6
+ /** The account as a person reads it, its email or name, when the ID token named one. */
7
+ readonly name: string | null;
8
+ }
9
+ /** A grant the authorization server would no longer refresh (Q5): when, and why as the server said it. */
10
+ export interface GrantLost {
11
+ readonly at: Date;
12
+ readonly why: string;
13
+ }
14
+ /**
15
+ * One person's sign-in to one party (decision 0067): the outside account it
16
+ * names and its access and refresh tokens, kept by the gateway alone, under
17
+ * the party's client. A person holds one grant per party; a new sign-in
18
+ * replaces it.
19
+ */
20
+ export interface PartyGrant {
21
+ readonly fleetId: FleetId;
22
+ readonly party: string;
23
+ /** The person: their person ship, which owns itself, and the ships it owns call under this grant. */
24
+ readonly personShipId: ShipId;
25
+ readonly accountId: string;
26
+ readonly outsideAccount: OutsideAccount;
27
+ readonly accessToken: string;
28
+ /** None when the authorization server issued none: the grant then ends with its access token. */
29
+ readonly refreshToken: string | null;
30
+ /** None when the authorization server did not say when the access token ends. */
31
+ readonly accessTokenEndsAt: Date | null;
32
+ readonly signedInAt: Date;
33
+ /** When it was last refreshed; none until its first refresh. */
34
+ readonly refreshedAt: Date | null;
35
+ readonly lastUsedAt: Date | null;
36
+ /** None while the grant holds; a lost grant serves no call until the person signs in again in its place. */
37
+ readonly lost: GrantLost | null;
38
+ }
39
+ /** Whether the grant's access token may still be sent: the grant not lost, and the token's end not reached, or never stated. */
40
+ export declare function isUsable(grant: PartyGrant, now: Date): boolean;
41
+ /** How long before its access token ends a grant is refreshed ahead (Q7): longer than the schedule's round, so the schedule finds it first. */
42
+ export declare const REFRESH_AHEAD_MS: number;
43
+ /** Whether the grant's access token ends within the time a grant is refreshed ahead of, or has ended. */
44
+ export declare function isNearItsEnd(grant: PartyGrant, now: Date): boolean;
45
+ /** How long a grant goes unrefreshed before the schedule refreshes it while idle (Q7, L20): its refresh token used often enough that no idle policy ends it. */
46
+ export declare const IDLE_REFRESH_MS: number;
47
+ /** Whether the schedule refreshes the grant now (Q7): not lost, holding a refresh token, and near its access token's end or unrefreshed since its sign-in or last refresh for longer than the idle time. */
48
+ export declare function isDueForRefresh(grant: PartyGrant, now: Date): boolean;
49
+ /** When an access token issued now ends, from the seconds the authorization server said it lasts; none where it said nothing. */
50
+ export declare function accessTokenEndsAtOf(now: Date, expiresInSeconds: number | null): Date | null;
@@ -0,0 +1,26 @@
1
+ /** Whether the grant's access token may still be sent: the grant not lost, and the token's end not reached, or never stated. */
2
+ export function isUsable(grant, now) {
3
+ return grant.lost === null && (grant.accessTokenEndsAt === null || grant.accessTokenEndsAt.getTime() > now.getTime());
4
+ }
5
+ /** How long before its access token ends a grant is refreshed ahead (Q7): longer than the schedule's round, so the schedule finds it first. */
6
+ export const REFRESH_AHEAD_MS = 10 * 60 * 1000;
7
+ /** Whether the grant's access token ends within the time a grant is refreshed ahead of, or has ended. */
8
+ export function isNearItsEnd(grant, now) {
9
+ return grant.accessTokenEndsAt !== null && grant.accessTokenEndsAt.getTime() - now.getTime() <= REFRESH_AHEAD_MS;
10
+ }
11
+ /** How long a grant goes unrefreshed before the schedule refreshes it while idle (Q7, L20): its refresh token used often enough that no idle policy ends it. */
12
+ export const IDLE_REFRESH_MS = 24 * 60 * 60 * 1000;
13
+ /** Whether the schedule refreshes the grant now (Q7): not lost, holding a refresh token, and near its access token's end or unrefreshed since its sign-in or last refresh for longer than the idle time. */
14
+ export function isDueForRefresh(grant, now) {
15
+ if (grant.lost !== null || grant.refreshToken === null) {
16
+ return false;
17
+ }
18
+ const refreshedLast = grant.refreshedAt ?? grant.signedInAt;
19
+ return isNearItsEnd(grant, now) || now.getTime() - refreshedLast.getTime() > IDLE_REFRESH_MS;
20
+ }
21
+ const MS_PER_SECOND = 1000;
22
+ /** When an access token issued now ends, from the seconds the authorization server said it lasts; none where it said nothing. */
23
+ export function accessTokenEndsAtOf(now, expiresInSeconds) {
24
+ return expiresInSeconds === null ? null : new Date(now.getTime() + expiresInSeconds * MS_PER_SECOND);
25
+ }
26
+ //# sourceMappingURL=party-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/party-grant.ts"],"names":[],"mappings":"AA0CA,gIAAgI;AAChI,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,GAAS;IACnD,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,KAAK,IAAI,IAAI,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AACxH,CAAC;AAED,+IAA+I;AAC/I,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C,yGAAyG;AACzG,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAE,GAAS;IACvD,OAAO,KAAK,CAAC,iBAAiB,KAAK,IAAI,IAAI,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,IAAI,gBAAgB,CAAC;AACnH,CAAC;AAED,gKAAgK;AAChK,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnD,4MAA4M;AAC5M,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,GAAS;IAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC;IAC5D,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC;AAC/F,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,iIAAiI;AACjI,MAAM,UAAU,mBAAmB,CAAC,GAAS,EAAE,gBAA+B;IAC5E,OAAO,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,gBAAgB,GAAG,aAAa,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * The ports of a person's sign-in to an outside MCP server that takes only
3
+ * an OAuth sign-in (decision 0067): the grants the gateway keeps, the sign-in
4
+ * under way sealed into its state, and the party's authorization server.
5
+ */
6
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
7
+ import type { ActorCredential } from '../actors/credential-of.js';
8
+ import type { FleetRefusal } from '../connection/ports.js';
9
+ import type { Result } from '../shared/result.js';
10
+ import type { SignInClient } from '../vault/credential.js';
11
+ import type { PartyGrant } from './party-grant.js';
12
+ /** An outside MCP server as a person's sign-in sees it: its sign-in client where each person signs in, none where the gateway calls it with its own credential. */
13
+ export interface SignInServer {
14
+ readonly fleetId: FleetId;
15
+ readonly name: string;
16
+ readonly client: SignInClient | null;
17
+ }
18
+ /** Outbound port: the outside MCP servers of a fleet, by the name of their proxy ship. */
19
+ export interface SignInServers {
20
+ /** The outside MCP server of this name; none when the name is no outside MCP server. */
21
+ find(fleetId: FleetId, name: string): Promise<SignInServer | undefined>;
22
+ }
23
+ /** Outbound port: states what a server's proxy ship offers, from the grants now kept (Q15); the refusal says why the statement waits. */
24
+ export type StatesProxyShip = (input: {
25
+ fleetId: FleetId;
26
+ name: string;
27
+ }) => Promise<Result<unknown, {
28
+ readonly message: string;
29
+ }>>;
30
+ /** Outbound port: the names of the fleet's ships, as the actor reads them, in one read for a page of them; a ship the fleet does not answer is left out. */
31
+ export interface ShipNames {
32
+ namesOf(as: ActorCredential, shipIds: readonly ShipId[]): Promise<Result<ReadonlyMap<ShipId, string>, FleetRefusal>>;
33
+ }
34
+ /** Outbound port: every person's grant of each party, in the gateway's database. */
35
+ export interface PartyGrants {
36
+ ofPerson(fleetId: FleetId, grant: {
37
+ party: string;
38
+ personShipId: ShipId;
39
+ }): Promise<PartyGrant | undefined>;
40
+ /** The grants of the party, by person ship, after the person ship named, at most as many as asked. */
41
+ ofParty(fleetId: FleetId, asked: {
42
+ party: string;
43
+ after: ShipId | null;
44
+ limit: number;
45
+ }): Promise<PartyGrant[]>;
46
+ /** Every person holding a grant, in every fleet, each once. */
47
+ persons(): Promise<{
48
+ fleetId: FleetId;
49
+ personShipId: ShipId;
50
+ }[]>;
51
+ /** Every grant of the person, one per party at most. */
52
+ ofPersonShip(fleetId: FleetId, personShipId: ShipId): Promise<PartyGrant[]>;
53
+ /** Every grant of the account in the fleet, one per party at most. */
54
+ ofAccount(fleetId: FleetId, accountId: string): Promise<PartyGrant[]>;
55
+ /** The grant of the party that names this outside account, whoever holds it. */
56
+ ofSubject(fleetId: FleetId, grant: {
57
+ party: string;
58
+ subject: string;
59
+ }): Promise<PartyGrant | undefined>;
60
+ /** A grant of the party whose access token may still be sent, the most recently used first, then the most recently signed in (Q15). */
61
+ usable(fleetId: FleetId, asked: {
62
+ party: string;
63
+ now: Date;
64
+ }): Promise<PartyGrant | undefined>;
65
+ /** Keeps the grant in place of the person's earlier one; none kept when another person's grant of the party names its outside account, as two sign-ins at once find. */
66
+ keep(grant: PartyGrant): Promise<'kept' | 'subjectTaken'>;
67
+ /**
68
+ * Holds the person's grant while the change runs, so one change at a time
69
+ * runs on it, also across gateway instances, and keeps the grant it
70
+ * answers before another change reads it; none when the person holds no
71
+ * grant of the party.
72
+ */
73
+ change(grant: Pick<PartyGrant, 'fleetId' | 'party' | 'personShipId'>, change: (held: PartyGrant) => Promise<PartyGrant>): Promise<PartyGrant | undefined>;
74
+ /** The grants of every fleet the schedule refreshes now (Q7), at most a round's worth, those whose access token ends first first. */
75
+ due(asked: {
76
+ now: Date;
77
+ }): Promise<PartyGrant[]>;
78
+ /** Sets when the person's grant last served a call. */
79
+ markUsed(grant: Pick<PartyGrant, 'fleetId' | 'party' | 'personShipId'>, at: Date): Promise<void>;
80
+ remove(fleetId: FleetId, grant: {
81
+ party: string;
82
+ personShipId: ShipId;
83
+ }): Promise<void>;
84
+ }
85
+ /** A person's sign-in to a party under way at its authorization server: whose it is, and its PKCE verifier. */
86
+ export interface PartySignInUnderWay {
87
+ readonly fleetId: FleetId;
88
+ readonly party: string;
89
+ readonly accountId: string;
90
+ readonly personShipId: ShipId;
91
+ readonly verifier: string;
92
+ readonly expiresAt: Date;
93
+ }
94
+ /** Outbound port: seals a sign-in under way into the state the authorization server carries back, so the gateway stores nothing for it. */
95
+ export interface PartySignInSeals {
96
+ seal(signIn: PartySignInUnderWay): string;
97
+ /** The sign-in a state seals; none for a state the gateway did not seal. */
98
+ open(state: string): PartySignInUnderWay | undefined;
99
+ }
100
+ /** What an OpenID Connect ID token claims, read and not yet checked: the core checks it names the party's issuer and client. */
101
+ export interface IdTokenClaims {
102
+ readonly issuer: string;
103
+ readonly audiences: readonly string[];
104
+ readonly subject: string;
105
+ readonly name: string | null;
106
+ }
107
+ /** The token endpoint's answer to a redeemed code. */
108
+ export interface RedeemedTokens {
109
+ readonly accessToken: string;
110
+ readonly refreshToken: string | null;
111
+ readonly expiresInSeconds: number | null;
112
+ /** None when the authorization server sent no ID token. */
113
+ readonly idToken: IdTokenClaims | null;
114
+ }
115
+ /** The token endpoint's answer to a refresh (RFC 6749 6): a new refresh token only where the server rotates them. */
116
+ export type RefreshedTokens = Omit<RedeemedTokens, 'idToken'>;
117
+ /**
118
+ * Why a token request gave no tokens: the authorization server answered an
119
+ * OAuth error (refused, with its error code), or did not answer
120
+ * (unreachable).
121
+ */
122
+ export type TokenRequestFailure = {
123
+ readonly kind: 'refused';
124
+ readonly error: string;
125
+ readonly reason: string;
126
+ } | {
127
+ readonly kind: 'unreachable';
128
+ readonly reason: string;
129
+ };
130
+ /** Outbound port: a party's authorization server, reached with the party's client. */
131
+ export interface PartySignIns {
132
+ /** The authorize address a person's browser goes to: the code flow with PKCE S256, the client's scope and resource (RFC 8707). */
133
+ authorizeUrl(client: SignInClient, asked: {
134
+ state: string;
135
+ codeChallenge: string;
136
+ redirectUri: string;
137
+ }): string;
138
+ redeemCode(client: SignInClient, asked: {
139
+ code: string;
140
+ verifier: string;
141
+ redirectUri: string;
142
+ }): Promise<Result<RedeemedTokens, TokenRequestFailure>>;
143
+ refresh(client: SignInClient, refreshToken: string): Promise<Result<RefreshedTokens, TokenRequestFailure>>;
144
+ /** Revokes a token at the client's revocation endpoint (RFC 7009). */
145
+ revoke(client: SignInClient & {
146
+ revocationEndpoint: string;
147
+ }, token: string): Promise<Result<void, {
148
+ reason: string;
149
+ }>>;
150
+ /** Deletes the client at its client configuration endpoint, with its registration access token (RFC 7592). */
151
+ deleteClient(client: SignInClient & {
152
+ registrationClientUri: string;
153
+ registrationAccessToken: string;
154
+ }): Promise<Result<void, {
155
+ reason: string;
156
+ }>>;
157
+ }
158
+ /** The notice a person is told by when a call needs their sign-in to a party (Q6): its id keys the message, so one sent again is stored once. */
159
+ export interface SignInNotice {
160
+ readonly noticeId: string;
161
+ readonly isTold: boolean;
162
+ }
163
+ /** Outbound port: the notices of a missing sign-in, one per person and party while open. */
164
+ export interface SignInNotices {
165
+ /** The person's open notice for the party, opened under this id unless one is open already, as two calls at once find. */
166
+ open(fleetId: FleetId, notice: {
167
+ party: string;
168
+ personShipId: ShipId;
169
+ noticeId: string;
170
+ }): Promise<SignInNotice>;
171
+ markTold(fleetId: FleetId, notice: {
172
+ party: string;
173
+ personShipId: ShipId;
174
+ }): Promise<void>;
175
+ /** Closes it at a sign-in, so a later loss tells the person again (Q6). */
176
+ close(fleetId: FleetId, notice: {
177
+ party: string;
178
+ personShipId: ShipId;
179
+ }): Promise<void>;
180
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/party-grants/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import { type Result } from '../shared/result.js';
3
+ import type { GrantLost, OutsideAccount, PartyGrant } from './party-grant.js';
4
+ import type { PartyGrants, SignInServers } from './ports.js';
5
+ import { type SignInPartyRefusal } from './sign-in-party.js';
6
+ interface HeldGrant {
7
+ readonly outsideAccount: OutsideAccount;
8
+ readonly signedInAt: Date;
9
+ readonly lastUsedAt: Date | null;
10
+ }
11
+ /** A person's own sign-in to a party, as their page shows it: never a token. A lost one says when and why (Q5). */
12
+ export type OwnGrant = {
13
+ readonly state: 'notSignedIn';
14
+ } | ({
15
+ readonly state: 'signedIn';
16
+ } & HeldGrant) | ({
17
+ readonly state: 'lost';
18
+ readonly lost: GrantLost;
19
+ } & HeldGrant);
20
+ export type ReadOwnGrant = (input: {
21
+ actor: Actor;
22
+ name: string;
23
+ }) => Promise<Result<OwnGrant, SignInPartyRefusal>>;
24
+ /** Use case: a person reads their own sign-in to an outside MCP server where each person signs in (decision 0067, Q12): the outside account it names, when they signed in, when it was last used, and whether it was lost. */
25
+ export declare function createReadOwnGrant(deps: {
26
+ servers: SignInServers;
27
+ grants: Pick<PartyGrants, 'ofPerson'>;
28
+ }): ReadOwnGrant;
29
+ /** A held grant as a page shows it: never a token. */
30
+ export declare function shownGrantOf(grant: PartyGrant): Exclude<OwnGrant, {
31
+ state: 'notSignedIn';
32
+ }>;
33
+ export {};
@@ -0,0 +1,23 @@
1
+ import { ok } from '../shared/result.js';
2
+ import { signInPartyOf } from './sign-in-party.js';
3
+ /** Use case: a person reads their own sign-in to an outside MCP server where each person signs in (decision 0067, Q12): the outside account it names, when they signed in, when it was last used, and whether it was lost. */
4
+ export function createReadOwnGrant(deps) {
5
+ return async (input) => {
6
+ const signingIn = await signInPartyOf(deps.servers, input);
7
+ if (!signingIn.isOk) {
8
+ return signingIn;
9
+ }
10
+ const { server, personShipId } = signingIn.value;
11
+ const grant = await deps.grants.ofPerson(server.fleetId, { party: server.name, personShipId });
12
+ if (grant === undefined) {
13
+ return ok({ state: 'notSignedIn' });
14
+ }
15
+ return ok(shownGrantOf(grant));
16
+ };
17
+ }
18
+ /** A held grant as a page shows it: never a token. */
19
+ export function shownGrantOf(grant) {
20
+ const { outsideAccount, signedInAt, lastUsedAt, lost } = grant;
21
+ return lost === null ? { state: 'signedIn', outsideAccount, signedInAt, lastUsedAt } : { state: 'lost', outsideAccount, signedInAt, lastUsedAt, lost };
22
+ }
23
+ //# sourceMappingURL=read-own-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-own-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/read-own-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAa5E,8NAA8N;AAC9N,MAAM,UAAU,kBAAkB,CAAC,IAAuE;IACxG,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/D,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACzJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { Clock } from '../shared/clock.js';
2
+ import { type Result } from '../shared/result.js';
3
+ import type { SignInClient } from '../vault/credential.js';
4
+ import { type GrantLost, type PartyGrant } from './party-grant.js';
5
+ import type { PartyGrants, PartySignIns, TokenRequestFailure } from './ports.js';
6
+ import type { TellSignInNeeded } from './tell-sign-in-needed.js';
7
+ /**
8
+ * Why a grant was not refreshed: it holds no refresh token; the
9
+ * authorization server refused or did not answer the refresh; the grant is
10
+ * lost, the server having answered `invalid_grant`; or the person holds no
11
+ * grant of the party any more.
12
+ */
13
+ export type RefreshFailure = {
14
+ readonly kind: 'noRefreshToken';
15
+ } | TokenRequestFailure | {
16
+ readonly kind: 'lost';
17
+ readonly lost: GrantLost;
18
+ } | {
19
+ readonly kind: 'removed';
20
+ };
21
+ export type RefreshGrant = (input: {
22
+ client: SignInClient;
23
+ grant: PartyGrant;
24
+ }) => Promise<Result<PartyGrant, RefreshFailure>>;
25
+ /**
26
+ * Use case: a person's grant is refreshed with its party's client (decision
27
+ * 0067, Q7), one refresh at a time per grant: the grant is held while its
28
+ * refresh runs, and the new tokens are kept before they are used (L19). A
29
+ * grant whose access token is no longer the one asked for was refreshed, or
30
+ * signed in again, meanwhile: it is answered as held, refreshing nothing, so
31
+ * a rotated refresh token is never used twice. A server that issues no new
32
+ * refresh token leaves the one held. A refresh answered `invalid_grant`
33
+ * loses the grant, kept with when and why, and tells the person once (Q5,
34
+ * Q6); any other refusal keeps it as it was.
35
+ */
36
+ export declare function createRefreshGrant(deps: {
37
+ signIns: Pick<PartySignIns, 'refresh'>;
38
+ grants: Pick<PartyGrants, 'change'>;
39
+ tellSignInNeeded: TellSignInNeeded;
40
+ clock: Clock;
41
+ }): RefreshGrant;
@@ -0,0 +1,58 @@
1
+ import { err, ok } from '../shared/result.js';
2
+ import { accessTokenEndsAtOf } from './party-grant.js';
3
+ /** The OAuth error a refresh token the authorization server will not refresh again is refused with (RFC 6749 5.2). */
4
+ const INVALID_GRANT = 'invalid_grant';
5
+ /**
6
+ * Use case: a person's grant is refreshed with its party's client (decision
7
+ * 0067, Q7), one refresh at a time per grant: the grant is held while its
8
+ * refresh runs, and the new tokens are kept before they are used (L19). A
9
+ * grant whose access token is no longer the one asked for was refreshed, or
10
+ * signed in again, meanwhile: it is answered as held, refreshing nothing, so
11
+ * a rotated refresh token is never used twice. A server that issues no new
12
+ * refresh token leaves the one held. A refresh answered `invalid_grant`
13
+ * loses the grant, kept with when and why, and tells the person once (Q5,
14
+ * Q6); any other refusal keeps it as it was.
15
+ */
16
+ export function createRefreshGrant(deps) {
17
+ return async ({ client, grant }) => {
18
+ let failure;
19
+ const losing = { lost: null };
20
+ const refreshed = async (held) => {
21
+ if (held.lost !== null) {
22
+ failure = { kind: 'lost', lost: held.lost };
23
+ return held;
24
+ }
25
+ if (held.accessToken !== grant.accessToken) {
26
+ return held;
27
+ }
28
+ if (held.refreshToken === null) {
29
+ failure = { kind: 'noRefreshToken' };
30
+ return held;
31
+ }
32
+ const answered = await deps.signIns.refresh(client, held.refreshToken);
33
+ if (!answered.isOk) {
34
+ if (answered.error.kind === 'refused' && answered.error.error === INVALID_GRANT) {
35
+ const lost = { at: deps.clock.now(), why: answered.error.reason };
36
+ failure = { kind: 'lost', lost };
37
+ losing.lost = lost;
38
+ return { ...held, lost };
39
+ }
40
+ failure = answered.error;
41
+ return held;
42
+ }
43
+ const { accessToken, refreshToken, expiresInSeconds } = answered.value;
44
+ const now = deps.clock.now();
45
+ return { ...held, accessToken, refreshToken: refreshToken ?? held.refreshToken, accessTokenEndsAt: accessTokenEndsAtOf(now, expiresInSeconds), refreshedAt: now };
46
+ };
47
+ const kept = await deps.grants.change(grant, refreshed);
48
+ if (kept === undefined) {
49
+ return err({ kind: 'removed' });
50
+ }
51
+ if (losing.lost !== null) {
52
+ // Told once the loss is kept, never while the grant is held.
53
+ await deps.tellSignInNeeded({ fleetId: kept.fleetId, party: kept.party, personShipId: kept.personShipId, lost: losing.lost });
54
+ }
55
+ return failure === undefined ? ok(kept) : err(failure);
56
+ };
57
+ }
58
+ //# sourceMappingURL=refresh-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/refresh-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAmC,MAAM,kBAAkB,CAAC;AAIxF,sHAAsH;AACtH,MAAM,aAAa,GAAG,eAAe,CAAC;AAYtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAuI;IACxK,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACjC,IAAI,OAAmC,CAAC;QACxC,MAAM,MAAM,GAA+B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,KAAK,EAAE,IAAgB,EAAuB,EAAE;YAChE,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC3C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC/B,OAAO,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;oBAChF,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAClE,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;oBACnB,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;gBAC3B,CAAC;gBACD,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;gBACzB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAC7B,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QACpK,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,6DAA6D;YAC7D,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAChI,CAAC;QACD,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { ApprovingDeps, CheckApproving } from '../parties/check-approving.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import { type ApprovedSignInPartyRefusal } from './approved-sign-in-party.js';
6
+ import type { PartyGrants, PartySignIns } from './ports.js';
7
+ export type RemoveGrant = (input: Parameters<CheckApproving>[0] & {
8
+ personShipId: ShipId;
9
+ }) => Promise<Result<{
10
+ isRevoked: boolean;
11
+ }, ApprovedSignInPartyRefusal | DomainError<'NOT_SIGNED_IN'>>>;
12
+ /**
13
+ * Use case: an actor holding gateway:approve within manage reach of an
14
+ * outside MCP server's proxy ship removes any person's sign-in to it
15
+ * (decision 0067, Q6), so the party is cut off for that person without
16
+ * retiring it. It ends as every grant ends.
17
+ */
18
+ export declare function createRemoveGrant(deps: ApprovingDeps & {
19
+ grants: Pick<PartyGrants, 'ofPerson' | 'remove'>;
20
+ signIns: Pick<PartySignIns, 'revoke'>;
21
+ }): RemoveGrant;
@@ -0,0 +1,25 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { approvedSignInParty } from './approved-sign-in-party.js';
4
+ import { endGrant } from './end-grant.js';
5
+ /**
6
+ * Use case: an actor holding gateway:approve within manage reach of an
7
+ * outside MCP server's proxy ship removes any person's sign-in to it
8
+ * (decision 0067, Q6), so the party is cut off for that person without
9
+ * retiring it. It ends as every grant ends.
10
+ */
11
+ export function createRemoveGrant(deps) {
12
+ return async ({ personShipId, ...asked }) => {
13
+ const approved = await approvedSignInParty(deps, asked);
14
+ if (!approved.isOk) {
15
+ return approved;
16
+ }
17
+ const { name, client } = approved.value;
18
+ const grant = await deps.grants.ofPerson(asked.actor.fleetId, { party: name, personShipId });
19
+ if (grant === undefined) {
20
+ return refuse('NOT_SIGNED_IN', `${personShipId} is not signed in to ${name}`);
21
+ }
22
+ return ok({ isRevoked: await endGrant(deps, { client, grant }) });
23
+ };
24
+ }
25
+ //# sourceMappingURL=remove-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/remove-grant.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAmC,MAAM,6BAA6B,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO1C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiH;IACjJ,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;QAC1C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,eAAe,EAAE,GAAG,YAAY,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { PartyGrants, PartySignIns, SignInServers } from './ports.js';
5
+ import { type SignInPartyRefusal } from './sign-in-party.js';
6
+ export type RemoveOwnGrant = (input: {
7
+ actor: Actor;
8
+ name: string;
9
+ }) => Promise<Result<{
10
+ isRevoked: boolean;
11
+ }, SignInPartyRefusal | DomainError<'NOT_SIGNED_IN'>>>;
12
+ /** Use case: a person removes their own sign-in to an outside MCP server (decision 0067, Q6), ended as every grant ends. */
13
+ export declare function createRemoveOwnGrant(deps: {
14
+ servers: SignInServers;
15
+ grants: Pick<PartyGrants, 'ofPerson' | 'remove'>;
16
+ signIns: Pick<PartySignIns, 'revoke'>;
17
+ }): RemoveOwnGrant;
@@ -0,0 +1,21 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { endGrant } from './end-grant.js';
4
+ import { signInPartyOf } from './sign-in-party.js';
5
+ /** Use case: a person removes their own sign-in to an outside MCP server (decision 0067, Q6), ended as every grant ends. */
6
+ export function createRemoveOwnGrant(deps) {
7
+ return async (input) => {
8
+ const signingIn = await signInPartyOf(deps.servers, input);
9
+ if (!signingIn.isOk) {
10
+ return signingIn;
11
+ }
12
+ const { server, client, personShipId } = signingIn.value;
13
+ const grant = await deps.grants.ofPerson(server.fleetId, { party: server.name, personShipId });
14
+ if (grant === undefined) {
15
+ return refuse('NOT_SIGNED_IN', `You are not signed in to ${server.name}`);
16
+ }
17
+ const isRevoked = await endGrant(deps, { client, grant });
18
+ return ok({ isRevoked });
19
+ };
20
+ }
21
+ //# sourceMappingURL=remove-own-grant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-own-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/remove-own-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAI5E,4HAA4H;AAC5H,MAAM,UAAU,oBAAoB,CAAC,IAAyH;IAC5J,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,eAAe,EAAE,4BAA4B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { Actor } from '../actors/authenticate-actor.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { SignInClient } from '../vault/credential.js';
6
+ import type { SignInServer, SignInServers } from './ports.js';
7
+ export type SignInPartyRefusal = DomainError<'NOT_A_PERSON' | 'NO_SUCH_PARTY' | 'NO_SIGN_IN'>;
8
+ /** A person acting on their own sign-in to a party, and the party's client. */
9
+ export interface SignInParty {
10
+ readonly server: SignInServer;
11
+ readonly client: SignInClient;
12
+ readonly accountId: string;
13
+ readonly personShipId: ShipId;
14
+ }
15
+ /**
16
+ * The party an account signs in to for itself (decision 0067, Q16): only an
17
+ * account with a person ship in the fleet, and only an outside MCP server
18
+ * where each person signs in.
19
+ */
20
+ export declare function signInPartyOf(servers: SignInServers, asked: {
21
+ actor: Actor;
22
+ name: string;
23
+ }): Promise<Result<SignInParty, SignInPartyRefusal>>;
@@ -0,0 +1,22 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /**
4
+ * The party an account signs in to for itself (decision 0067, Q16): only an
5
+ * account with a person ship in the fleet, and only an outside MCP server
6
+ * where each person signs in.
7
+ */
8
+ export async function signInPartyOf(servers, asked) {
9
+ const { actor, name } = asked;
10
+ if (actor.kind !== 'account' || actor.personShipId === null) {
11
+ return refuse('NOT_A_PERSON', 'Only a person signs in to an outside server, and your account has no person ship in this fleet');
12
+ }
13
+ const server = await servers.find(actor.fleetId, name);
14
+ if (server === undefined) {
15
+ return refuse('NO_SUCH_PARTY', `There is no outside MCP server ${name}`);
16
+ }
17
+ if (server.client === null) {
18
+ return refuse('NO_SIGN_IN', `Nobody signs in to ${name} for themselves: the gateway calls it with its own credential`);
19
+ }
20
+ return ok({ server, client: server.client, accountId: actor.accountId, personShipId: actor.personShipId });
21
+ }
22
+ //# sourceMappingURL=sign-in-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-in-party.js","sourceRoot":"","sources":["../../../src/core/party-grants/sign-in-party.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AActD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAsB,EAAE,KAAqC;IAC/F,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC9B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,cAAc,EAAE,gGAAgG,CAAC,CAAC;IAClI,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,eAAe,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,YAAY,EAAE,sBAAsB,IAAI,+DAA+D,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { OAuthSecrets } from '../oauth/ports.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { PartySignIns, PartySignInSeals, SignInServers } from './ports.js';
6
+ import { type SignInPartyRefusal } from './sign-in-party.js';
7
+ /** How long a sign-in the gateway started may take to come back from the outside authorization server. */
8
+ export declare const PARTY_SIGN_IN_MS: number;
9
+ export type StartPartySignInRefusal = SignInPartyRefusal;
10
+ export type StartPartySignIn = (input: {
11
+ actor: Actor;
12
+ name: string;
13
+ }) => Promise<Result<{
14
+ url: string;
15
+ }, StartPartySignInRefusal>>;
16
+ /**
17
+ * Use case: a person presses Sign in on an outside MCP server's page, for
18
+ * themselves (decision 0067, Q16): every account of the fleet with a person
19
+ * ship may. The gateway seals whose sign-in it is and its PKCE verifier into
20
+ * the state, for ten minutes, and sends the person to the party's
21
+ * authorization server under the party's client.
22
+ */
23
+ export declare function createStartPartySignIn(deps: {
24
+ servers: SignInServers;
25
+ seals: PartySignInSeals;
26
+ signIns: Pick<PartySignIns, 'authorizeUrl'>;
27
+ secrets: Pick<OAuthSecrets, 'newSecret' | 'challengeOf'>;
28
+ clock: Clock;
29
+ /** Where the authorization server sends the person back: the redirect URI the party's client was registered with. */
30
+ redirectUri: string;
31
+ }): StartPartySignIn;