@aeolus-fleet/gateway 0.29.2 → 0.30.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 (694) hide show
  1. package/README.md +11 -3
  2. package/dist/adapters/a2a/a2a-agents.d.ts +6 -0
  3. package/dist/adapters/a2a/a2a-agents.js +238 -0
  4. package/dist/adapters/a2a/a2a-agents.js.map +1 -0
  5. package/dist/adapters/a2a/agent-cards.d.ts +4 -0
  6. package/dist/adapters/a2a/agent-cards.js +90 -0
  7. package/dist/adapters/a2a/agent-cards.js.map +1 -0
  8. package/dist/adapters/crypto/agent-keys.d.ts +3 -0
  9. package/dist/adapters/crypto/agent-keys.js +13 -0
  10. package/dist/adapters/crypto/agent-keys.js.map +1 -0
  11. package/dist/adapters/crypto/call-keys.js +2 -0
  12. package/dist/adapters/crypto/call-keys.js.map +1 -1
  13. package/dist/adapters/fleet/core-version.d.ts +1 -1
  14. package/dist/adapters/fleet/core-version.js +1 -1
  15. package/dist/adapters/fleet/fleet-ships.d.ts +3 -1
  16. package/dist/adapters/fleet/fleet-ships.js +19 -10
  17. package/dist/adapters/fleet/fleet-ships.js.map +1 -1
  18. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -2
  19. package/dist/adapters/fleet/rest-fleet-door.js +29 -5
  20. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  21. package/dist/adapters/http/a2a-cards.d.ts +24 -0
  22. package/dist/adapters/http/a2a-cards.js +62 -0
  23. package/dist/adapters/http/a2a-cards.js.map +1 -0
  24. package/dist/adapters/http/a2a-endpoint.d.ts +28 -0
  25. package/dist/adapters/http/a2a-endpoint.js +424 -0
  26. package/dist/adapters/http/a2a-endpoint.js.map +1 -0
  27. package/dist/adapters/http/a2a-streams.d.ts +28 -0
  28. package/dist/adapters/http/a2a-streams.js +74 -0
  29. package/dist/adapters/http/a2a-streams.js.map +1 -0
  30. package/dist/adapters/http/a2a-tasks.d.ts +18 -0
  31. package/dist/adapters/http/a2a-tasks.js +117 -0
  32. package/dist/adapters/http/a2a-tasks.js.map +1 -0
  33. package/dist/adapters/http/front-door.js +8 -4
  34. package/dist/adapters/http/front-door.js.map +1 -1
  35. package/dist/adapters/http/live.d.ts +3 -1
  36. package/dist/adapters/http/live.js +6 -2
  37. package/dist/adapters/http/live.js.map +1 -1
  38. package/dist/adapters/http/oauth-routes.d.ts +1 -1
  39. package/dist/adapters/http/oauth-routes.js +16 -3
  40. package/dist/adapters/http/oauth-routes.js.map +1 -1
  41. package/dist/adapters/mcp/mcp-servers.js +2 -0
  42. package/dist/adapters/mcp/mcp-servers.js.map +1 -1
  43. package/dist/adapters/pagasae/email-channel.d.ts +8 -0
  44. package/dist/adapters/pagasae/email-channel.js +37 -0
  45. package/dist/adapters/pagasae/email-channel.js.map +1 -0
  46. package/dist/adapters/pagasae/pagasae-client.js +6 -2
  47. package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
  48. package/dist/adapters/prisma/agent-calls.d.ts +3 -0
  49. package/dist/adapters/prisma/agent-calls.js +49 -0
  50. package/dist/adapters/prisma/agent-calls.js.map +1 -0
  51. package/dist/adapters/prisma/changes.d.ts +17 -8
  52. package/dist/adapters/prisma/changes.js +18 -5
  53. package/dist/adapters/prisma/changes.js.map +1 -1
  54. package/dist/adapters/prisma/client-calls.d.ts +1 -1
  55. package/dist/adapters/prisma/client-calls.js +83 -21
  56. package/dist/adapters/prisma/client-calls.js.map +1 -1
  57. package/dist/adapters/prisma/email-channels.d.ts +4 -0
  58. package/dist/adapters/prisma/email-channels.js +14 -0
  59. package/dist/adapters/prisma/email-channels.js.map +1 -0
  60. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  61. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  62. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  63. package/dist/adapters/prisma/focused-pages.d.ts +4 -0
  64. package/dist/adapters/prisma/focused-pages.js +13 -0
  65. package/dist/adapters/prisma/focused-pages.js.map +1 -0
  66. package/dist/adapters/prisma/generated/browser.d.ts +45 -0
  67. package/dist/adapters/prisma/generated/client.d.ts +45 -0
  68. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +54 -54
  69. package/dist/adapters/prisma/generated/internal/class.d.ts +99 -0
  70. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  71. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  72. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +783 -1
  73. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +101 -3
  74. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  75. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +107 -0
  76. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +101 -3
  77. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  78. package/dist/adapters/prisma/generated/models/A2aAgentCall.d.ts +1203 -0
  79. package/dist/adapters/prisma/generated/models/A2aAgentCall.js +2 -0
  80. package/dist/adapters/prisma/generated/models/A2aAgentCall.js.map +1 -0
  81. package/dist/adapters/prisma/generated/models/A2aAgentReply.d.ts +1003 -0
  82. package/dist/adapters/prisma/generated/models/A2aAgentReply.js +2 -0
  83. package/dist/adapters/prisma/generated/models/A2aAgentReply.js.map +1 -0
  84. package/dist/adapters/prisma/generated/models/A2aPush.d.ts +1413 -0
  85. package/dist/adapters/prisma/generated/models/A2aPush.js +2 -0
  86. package/dist/adapters/prisma/generated/models/A2aPush.js.map +1 -0
  87. package/dist/adapters/prisma/generated/models/A2aPushConfig.d.ts +1322 -0
  88. package/dist/adapters/prisma/generated/models/A2aPushConfig.js +2 -0
  89. package/dist/adapters/prisma/generated/models/A2aPushConfig.js.map +1 -0
  90. package/dist/adapters/prisma/generated/models/A2aTask.d.ts +1002 -0
  91. package/dist/adapters/prisma/generated/models/A2aTask.js +2 -0
  92. package/dist/adapters/prisma/generated/models/A2aTask.js.map +1 -0
  93. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +136 -15
  94. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +0 -7
  95. package/dist/adapters/prisma/generated/models/EmailChannel.d.ts +946 -0
  96. package/dist/adapters/prisma/generated/models/EmailChannel.js +2 -0
  97. package/dist/adapters/prisma/generated/models/EmailChannel.js.map +1 -0
  98. package/dist/adapters/prisma/generated/models/FocusedPage.d.ts +974 -0
  99. package/dist/adapters/prisma/generated/models/FocusedPage.js +2 -0
  100. package/dist/adapters/prisma/generated/models/FocusedPage.js.map +1 -0
  101. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +47 -41
  102. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +32 -8
  103. package/dist/adapters/prisma/generated/models/Party.d.ts +90 -3
  104. package/dist/adapters/prisma/generated/models/WakeSent.d.ts +975 -0
  105. package/dist/adapters/prisma/generated/models/WakeSent.js +2 -0
  106. package/dist/adapters/prisma/generated/models/WakeSent.js.map +1 -0
  107. package/dist/adapters/prisma/generated/models/WebPushSubscription.d.ts +1115 -0
  108. package/dist/adapters/prisma/generated/models/WebPushSubscription.js +2 -0
  109. package/dist/adapters/prisma/generated/models/WebPushSubscription.js.map +1 -0
  110. package/dist/adapters/prisma/generated/models.d.ts +9 -0
  111. package/dist/adapters/prisma/oauth-stores.js +3 -2
  112. package/dist/adapters/prisma/oauth-stores.js.map +1 -1
  113. package/dist/adapters/prisma/party-store.js +35 -6
  114. package/dist/adapters/prisma/party-store.js.map +1 -1
  115. package/dist/adapters/prisma/person-crews.js +9 -0
  116. package/dist/adapters/prisma/person-crews.js.map +1 -1
  117. package/dist/adapters/prisma/push-store.d.ts +3 -0
  118. package/dist/adapters/prisma/push-store.js +102 -0
  119. package/dist/adapters/prisma/push-store.js.map +1 -0
  120. package/dist/adapters/prisma/waiter-locks.d.ts +4 -0
  121. package/dist/adapters/prisma/waiter-locks.js +72 -0
  122. package/dist/adapters/prisma/waiter-locks.js.map +1 -0
  123. package/dist/adapters/prisma/wakes-sent.d.ts +4 -0
  124. package/dist/adapters/prisma/wakes-sent.js +10 -0
  125. package/dist/adapters/prisma/wakes-sent.js.map +1 -0
  126. package/dist/adapters/prisma/web-push-subscriptions.d.ts +3 -0
  127. package/dist/adapters/prisma/web-push-subscriptions.js +33 -0
  128. package/dist/adapters/prisma/web-push-subscriptions.js.map +1 -0
  129. package/dist/adapters/trpc/router.d.ts +397 -9
  130. package/dist/adapters/trpc/router.js +237 -13
  131. package/dist/adapters/trpc/router.js.map +1 -1
  132. package/dist/adapters/web-push/web-push.d.ts +9 -0
  133. package/dist/adapters/web-push/web-push.js +70 -0
  134. package/dist/adapters/web-push/web-push.js.map +1 -0
  135. package/dist/adapters/webhooks/allowed-lookup.d.ts +14 -0
  136. package/dist/adapters/webhooks/allowed-lookup.js +28 -0
  137. package/dist/adapters/webhooks/allowed-lookup.js.map +1 -0
  138. package/dist/adapters/webhooks/host-resolver.d.ts +3 -0
  139. package/dist/adapters/webhooks/host-resolver.js +13 -0
  140. package/dist/adapters/webhooks/host-resolver.js.map +1 -0
  141. package/dist/adapters/webhooks/webhook-poster.d.ts +6 -0
  142. package/dist/adapters/webhooks/webhook-poster.js +67 -0
  143. package/dist/adapters/webhooks/webhook-poster.js.map +1 -0
  144. package/dist/app.d.ts +12 -0
  145. package/dist/app.js +273 -14
  146. package/dist/app.js.map +1 -1
  147. package/dist/bin/aeolus-gateway.js +3 -0
  148. package/dist/bin/aeolus-gateway.js.map +1 -1
  149. package/dist/config.d.ts +14 -0
  150. package/dist/config.js +24 -0
  151. package/dist/config.js.map +1 -1
  152. package/dist/core/a2a-in/authenticate-a2a-client.d.ts +23 -0
  153. package/dist/core/a2a-in/authenticate-a2a-client.js +21 -0
  154. package/dist/core/a2a-in/authenticate-a2a-client.js.map +1 -0
  155. package/dist/core/a2a-in/deliver-pushes.d.ts +24 -0
  156. package/dist/core/a2a-in/deliver-pushes.js +48 -0
  157. package/dist/core/a2a-in/deliver-pushes.js.map +1 -0
  158. package/dist/core/a2a-in/find-reached-ship.d.ts +18 -0
  159. package/dist/core/a2a-in/find-reached-ship.js +20 -0
  160. package/dist/core/a2a-in/find-reached-ship.js.map +1 -0
  161. package/dist/core/a2a-in/follow-a2a-task.d.ts +25 -0
  162. package/dist/core/a2a-in/follow-a2a-task.js +23 -0
  163. package/dist/core/a2a-in/follow-a2a-task.js.map +1 -0
  164. package/dist/core/a2a-in/inbound-message.d.ts +30 -0
  165. package/dist/core/a2a-in/inbound-message.js +33 -0
  166. package/dist/core/a2a-in/inbound-message.js.map +1 -0
  167. package/dist/core/a2a-in/list-a2a-tasks.d.ts +18 -0
  168. package/dist/core/a2a-in/list-a2a-tasks.js +14 -0
  169. package/dist/core/a2a-in/list-a2a-tasks.js.map +1 -0
  170. package/dist/core/a2a-in/list-push-configs.d.ts +20 -0
  171. package/dist/core/a2a-in/list-push-configs.js +18 -0
  172. package/dist/core/a2a-in/list-push-configs.js.map +1 -0
  173. package/dist/core/a2a-in/list-reached-ships.d.ts +25 -0
  174. package/dist/core/a2a-in/list-reached-ships.js +22 -0
  175. package/dist/core/a2a-in/list-reached-ships.js.map +1 -0
  176. package/dist/core/a2a-in/notice-task-changes.d.ts +19 -0
  177. package/dist/core/a2a-in/notice-task-changes.js +17 -0
  178. package/dist/core/a2a-in/notice-task-changes.js.map +1 -0
  179. package/dist/core/a2a-in/ports.d.ts +124 -0
  180. package/dist/core/a2a-in/ports.js +2 -0
  181. package/dist/core/a2a-in/ports.js.map +1 -0
  182. package/dist/core/a2a-in/push-config-view.d.ts +8 -0
  183. package/dist/core/a2a-in/push-config-view.js +2 -0
  184. package/dist/core/a2a-in/push-config-view.js.map +1 -0
  185. package/dist/core/a2a-in/push-to-webhooks.d.ts +19 -0
  186. package/dist/core/a2a-in/push-to-webhooks.js +19 -0
  187. package/dist/core/a2a-in/push-to-webhooks.js.map +1 -0
  188. package/dist/core/a2a-in/read-a2a-task.d.ts +12 -0
  189. package/dist/core/a2a-in/read-a2a-task.js +11 -0
  190. package/dist/core/a2a-in/read-a2a-task.js.map +1 -0
  191. package/dist/core/a2a-in/read-push-config.d.ts +16 -0
  192. package/dist/core/a2a-in/read-push-config.js +14 -0
  193. package/dist/core/a2a-in/read-push-config.js.map +1 -0
  194. package/dist/core/a2a-in/remove-push-config.d.ts +15 -0
  195. package/dist/core/a2a-in/remove-push-config.js +13 -0
  196. package/dist/core/a2a-in/remove-push-config.js.map +1 -0
  197. package/dist/core/a2a-in/send-a2a-message.d.ts +34 -0
  198. package/dist/core/a2a-in/send-a2a-message.js +106 -0
  199. package/dist/core/a2a-in/send-a2a-message.js.map +1 -0
  200. package/dist/core/a2a-in/set-push-config.d.ts +30 -0
  201. package/dist/core/a2a-in/set-push-config.js +27 -0
  202. package/dist/core/a2a-in/set-push-config.js.map +1 -0
  203. package/dist/core/a2a-in/subscribe-to-a2a-task.d.ts +18 -0
  204. package/dist/core/a2a-in/subscribe-to-a2a-task.js +17 -0
  205. package/dist/core/a2a-in/subscribe-to-a2a-task.js.map +1 -0
  206. package/dist/core/a2a-in/task-view.d.ts +51 -0
  207. package/dist/core/a2a-in/task-view.js +49 -0
  208. package/dist/core/a2a-in/task-view.js.map +1 -0
  209. package/dist/core/a2a-in/webhook-address.d.ts +7 -0
  210. package/dist/core/a2a-in/webhook-address.js +17 -0
  211. package/dist/core/a2a-in/webhook-address.js.map +1 -0
  212. package/dist/core/a2a-in/webhook.d.ts +6 -0
  213. package/dist/core/a2a-in/webhook.js +80 -0
  214. package/dist/core/a2a-in/webhook.js.map +1 -0
  215. package/dist/core/a2a-out/agent-endpoint.d.ts +10 -0
  216. package/dist/core/a2a-out/agent-endpoint.js +10 -0
  217. package/dist/core/a2a-out/agent-endpoint.js.map +1 -0
  218. package/dist/core/a2a-out/agent-event.d.ts +41 -0
  219. package/dist/core/a2a-out/agent-event.js +64 -0
  220. package/dist/core/a2a-out/agent-event.js.map +1 -0
  221. package/dist/core/a2a-out/agent-message.d.ts +36 -0
  222. package/dist/core/a2a-out/agent-message.js +36 -0
  223. package/dist/core/a2a-out/agent-message.js.map +1 -0
  224. package/dist/core/a2a-out/agent-statement.d.ts +10 -0
  225. package/dist/core/a2a-out/agent-statement.js +45 -0
  226. package/dist/core/a2a-out/agent-statement.js.map +1 -0
  227. package/dist/core/a2a-out/follow-agent-task.d.ts +40 -0
  228. package/dist/core/a2a-out/follow-agent-task.js +125 -0
  229. package/dist/core/a2a-out/follow-agent-task.js.map +1 -0
  230. package/dist/core/a2a-out/hand-a2a-message.d.ts +36 -0
  231. package/dist/core/a2a-out/hand-a2a-message.js +132 -0
  232. package/dist/core/a2a-out/hand-a2a-message.js.map +1 -0
  233. package/dist/core/a2a-out/mark-a2a-agent.d.ts +24 -0
  234. package/dist/core/a2a-out/mark-a2a-agent.js +24 -0
  235. package/dist/core/a2a-out/mark-a2a-agent.js.map +1 -0
  236. package/dist/core/a2a-out/ports.d.ts +200 -0
  237. package/dist/core/a2a-out/ports.js +2 -0
  238. package/dist/core/a2a-out/ports.js.map +1 -0
  239. package/dist/core/a2a-out/read-agent-statement.d.ts +13 -0
  240. package/dist/core/a2a-out/read-agent-statement.js +13 -0
  241. package/dist/core/a2a-out/read-agent-statement.js.map +1 -0
  242. package/dist/core/a2a-out/run-a2a-agent.d.ts +26 -0
  243. package/dist/core/a2a-out/run-a2a-agent.js +46 -0
  244. package/dist/core/a2a-out/run-a2a-agent.js.map +1 -0
  245. package/dist/core/a2a-out/state-a2a-agent.d.ts +26 -0
  246. package/dist/core/a2a-out/state-a2a-agent.js +31 -0
  247. package/dist/core/a2a-out/state-a2a-agent.js.map +1 -0
  248. package/dist/core/mcp-in/call-tool.js +2 -0
  249. package/dist/core/mcp-in/call-tool.js.map +1 -1
  250. package/dist/core/mcp-in/client-call.d.ts +35 -4
  251. package/dist/core/mcp-in/client-call.js +57 -10
  252. package/dist/core/mcp-in/client-call.js.map +1 -1
  253. package/dist/core/mcp-in/collect-replies.d.ts +4 -3
  254. package/dist/core/mcp-in/collect-replies.js +4 -0
  255. package/dist/core/mcp-in/collect-replies.js.map +1 -1
  256. package/dist/core/mcp-in/ports.d.ts +52 -3
  257. package/dist/core/mcp-out/hand-call.d.ts +5 -1
  258. package/dist/core/mcp-out/hand-call.js +9 -1
  259. package/dist/core/mcp-out/hand-call.js.map +1 -1
  260. package/dist/core/mcp-out/run-party.d.ts +29 -7
  261. package/dist/core/mcp-out/run-party.js +14 -6
  262. package/dist/core/mcp-out/run-party.js.map +1 -1
  263. package/dist/core/mcp-out/state-party.d.ts +4 -2
  264. package/dist/core/mcp-out/state-party.js +10 -3
  265. package/dist/core/mcp-out/state-party.js.map +1 -1
  266. package/dist/core/mcp-out/statement.d.ts +2 -1
  267. package/dist/core/mcp-out/statement.js.map +1 -1
  268. package/dist/core/oauth/exchange-id-jag.d.ts +28 -0
  269. package/dist/core/oauth/exchange-id-jag.js +66 -0
  270. package/dist/core/oauth/exchange-id-jag.js.map +1 -0
  271. package/dist/core/oauth/exchange-token.d.ts +25 -11
  272. package/dist/core/oauth/exchange-token.js +50 -3
  273. package/dist/core/oauth/exchange-token.js.map +1 -1
  274. package/dist/core/oauth/ports.d.ts +17 -6
  275. package/dist/core/oauth/register-client.js +1 -1
  276. package/dist/core/oauth/register-client.js.map +1 -1
  277. package/dist/core/parties/add-a2a-agent.d.ts +34 -0
  278. package/dist/core/parties/add-a2a-agent.js +45 -0
  279. package/dist/core/parties/add-a2a-agent.js.map +1 -0
  280. package/dist/core/parties/add-a2a-client.d.ts +30 -0
  281. package/dist/core/parties/add-a2a-client.js +47 -0
  282. package/dist/core/parties/add-a2a-client.js.map +1 -0
  283. package/dist/core/parties/add-client-party.d.ts +38 -0
  284. package/dist/core/parties/add-client-party.js +40 -0
  285. package/dist/core/parties/add-client-party.js.map +1 -0
  286. package/dist/core/parties/approve-party.d.ts +43 -2
  287. package/dist/core/parties/approve-party.js +9 -5
  288. package/dist/core/parties/approve-party.js.map +1 -1
  289. package/dist/core/parties/approver.d.ts +7 -0
  290. package/dist/core/parties/approver.js +9 -0
  291. package/dist/core/parties/approver.js.map +1 -0
  292. package/dist/core/parties/check-server.d.ts +2 -1
  293. package/dist/core/parties/check-server.js +1 -1
  294. package/dist/core/parties/check-server.js.map +1 -1
  295. package/dist/core/parties/crew-party.d.ts +18 -4
  296. package/dist/core/parties/crew-party.js +36 -4
  297. package/dist/core/parties/crew-party.js.map +1 -1
  298. package/dist/core/parties/party.d.ts +23 -1
  299. package/dist/core/parties/party.js +17 -4
  300. package/dist/core/parties/party.js.map +1 -1
  301. package/dist/core/parties/ports.d.ts +16 -0
  302. package/dist/core/parties/read-party-tools.d.ts +4 -3
  303. package/dist/core/parties/read-party-tools.js +4 -2
  304. package/dist/core/parties/read-party-tools.js.map +1 -1
  305. package/dist/core/parties/shown-party.d.ts +8 -0
  306. package/dist/core/parties/shown-party.js +4 -0
  307. package/dist/core/parties/shown-party.js.map +1 -1
  308. package/dist/core/parties/switch-tool.d.ts +29 -0
  309. package/dist/core/parties/switch-tool.js +33 -0
  310. package/dist/core/parties/switch-tool.js.map +1 -0
  311. package/dist/core/parties/tool-switches.d.ts +27 -0
  312. package/dist/core/parties/tool-switches.js +17 -0
  313. package/dist/core/parties/tool-switches.js.map +1 -0
  314. package/dist/core/people/answer-delivery.d.ts +2 -1
  315. package/dist/core/people/answer-delivery.js.map +1 -1
  316. package/dist/core/people/done-delivery.d.ts +2 -1
  317. package/dist/core/people/done-delivery.js.map +1 -1
  318. package/dist/core/people/focus-page.d.ts +18 -0
  319. package/dist/core/people/focus-page.js +20 -0
  320. package/dist/core/people/focus-page.js.map +1 -0
  321. package/dist/core/people/open-delivery.d.ts +3 -1
  322. package/dist/core/people/open-delivery.js +2 -0
  323. package/dist/core/people/open-delivery.js.map +1 -1
  324. package/dist/core/people/opened-of.d.ts +7 -2
  325. package/dist/core/people/opened-of.js +6 -1
  326. package/dist/core/people/opened-of.js.map +1 -1
  327. package/dist/core/people/person-crew.d.ts +2 -0
  328. package/dist/core/people/person-crew.js +6 -2
  329. package/dist/core/people/person-crew.js.map +1 -1
  330. package/dist/core/people/ports.d.ts +151 -3
  331. package/dist/core/people/read-wake-channels.d.ts +42 -0
  332. package/dist/core/people/read-wake-channels.js +21 -0
  333. package/dist/core/people/read-wake-channels.js.map +1 -0
  334. package/dist/core/people/turn-email-channel.d.ts +21 -0
  335. package/dist/core/people/turn-email-channel.js +22 -0
  336. package/dist/core/people/turn-email-channel.js.map +1 -0
  337. package/dist/core/people/turn-off-web-push.d.ts +13 -0
  338. package/dist/core/people/turn-off-web-push.js +14 -0
  339. package/dist/core/people/turn-off-web-push.js.map +1 -0
  340. package/dist/core/people/turn-on-web-push.d.ts +35 -0
  341. package/dist/core/people/turn-on-web-push.js +49 -0
  342. package/dist/core/people/turn-on-web-push.js.map +1 -0
  343. package/dist/core/people/wait-on-person-ship.d.ts +44 -0
  344. package/dist/core/people/wait-on-person-ship.js +92 -0
  345. package/dist/core/people/wait-on-person-ship.js.map +1 -0
  346. package/dist/core/people/wake-person.d.ts +40 -0
  347. package/dist/core/people/wake-person.js +74 -0
  348. package/dist/core/people/wake-person.js.map +1 -0
  349. package/dist/core/people/web-push-channel.d.ts +17 -0
  350. package/dist/core/people/web-push-channel.js +35 -0
  351. package/dist/core/people/web-push-channel.js.map +1 -0
  352. package/dist/core/requests/decide-request.d.ts +0 -2
  353. package/dist/core/requests/decide-request.js +3 -6
  354. package/dist/core/requests/decide-request.js.map +1 -1
  355. package/dist/core/requests/list-to-decide.js +1 -1
  356. package/dist/core/requests/list-to-decide.js.map +1 -1
  357. package/dist/core/shared/errors.d.ts +1 -1
  358. package/dist/core/shared/errors.js.map +1 -1
  359. package/dist/core/sign-in/ports.d.ts +13 -0
  360. package/dist/core/vault/credential.d.ts +6 -2
  361. package/dist/party-workers.d.ts +9 -1
  362. package/dist/party-workers.js +37 -5
  363. package/dist/party-workers.js.map +1 -1
  364. package/dist/person-waiters.d.ts +30 -0
  365. package/dist/person-waiters.js +89 -0
  366. package/dist/person-waiters.js.map +1 -0
  367. package/package.json +7 -3
  368. package/src/adapters/prisma/migrations/20261023120000_party_bearer_hash/migration.sql +4 -0
  369. package/src/adapters/prisma/migrations/20261023130000_client_credentials/migration.sql +5 -0
  370. package/src/adapters/prisma/migrations/20261023200000_a2a_tasks/migration.sql +20 -0
  371. package/src/adapters/prisma/migrations/20261023210000_tool_switches/migration.sql +2 -0
  372. package/src/adapters/prisma/migrations/20261024090000_a2a_pushes/migration.sql +37 -0
  373. package/src/adapters/prisma/migrations/20261024100000_party_is_repeatable/migration.sql +2 -0
  374. package/src/adapters/prisma/migrations/20261024110000_a2a_agent_calls/migration.sql +29 -0
  375. package/src/adapters/prisma/migrations/20261024115000_wakes/migration.sql +17 -0
  376. package/src/adapters/prisma/migrations/20261024120000_focused_pages/migration.sql +11 -0
  377. package/src/adapters/prisma/migrations/20261024130000_web_push_subscriptions/migration.sql +14 -0
  378. package/src/adapters/prisma/schema.prisma +159 -5
  379. package/web/.next/BUILD_ID +1 -1
  380. package/web/.next/app-path-routes-manifest.json +3 -0
  381. package/web/.next/build-manifest.json +27 -3
  382. package/web/.next/diagnostics/route-bundle-stats.json +75 -42
  383. package/web/.next/fallback-build-manifest.json +3 -3
  384. package/web/.next/next-minimal-server.js.nft.json +1 -1
  385. package/web/.next/next-server.js.nft.json +1 -1
  386. package/web/.next/prerender-manifest.json +3 -3
  387. package/web/.next/routes-manifest.json +18 -0
  388. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +23 -3
  389. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +10 -8
  390. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  391. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  392. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +22 -2
  393. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -5
  394. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  395. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  396. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +23 -3
  397. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +9 -6
  398. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  399. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  400. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +26 -6
  401. package/web/.next/server/app/(console)/outside-parties/add/page.js +10 -5
  402. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  403. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  404. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/app-paths-manifest.json +3 -0
  405. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/build-manifest.json +23 -0
  406. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/next-font-manifest.json +11 -0
  407. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/react-loadable-manifest.json +1 -0
  408. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +25 -0
  409. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +20 -0
  410. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.map +5 -0
  411. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -0
  412. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +3 -0
  413. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/app-paths-manifest.json +3 -0
  414. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/build-manifest.json +23 -0
  415. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/next-font-manifest.json +11 -0
  416. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/react-loadable-manifest.json +1 -0
  417. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +25 -0
  418. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +21 -0
  419. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.map +5 -0
  420. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -0
  421. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +3 -0
  422. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  423. package/web/.next/server/app/(console)/outside-parties/page.js +3 -3
  424. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  425. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  426. package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
  427. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  428. package/web/.next/server/app/(console)/overview/focus/route/app-paths-manifest.json +3 -0
  429. package/web/.next/server/app/(console)/overview/focus/route/build-manifest.json +12 -0
  430. package/web/.next/server/app/(console)/overview/focus/route/server-reference-manifest.json +4 -0
  431. package/web/.next/server/app/(console)/overview/focus/route.js +7 -0
  432. package/web/.next/server/app/(console)/overview/focus/route.js.map +5 -0
  433. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -0
  434. package/web/.next/server/app/(console)/overview/focus/route_client-reference-manifest.js +3 -0
  435. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +34 -4
  436. package/web/.next/server/app/(console)/overview/page.js +3 -3
  437. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  438. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  439. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  440. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +2 -2
  441. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  442. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  443. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  444. package/web/.next/server/app/(console)/parties/page.js +2 -2
  445. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  446. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  447. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  448. package/web/.next/server/app/(console)/sign-in/failed/page.js +3 -3
  449. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  450. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  451. package/web/.next/server/app/_global-error/page.js +3 -3
  452. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  453. package/web/.next/server/app/_global-error.html +1 -1
  454. package/web/.next/server/app/_global-error.rsc +1 -1
  455. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  456. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  457. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  458. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  459. package/web/.next/server/app/_not-found/page.js +3 -3
  460. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  461. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  462. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  463. package/web/.next/server/app/authorize/failed/page.js +2 -2
  464. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  465. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  466. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  467. package/web/.next/server/app/authorize/pick/page.js +2 -2
  468. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  469. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  470. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  471. package/web/.next/server/app/authorize/waiting/approval/page.js +2 -2
  472. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  473. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  474. package/web/.next/server/app-paths-manifest.json +3 -0
  475. package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js +3 -0
  476. package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js +3 -0
  477. package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js.map +1 -0
  478. package/web/.next/server/chunks/{[root-of-the-server]__0k8jiujb_0xtx._.js → [root-of-the-server]__0ykc8bq_c06a1._.js} +22 -22
  479. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -0
  480. package/web/.next/server/chunks/_04is-uopj3op9._.js +3 -0
  481. package/web/.next/server/chunks/_04is-uopj3op9._.js.map +1 -0
  482. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js +3 -0
  483. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js.map +1 -0
  484. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +3 -0
  485. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +3 -0
  487. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -0
  488. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +3 -0
  489. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -0
  490. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +3 -0
  491. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -0
  492. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +3 -0
  493. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -0
  494. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  495. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  496. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js → [root-of-the-server]__0-og0bl8lr2xq._.js} +2 -2
  497. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js.map → [root-of-the-server]__0-og0bl8lr2xq._.js.map} +1 -1
  498. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +3 -0
  499. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yydhn6iokbm4._.js.map → [root-of-the-server]__07udzu2zwg_74._.js.map} +1 -1
  500. package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js → [root-of-the-server]__0a68v9ynev4q6._.js} +2 -2
  501. package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js.map → [root-of-the-server]__0a68v9ynev4q6._.js.map} +1 -1
  502. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +4 -0
  503. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -0
  504. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +3 -0
  505. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1vkw2kvzx6fpw._.js.map → [root-of-the-server]__0l2_dk9d4o01n._.js.map} +1 -1
  506. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +3 -0
  507. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +1 -0
  508. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +4 -0
  509. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +1 -0
  510. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +3 -0
  511. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1imel8atfb770._.js.map → [root-of-the-server]__0rr5u24i9tjyc._.js.map} +1 -1
  512. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +1 -1
  513. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +1 -1
  514. package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js +3 -0
  515. package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +1 -0
  516. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +4 -0
  517. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +1 -0
  518. package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js +3 -0
  519. package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js.map +1 -0
  520. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +3 -0
  521. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +1 -0
  522. package/web/.next/server/chunks/ssr/[root-of-the-server]__1m9atpy0vkbmj._.js +3 -0
  523. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0dywrno7zb0r_._.js.map → [root-of-the-server]__1m9atpy0vkbmj._.js.map} +1 -1
  524. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +3 -0
  525. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +1 -0
  526. package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js +3 -0
  527. package/web/.next/server/chunks/ssr/{[root-of-the-server]__216xd8otb96uo._.js.map → [root-of-the-server]__1w5swo8gmjyx6._.js.map} +1 -1
  528. package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js +1 -1
  529. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +3 -0
  530. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +1 -0
  531. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js +3 -0
  532. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -0
  533. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  534. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  535. package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +4 -0
  536. package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  538. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  539. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  540. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  541. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +4 -0
  542. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  544. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  545. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  546. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js +3 -0
  548. package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js.map +1 -0
  549. package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +1 -1
  550. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +1 -1
  551. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +1 -1
  552. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +3 -0
  553. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +1 -0
  554. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +3 -0
  555. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +1 -0
  556. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +1 -1
  557. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +1 -1
  558. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +1 -1
  559. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +1 -1
  560. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +3 -0
  561. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +1 -0
  562. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +3 -0
  563. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js.map +1 -0
  564. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +3 -0
  565. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -0
  566. package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js +1 -1
  567. package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js.map +1 -1
  568. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  569. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  570. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +1 -1
  571. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -1
  572. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +1 -1
  573. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js.map +1 -1
  574. package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js +3 -0
  575. package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js.map +1 -0
  576. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +3 -0
  577. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +1 -0
  578. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +3 -0
  579. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +1 -0
  580. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +3 -0
  581. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +1 -0
  582. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +3 -0
  583. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js.map +1 -0
  584. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +3 -0
  585. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +1 -0
  586. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +3 -0
  587. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +1 -0
  588. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +3 -0
  589. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -0
  590. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +3 -0
  591. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -0
  592. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  593. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  594. package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js +3 -0
  595. package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js.map +1 -0
  596. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +3 -0
  597. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +1 -0
  598. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +3 -0
  599. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -0
  600. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  601. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  602. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  603. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  604. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  605. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  606. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +3 -0
  607. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +1 -0
  608. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +1 -1
  609. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js.map +1 -1
  610. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  611. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
  612. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +3 -0
  613. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -0
  614. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  615. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  616. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  617. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map +1 -1
  618. package/web/.next/server/middleware-build-manifest.js +27 -3
  619. package/web/.next/server/next-font-manifest.js +1 -1
  620. package/web/.next/server/next-font-manifest.json +8 -0
  621. package/web/.next/server/pages/500.html +1 -1
  622. package/web/.next/server/preview-props.json +3 -3
  623. package/web/.next/server/server-reference-manifest.js +1 -1
  624. package/web/.next/server/server-reference-manifest.json +124 -22
  625. package/web/.next/static/chunks/00njqo86bx2kb.js +1 -0
  626. package/web/.next/static/chunks/047i2x2j--shk.css +3 -0
  627. package/web/.next/static/chunks/0g4cpamshfwmn.js +1 -0
  628. package/web/.next/static/chunks/0j84uiid6fsim.js +1 -0
  629. package/web/.next/static/chunks/1aa1d23q1vokr.js +1 -0
  630. package/web/.next/static/chunks/1jvae6c-4jwji.js +1 -0
  631. package/web/.next/static/chunks/23ud2e13dn8f4.js +1 -0
  632. package/web/.next/static/chunks/2_41h3v090ur9.js +1 -0
  633. package/web/.next/static/chunks/31vy122d9fvme.js +1 -0
  634. package/web/.next/static/chunks/3apnqdh48__yw.js +1 -0
  635. package/web/.next/static/chunks/3okm5g88ig1l3.js +1 -0
  636. package/web/.next/trace +1 -1
  637. package/web/.next/trace-build +1 -1
  638. package/web/.next/types/routes.d.ts +5 -2
  639. package/web/.next/types/validator.ts +44 -0
  640. package/web/public/wake-worker.js +17 -0
  641. package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js +0 -3
  642. package/web/.next/server/chunks/[root-of-the-server]__0k8jiujb_0xtx._.js.map +0 -1
  643. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js +0 -3
  644. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js.map +0 -1
  645. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +0 -4
  646. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js.map +0 -1
  647. package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js +0 -3
  648. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js +0 -3
  649. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js.map +0 -1
  650. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js +0 -3
  651. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js.map +0 -1
  652. package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js +0 -3
  653. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js +0 -4
  654. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js.map +0 -1
  655. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js +0 -3
  656. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yydhn6iokbm4._.js +0 -3
  657. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +0 -4
  658. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js.map +0 -1
  659. package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js +0 -3
  660. package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js +0 -4
  661. package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js.map +0 -1
  662. package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js +0 -4
  663. package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js.map +0 -1
  664. package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js +0 -4
  665. package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js.map +0 -1
  666. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js +0 -3
  667. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js.map +0 -1
  668. package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js +0 -3
  669. package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js.map +0 -1
  670. package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js +0 -3
  671. package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js.map +0 -1
  672. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js +0 -3
  673. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js.map +0 -1
  674. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js +0 -3
  675. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js.map +0 -1
  676. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js +0 -3
  677. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js.map +0 -1
  678. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js +0 -3
  679. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js.map +0 -1
  680. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js +0 -3
  681. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js.map +0 -1
  682. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +0 -3
  683. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +0 -1
  684. package/web/.next/static/chunks/1l1gmjf-hz7u_.css +0 -3
  685. package/web/.next/static/chunks/1ma7v1viiz247.js +0 -1
  686. package/web/.next/static/chunks/1tfvu44eel7g5.js +0 -1
  687. package/web/.next/static/chunks/2bg4wnfhuftsq.js +0 -1
  688. package/web/.next/static/chunks/2yplpvvjibfqw.js +0 -1
  689. package/web/.next/static/chunks/34syicr_5c5u1.js +0 -1
  690. package/web/.next/static/chunks/43zbq11isnos4.js +0 -1
  691. /package/web/.next/server/chunks/{[externals]__12s2uxrv8n30f._.js.map → 0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js.map} +0 -0
  692. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_buildManifest.js +0 -0
  693. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_clientMiddlewareManifest.js +0 -0
  694. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgCnE,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqD;IAC5F,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/E,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgH;IAC1I,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uMAAuM;QAClO,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KACrI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiCnE,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqD;IAC5F,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/E,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgH;IAC1I,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uMAAuM;QAClO,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KACrI,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { AccountGrants, Pagasae } from '../sign-in/ports.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type ExchangeToken } from './exchange-token.js';
5
+ import type { IssuedTokens, OAuthClients, OAuthSecrets } from './ports.js';
6
+ /**
7
+ * Use case: a registered client posts the ID-JAG its person's company
8
+ * identity provider issued for the gateway, with the JWT bearer grant (RFC
9
+ * 7523; aeolus-fleet company sign-in design, slice 6, D7, flow 3.2). The
10
+ * gateway federates only through pagasae (decision 0054): it hands the
11
+ * ID-JAG over, and pagasae answers the account's grant in its one fleet,
12
+ * which must be the client's. The grant is kept as after a browser sign-in,
13
+ * and the client gets an access token acting as the account, with no refresh
14
+ * token: when it ends, the client asks its identity provider for a new
15
+ * ID-JAG. Only a client registered for the code flow, with its secret if it
16
+ * has one, posts one; there is no dynamic registration.
17
+ */
18
+ export declare function createExchangeIdJag(deps: {
19
+ clients: OAuthClients;
20
+ tokens: IssuedTokens;
21
+ secrets: OAuthSecrets;
22
+ clock: Clock;
23
+ resource: string;
24
+ pagasae: Pick<Pagasae, 'exchangeIdJag'>;
25
+ grants: Pick<AccountGrants, 'save'>;
26
+ /** Whether the gateway serves the fleet: connected to it, and switched on where an installation switches fleets (decision 0021). */
27
+ servesFleet: (fleetId: FleetId) => Promise<boolean>;
28
+ }): ExchangeToken;
@@ -0,0 +1,66 @@
1
+ import { err, ok } from '../shared/result.js';
2
+ import { ACCESS_TOKEN_LIFETIME_MS } from './exchange-token.js';
3
+ const MS_PER_SECOND = 1000;
4
+ /** What a client is told when pagasae refuses its ID-JAG: the one refusal it can act on is D9's. */
5
+ const REFUSED_ID_JAG = 'The ID-JAG was refused. ID-JAG is only available for accounts in one fleet: an account in several signs in at the gateway’s address to choose one';
6
+ function refusal(error, description) {
7
+ return err({ error, description });
8
+ }
9
+ /**
10
+ * Use case: a registered client posts the ID-JAG its person's company
11
+ * identity provider issued for the gateway, with the JWT bearer grant (RFC
12
+ * 7523; aeolus-fleet company sign-in design, slice 6, D7, flow 3.2). The
13
+ * gateway federates only through pagasae (decision 0054): it hands the
14
+ * ID-JAG over, and pagasae answers the account's grant in its one fleet,
15
+ * which must be the client's. The grant is kept as after a browser sign-in,
16
+ * and the client gets an access token acting as the account, with no refresh
17
+ * token: when it ends, the client asks its identity provider for a new
18
+ * ID-JAG. Only a client registered for the code flow, with its secret if it
19
+ * has one, posts one; there is no dynamic registration.
20
+ */
21
+ export function createExchangeIdJag(deps) {
22
+ return async (request) => {
23
+ const client = request.client_id === undefined ? undefined : await deps.clients.find(request.client_id);
24
+ const isAuthentic = client !== undefined && (client.secretHash === null ? request.client_secret === undefined : request.client_secret !== undefined && deps.secrets.hashOf(request.client_secret) === client.secretHash);
25
+ if (client === undefined || !isAuthentic) {
26
+ return refusal('invalid_client', 'The client could not be authenticated: an ID-JAG needs a registered client');
27
+ }
28
+ if (client.grant !== 'authorizationCode') {
29
+ return refusal('unauthorized_client', 'This client signs in by client credentials');
30
+ }
31
+ if (request.assertion === undefined || request.assertion === '') {
32
+ return refusal('invalid_request', 'The ID-JAG is required as the assertion');
33
+ }
34
+ if (request.resource !== undefined && request.resource !== deps.resource) {
35
+ return refusal('invalid_target', `The resource must be ${deps.resource}`);
36
+ }
37
+ const handed = await deps.pagasae.exchangeIdJag({ idJag: request.assertion, clientId: client.clientId });
38
+ if (!handed.isOk) {
39
+ return handed.error.kind === 'unavailable' ? refusal('temporarily_unavailable', 'pagasae did not answer; try again') : refusal('invalid_grant', REFUSED_ID_JAG);
40
+ }
41
+ const { fleetId, accountId, personShipId, scopes, refreshToken, accountToken, accountTokenExpiresAt } = handed.value;
42
+ if (fleetId !== client.fleetId || !(await deps.servesFleet(fleetId))) {
43
+ return refusal('invalid_grant', `The account's fleet is not ${client.name}'s`);
44
+ }
45
+ const grantId = deps.secrets.newSecret();
46
+ await deps.grants.save({ grantId, fleetId, accountId, personShipId, scopes, refreshToken, accountToken, accountTokenExpiresAt });
47
+ const accessToken = deps.secrets.newSecret();
48
+ const accessHash = deps.secrets.hashOf(accessToken);
49
+ await deps.tokens.save({
50
+ familyId: accessHash,
51
+ codeHash: null,
52
+ fleetId,
53
+ clientId: client.clientId,
54
+ resource: deps.resource,
55
+ scope: null,
56
+ kind: 'account',
57
+ grantId,
58
+ accessHash,
59
+ accessExpiresAt: new Date(deps.clock.now().getTime() + ACCESS_TOKEN_LIFETIME_MS),
60
+ refreshHash: null,
61
+ refreshExpiresAt: null,
62
+ });
63
+ return ok({ accessToken, refreshToken: null, expiresInSeconds: ACCESS_TOKEN_LIFETIME_MS / MS_PER_SECOND, scope: null });
64
+ };
65
+ }
66
+ //# sourceMappingURL=exchange-id-jag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-id-jag.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-id-jag.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,46 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { PartyStore } from '../parties/ports.js';
1
3
  import type { Clock } from '../shared/clock.js';
2
4
  import { type Result } from '../shared/result.js';
3
5
  import type { AuthorizationCodes, IssuedTokens, OAuthClients, OAuthError, OAuthSecrets } from './ports.js';
4
6
  /** An access token works one hour; its refresh token 30 days (orchestrator-1 on aeolus-fleet#877, Q13). */
5
7
  export declare const ACCESS_TOKEN_LIFETIME_MS: number;
6
8
  export declare const REFRESH_TOKEN_LIFETIME_MS: number;
7
- /** The tokens a client gets. */
9
+ /** The JWT bearer grant (RFC 7523), with which a client posts an ID-JAG. */
10
+ export declare const JWT_BEARER_GRANT = "urn:ietf:params:oauth:grant-type:jwt-bearer";
11
+ /** The tokens a client gets: no refresh token for one signed in by client credentials, which asks again. */
8
12
  export interface IssuedPair {
9
13
  readonly accessToken: string;
10
- readonly refreshToken: string;
14
+ readonly refreshToken: string | null;
11
15
  readonly expiresInSeconds: number;
12
16
  readonly scope: string | null;
13
17
  }
14
18
  /** A token request's parameters, the client's credentials among them, however it sent them. */
15
19
  export type TokenRequest = Readonly<Record<string, string | undefined>>;
16
20
  export type ExchangeToken = (request: TokenRequest) => Promise<Result<IssuedPair, OAuthError>>;
21
+ interface ExchangeTokenDeps {
22
+ clients: OAuthClients;
23
+ codes: AuthorizationCodes;
24
+ tokens: IssuedTokens;
25
+ secrets: OAuthSecrets;
26
+ clock: Clock;
27
+ resource: string;
28
+ /** The parties argo's approvers added: a client signed in by client credentials is one. */
29
+ parties: Pick<PartyStore, 'findByClient'>;
30
+ /** Whether the fleet's outside parties are on (interop I-3). */
31
+ servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
32
+ /** A client's ID-JAG, the JWT bearer grant (company sign-in design, slice 6); absent where nobody signs in through pagasae. */
33
+ exchangeIdJag?: ExchangeToken;
34
+ }
17
35
  /**
18
36
  * Use case: a client takes its code for tokens, or refreshes them (OAuth
19
37
  * 2.1). A confidential client proves its secret; a public one, or one known
20
38
  * by its metadata document, needs none, as PKCE binds the code to it. A code
21
39
  * is taken once: a second try revokes every token it gave. A refresh token
22
40
  * is taken once too: the pair rotates, and a rotated one coming again
23
- * revokes its whole family.
41
+ * revokes its whole family. A client party with no human at the authorize
42
+ * step signs in by its client credentials alone (vendor platforms V4): an
43
+ * access token for its party, and no refresh token, as it asks again.
24
44
  */
25
- export declare function createExchangeToken(deps: {
26
- clients: OAuthClients;
27
- codes: AuthorizationCodes;
28
- tokens: IssuedTokens;
29
- secrets: OAuthSecrets;
30
- clock: Clock;
31
- resource: string;
32
- }): ExchangeToken;
45
+ export declare function createExchangeToken(deps: ExchangeTokenDeps): ExchangeToken;
46
+ export {};
@@ -3,6 +3,8 @@ import { holderOf } from './authenticate-access-token.js';
3
3
  /** An access token works one hour; its refresh token 30 days (orchestrator-1 on aeolus-fleet#877, Q13). */
4
4
  export const ACCESS_TOKEN_LIFETIME_MS = 60 * 60_000;
5
5
  export const REFRESH_TOKEN_LIFETIME_MS = 30 * 24 * 60 * 60_000;
6
+ /** The JWT bearer grant (RFC 7523), with which a client posts an ID-JAG. */
7
+ export const JWT_BEARER_GRANT = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
6
8
  const MS_PER_SECOND = 1000;
7
9
  function refusal(error, description) {
8
10
  return err({ error, description });
@@ -13,7 +15,9 @@ function refusal(error, description) {
13
15
  * by its metadata document, needs none, as PKCE binds the code to it. A code
14
16
  * is taken once: a second try revokes every token it gave. A refresh token
15
17
  * is taken once too: the pair rotates, and a rotated one coming again
16
- * revokes its whole family.
18
+ * revokes its whole family. A client party with no human at the authorize
19
+ * step signs in by its client credentials alone (vendor platforms V4): an
20
+ * access token for its party, and no refresh token, as it asks again.
17
21
  */
18
22
  export function createExchangeToken(deps) {
19
23
  /** The client is who it says, as far as it has a secret. */
@@ -41,6 +45,43 @@ export function createExchangeToken(deps) {
41
45
  });
42
46
  return { accessToken, refreshToken, expiresInSeconds: ACCESS_TOKEN_LIFETIME_MS / MS_PER_SECOND, scope: from.scope };
43
47
  };
48
+ const fromClientCredentials = async (request) => {
49
+ const client = request.client_id === undefined ? undefined : await deps.clients.find(request.client_id);
50
+ const isAuthentic = client?.secretHash != null && request.client_secret !== undefined && deps.secrets.hashOf(request.client_secret) === client.secretHash;
51
+ if (client === undefined || !isAuthentic) {
52
+ return refusal('invalid_client', 'The client could not be authenticated');
53
+ }
54
+ if (client.grant !== 'clientCredentials') {
55
+ return refusal('unauthorized_client', 'This client signs in by authorization code');
56
+ }
57
+ const party = await deps.parties.findByClient(client.fleetId, client.clientId);
58
+ if (party === undefined) {
59
+ return refusal('invalid_client', 'The client could not be authenticated');
60
+ }
61
+ if (!(await deps.servesOutsideParties(client.fleetId))) {
62
+ return refusal('unauthorized_client', "This fleet's outside parties are off");
63
+ }
64
+ if (request.resource !== deps.resource) {
65
+ return refusal('invalid_target', `The resource must be ${deps.resource}`);
66
+ }
67
+ const accessToken = deps.secrets.newSecret();
68
+ const accessHash = deps.secrets.hashOf(accessToken);
69
+ await deps.tokens.save({
70
+ familyId: accessHash,
71
+ codeHash: null,
72
+ fleetId: client.fleetId,
73
+ clientId: client.clientId,
74
+ resource: deps.resource,
75
+ scope: null,
76
+ kind: 'party',
77
+ party: party.name,
78
+ accessHash,
79
+ accessExpiresAt: new Date(deps.clock.now().getTime() + ACCESS_TOKEN_LIFETIME_MS),
80
+ refreshHash: null,
81
+ refreshExpiresAt: null,
82
+ });
83
+ return ok({ accessToken, refreshToken: null, expiresInSeconds: ACCESS_TOKEN_LIFETIME_MS / MS_PER_SECOND, scope: null });
84
+ };
44
85
  const fromCode = async (request) => {
45
86
  const { code, code_verifier: verifier } = request;
46
87
  if (code === undefined || verifier === undefined) {
@@ -74,7 +115,7 @@ export function createExchangeToken(deps) {
74
115
  }
75
116
  const refreshHash = deps.secrets.hashOf(request.refresh_token);
76
117
  const pair = await deps.tokens.findByRefresh(refreshHash);
77
- if (!pair || pair.clientId !== request.client_id || pair.refreshExpiresAt.getTime() <= deps.clock.now().getTime() || pair.state === 'revoked') {
118
+ if (!pair || pair.clientId !== request.client_id || pair.refreshExpiresAt === null || pair.refreshExpiresAt.getTime() <= deps.clock.now().getTime() || pair.state === 'revoked') {
78
119
  return refusal('invalid_grant', 'No such refresh token for this client, or it expired');
79
120
  }
80
121
  if (!(await deps.tokens.rotate(refreshHash))) {
@@ -86,8 +127,14 @@ export function createExchangeToken(deps) {
86
127
  };
87
128
  return async (request) => {
88
129
  const grantType = request.grant_type;
130
+ if (grantType === 'client_credentials') {
131
+ return fromClientCredentials(request);
132
+ }
133
+ if (grantType === JWT_BEARER_GRANT && deps.exchangeIdJag !== undefined) {
134
+ return deps.exchangeIdJag(request);
135
+ }
89
136
  if (grantType !== 'authorization_code' && grantType !== 'refresh_token') {
90
- return refusal('unsupported_grant_type', 'Only authorization_code and refresh_token are served');
137
+ return refusal('unsupported_grant_type', 'Only authorization_code, refresh_token, client_credentials and, where people sign in, the JWT bearer grant are served');
91
138
  }
92
139
  if (!(await isAuthenticated(request))) {
93
140
  return refusal('invalid_client', 'The client could not be authenticated');
@@ -1 +1 @@
1
- {"version":3,"file":"exchange-token.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exchange-token.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-token.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,20 @@
5
5
  */
6
6
  import type { FleetId } from '@aeolus-fleet/common';
7
7
  import type { Result } from '../shared/result.js';
8
- /** A client argo pre-registered for its fleet. A confidential one has a secret, kept only as its hash. */
8
+ /**
9
+ * How a client signs in: by a code a person's approval issued, or, with no
10
+ * human at the authorize step, by its own client credentials (vendor
11
+ * platforms V4).
12
+ */
13
+ export type ClientGrant = 'authorizationCode' | 'clientCredentials';
14
+ /** A client registered for its fleet. A confidential one has a secret, kept only as its hash. */
9
15
  export interface OAuthClient {
10
16
  readonly clientId: string;
11
17
  readonly fleetId: FleetId;
12
18
  readonly name: string;
13
19
  readonly redirectUris: readonly string[];
14
20
  readonly secretHash: string | null;
21
+ readonly grant: ClientGrant;
15
22
  }
16
23
  export interface OAuthClients {
17
24
  find(clientId: string): Promise<OAuthClient | undefined>;
@@ -55,18 +62,22 @@ export interface AuthorizationCodes {
55
62
  wasUsed: boolean;
56
63
  } | undefined>;
57
64
  }
58
- /** An access token and its refresh token, issued together; a family is every pair one code led to. */
65
+ /**
66
+ * An access token and its refresh token, issued together; a family is every
67
+ * pair one code led to. A client signed in by client credentials gets its
68
+ * access token alone, from no code.
69
+ */
59
70
  export type TokenPair = {
60
71
  readonly familyId: string;
61
- readonly codeHash: string;
72
+ readonly codeHash: string | null;
62
73
  readonly fleetId: FleetId;
63
74
  readonly clientId: string;
64
75
  readonly resource: string;
65
76
  readonly scope: string | null;
66
77
  readonly accessHash: string;
67
78
  readonly accessExpiresAt: Date;
68
- readonly refreshHash: string;
69
- readonly refreshExpiresAt: Date;
79
+ readonly refreshHash: string | null;
80
+ readonly refreshExpiresAt: Date | null;
70
81
  } & TokenHolder;
71
82
  export interface IssuedTokens {
72
83
  /** A new pair, active. */
@@ -98,7 +109,7 @@ export interface OAuthSecrets {
98
109
  challengeOf(verifier: string): string;
99
110
  }
100
111
  /** OAuth's error codes the gateway answers (RFC 6749, RFC 8707). */
101
- export type OAuthErrorCode = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'unsupported_grant_type' | 'unsupported_response_type' | 'invalid_target' | 'access_denied';
112
+ export type OAuthErrorCode = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'unauthorized_client' | 'unsupported_grant_type' | 'unsupported_response_type' | 'invalid_target' | 'access_denied' | 'temporarily_unavailable';
102
113
  export interface OAuthError {
103
114
  readonly error: OAuthErrorCode;
104
115
  readonly description: string;
@@ -13,7 +13,7 @@ export function createRegisterClient(deps) {
13
13
  }
14
14
  const clientId = `client-${deps.secrets.newSecret()}`;
15
15
  const clientSecret = isConfidential ? deps.secrets.newSecret() : null;
16
- await deps.clients.save({ clientId, fleetId, name, redirectUris: [...redirectUris], secretHash: clientSecret === null ? null : deps.secrets.hashOf(clientSecret) });
16
+ await deps.clients.save({ clientId, fleetId, name, redirectUris: [...redirectUris], secretHash: clientSecret === null ? null : deps.secrets.hashOf(clientSecret), grant: 'authorizationCode' });
17
17
  return ok({ clientId, clientSecret });
18
18
  };
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"register-client.js","sourceRoot":"","sources":["../../../src/core/oauth/register-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AASrE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAsD;IACzF,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/G,OAAO,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,MAAM,CAAC,iBAAiB,CAAC,uEAAuE,CAAC,CAAC;QACtK,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpK,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"register-client.js","sourceRoot":"","sources":["../../../src/core/oauth/register-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AASrE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAsD;IACzF,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,iBAAiB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/G,OAAO,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,MAAM,CAAC,iBAAiB,CAAC,uEAAuE,CAAC,CAAC;QACtK,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChM,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { Actor } from '../actors/authenticate-actor.js';
3
+ import type { AgentCards } from '../a2a-out/ports.js';
4
+ import type { CallTiming } from '../mcp-out/statement.js';
5
+ import { type DomainError } from '../shared/errors.js';
6
+ import type { Result } from '../shared/result.js';
7
+ import type { McpServerCredential } from '../vault/credential.js';
8
+ import { type ApprovalDeps, type ApprovePartyRefusal } from './approve-party.js';
9
+ import type { ShownParty } from './shown-party.js';
10
+ export type AddA2aAgentRefusal = ApprovePartyRefusal | DomainError<'NOT_AN_APPROVER' | 'SCOPE_NOT_HELD' | 'CARD_UNREACHABLE' | 'CARD_INVALID'>;
11
+ export type AddA2aAgent = (input: {
12
+ actor: Actor;
13
+ requestId: string;
14
+ name: string;
15
+ cardUrl: string;
16
+ credential: McpServerCredential;
17
+ concurrencyLimit: number;
18
+ ownerShipId: ShipId;
19
+ scopes: readonly string[];
20
+ }) => Promise<Result<ShownParty, AddA2aAgentRefusal>>;
21
+ /**
22
+ * Use case: an actor holding gateway:approve adds an outside A2A agent by
23
+ * its card address (slice 5). The gateway reads the card first: one that
24
+ * does not answer, is no AgentCard or makes no valid statement is not
25
+ * added, and nothing is commissioned. Then it commissions and crews an
26
+ * `a2a-agent` proxy ship with the owner and only scopes the approver holds,
27
+ * as every approval does, keeps the credential in the vault, and writes the
28
+ * card's domain as the fact it checked. The agent is repeatable, A2A's
29
+ * default (A9). Its statement is written once its worker starts.
30
+ */
31
+ export declare function createAddA2aAgent(deps: ApprovalDeps & {
32
+ cards: AgentCards;
33
+ timing: CallTiming;
34
+ }): AddA2aAgent;
@@ -0,0 +1,45 @@
1
+ import { readAgentStatement } from '../a2a-out/read-agent-statement.js';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
4
+ import { A2A_AGENT_SHIP_TYPE, approved, UNCOMMISSIONED } from './approve-party.js';
5
+ /**
6
+ * Use case: an actor holding gateway:approve adds an outside A2A agent by
7
+ * its card address (slice 5). The gateway reads the card first: one that
8
+ * does not answer, is no AgentCard or makes no valid statement is not
9
+ * added, and nothing is commissioned. Then it commissions and crews an
10
+ * `a2a-agent` proxy ship with the owner and only scopes the approver holds,
11
+ * as every approval does, keeps the credential in the vault, and writes the
12
+ * card's domain as the fact it checked. The agent is repeatable, A2A's
13
+ * default (A9). Its statement is written once its worker starts.
14
+ */
15
+ export function createAddA2aAgent(deps) {
16
+ return async ({ actor, requestId, name, cardUrl, credential, concurrencyLimit, ownerShipId, scopes }) => {
17
+ if (!actor.scopes.includes(APPROVING_SCOPE)) {
18
+ return refuse('NOT_AN_APPROVER', `Adding an outside A2A agent needs ${APPROVING_SCOPE}`);
19
+ }
20
+ const notHeld = scopeNotHeld(actor, scopes);
21
+ if (notHeld !== undefined) {
22
+ return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
23
+ }
24
+ const { fleetId } = actor;
25
+ if (!(await deps.servesOutsideParties(fleetId))) {
26
+ return refuse('OUTSIDE_PARTIES_OFF', "This fleet's outside parties are off: turn them on first");
27
+ }
28
+ const statement = await readAgentStatement(deps, { name, cardUrl, isRepeatable: true });
29
+ if (!statement.isOk) {
30
+ return statement;
31
+ }
32
+ const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
33
+ const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, cardUrl, credential, concurrencyLimit, ownerShipId, granted]));
34
+ return approved(deps, {
35
+ fleetId,
36
+ type: A2A_AGENT_SHIP_TYPE,
37
+ scopes: granted,
38
+ requestHash,
39
+ owner: ownerShipId,
40
+ party: ({ approvedAt }) => ({ fleetId, name, kind: 'a2aAgent', cardUrl, credential, concurrencyLimit, isRepeatable: true, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
41
+ isOwn: (earlier) => earlier.kind === 'a2aAgent',
42
+ });
43
+ };
44
+ }
45
+ //# sourceMappingURL=add-a2a-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-a2a-agent.js","sourceRoot":"","sources":["../../../src/core/parties/add-a2a-agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAC;AAiBhI;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8D;IAC9F,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QACtG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,eAAe,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACrI,OAAO,QAAQ,CAAgB,IAAI,EAAE;YACnC,OAAO;YACP,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,OAAO;YACf,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAClL,KAAK,EAAE,CAAC,OAAO,EAA4B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;SAC1E,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { Actor } from '../actors/authenticate-actor.js';
3
+ import type { OAuthSecrets } from '../oauth/ports.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import { type ApprovalDeps, type ApprovePartyRefusal } from './approve-party.js';
7
+ import type { ShownParty } from './shown-party.js';
8
+ export type AddA2aClientRefusal = ApprovePartyRefusal | DomainError<'NOT_AN_APPROVER' | 'SCOPE_NOT_HELD'>;
9
+ export type AddA2aClient = (input: {
10
+ actor: Actor;
11
+ requestId: string;
12
+ name: string;
13
+ ownerShipId: ShipId;
14
+ scopes: readonly string[];
15
+ }) => Promise<Result<{
16
+ party: ShownParty;
17
+ bearer: string;
18
+ }, AddA2aClientRefusal>>;
19
+ /**
20
+ * Use case: an actor holding gateway:approve adds an outside A2A client
21
+ * (decision 0060). An A2A client is a machine with no browser, so nobody
22
+ * requests it: the approver names it, its owner and its scopes, only ones
23
+ * it holds. The gateway commissions and crews an `a2a-client` proxy ship as
24
+ * every approval does, then shows a new bearer once and keeps only its
25
+ * hash. The same request again, after an answer that was lost, shows a new
26
+ * bearer in place of the first, so the approver is never left without one.
27
+ */
28
+ export declare function createAddA2aClient(deps: ApprovalDeps & {
29
+ secrets: Pick<OAuthSecrets, 'newSecret' | 'hashOf'>;
30
+ }): AddA2aClient;
@@ -0,0 +1,47 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
4
+ import { A2A_CLIENT_SHIP_TYPE, approved, UNCOMMISSIONED } from './approve-party.js';
5
+ /**
6
+ * Use case: an actor holding gateway:approve adds an outside A2A client
7
+ * (decision 0060). An A2A client is a machine with no browser, so nobody
8
+ * requests it: the approver names it, its owner and its scopes, only ones
9
+ * it holds. The gateway commissions and crews an `a2a-client` proxy ship as
10
+ * every approval does, then shows a new bearer once and keeps only its
11
+ * hash. The same request again, after an answer that was lost, shows a new
12
+ * bearer in place of the first, so the approver is never left without one.
13
+ */
14
+ export function createAddA2aClient(deps) {
15
+ return async ({ actor, requestId, name, ownerShipId, scopes }) => {
16
+ if (!actor.scopes.includes(APPROVING_SCOPE)) {
17
+ return refuse('NOT_AN_APPROVER', `Adding an outside A2A client needs ${APPROVING_SCOPE}`);
18
+ }
19
+ const notHeld = scopeNotHeld(actor, scopes);
20
+ if (notHeld !== undefined) {
21
+ return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
22
+ }
23
+ const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
24
+ const { fleetId } = actor;
25
+ const requestHash = deps.hasher.hash(JSON.stringify([requestId, name, ownerShipId, granted]));
26
+ const party = await approved(deps, {
27
+ fleetId,
28
+ type: A2A_CLIENT_SHIP_TYPE,
29
+ scopes: granted,
30
+ requestHash,
31
+ owner: ownerShipId,
32
+ party: ({ approvedAt }) => ({ fleetId, name, kind: 'a2aClient', bearerHash: null, ...UNCOMMISSIONED, requestId, requestHash, approvedAt }),
33
+ isOwn: (earlier) => earlier.kind === 'a2aClient',
34
+ });
35
+ if (!party.isOk) {
36
+ return party;
37
+ }
38
+ const kept = await deps.parties.find(fleetId, name);
39
+ if (kept?.kind !== 'a2aClient') {
40
+ return refuse('PARTY_EXISTS', `A party named ${name} was approved already`);
41
+ }
42
+ const bearer = deps.secrets.newSecret();
43
+ await deps.parties.save({ ...kept, bearerHash: deps.secrets.hashOf(bearer) });
44
+ return ok({ party: party.value, bearer });
45
+ };
46
+ }
47
+ //# sourceMappingURL=add-a2a-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-a2a-client.js","sourceRoot":"","sources":["../../../src/core/parties/add-a2a-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAC;AAcjI;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA4E;IAC7G,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,eAAe,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAiB,IAAI,EAAE;YACjD,OAAO;YACP,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,OAAO;YACf,WAAW;YACX,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAC1I,KAAK,EAAE,CAAC,OAAO,EAA6B,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;SAC5E,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,cAAc,EAAE,iBAAiB,IAAI,uBAAuB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { Actor } from '../actors/authenticate-actor.js';
3
+ import type { OAuthClients, OAuthSecrets } from '../oauth/ports.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { ApproveClientParty, ApprovePartyRefusal } from './approve-party.js';
7
+ import type { PartyStore } from './ports.js';
8
+ import type { ShownParty } from './shown-party.js';
9
+ export type AddClientPartyRefusal = DomainError<'NOT_AN_APPROVER' | 'SCOPE_NOT_HELD' | 'CLIENT_HAS_PARTY'> | ApprovePartyRefusal;
10
+ /** A client party as its approver reads it once: its client id, and its secret only when this call crewed its proxy ship. */
11
+ export interface AddedClientParty {
12
+ readonly party: ShownParty;
13
+ readonly clientId: string;
14
+ readonly clientSecret: string | null;
15
+ }
16
+ export type AddClientParty = (input: {
17
+ actor: Actor;
18
+ requestId: string;
19
+ name: string;
20
+ ownerShipId: ShipId;
21
+ scopes: readonly string[];
22
+ }) => Promise<Result<AddedClientParty, AddClientPartyRefusal>>;
23
+ /**
24
+ * Use case: an actor holding gateway:approve adds a client party with no
25
+ * human at the authorize step (vendor platforms V4): its name, its owner and
26
+ * scopes, only scopes it holds. The gateway commissions and crews its
27
+ * mcp-client proxy ship as for any client party, the same request again
28
+ * picking up where the last one stopped. Its OAuth client signs in by client
29
+ * credentials, with no redirect URI. Its secret is answered once, when this
30
+ * call crews the proxy ship, and kept only as its hash; a party left
31
+ * awaiting crew gets its secret when parties.crew crews it.
32
+ */
33
+ export declare function createAddClientParty(deps: {
34
+ parties: Pick<PartyStore, 'find'>;
35
+ approveClientParty: ApproveClientParty;
36
+ clients: OAuthClients;
37
+ secrets: OAuthSecrets;
38
+ }): AddClientParty;
@@ -0,0 +1,40 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from './approver.js';
4
+ /**
5
+ * Use case: an actor holding gateway:approve adds a client party with no
6
+ * human at the authorize step (vendor platforms V4): its name, its owner and
7
+ * scopes, only scopes it holds. The gateway commissions and crews its
8
+ * mcp-client proxy ship as for any client party, the same request again
9
+ * picking up where the last one stopped. Its OAuth client signs in by client
10
+ * credentials, with no redirect URI. Its secret is answered once, when this
11
+ * call crews the proxy ship, and kept only as its hash; a party left
12
+ * awaiting crew gets its secret when parties.crew crews it.
13
+ */
14
+ export function createAddClientParty(deps) {
15
+ return async ({ actor, requestId, name, ownerShipId, scopes }) => {
16
+ if (!actor.scopes.includes(APPROVING_SCOPE)) {
17
+ return refuse('NOT_AN_APPROVER', `Adding a client party needs ${APPROVING_SCOPE}`);
18
+ }
19
+ const notHeld = scopeNotHeld(actor, scopes);
20
+ if (notHeld !== undefined) {
21
+ return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
22
+ }
23
+ const earlier = await deps.parties.find(actor.fleetId, name);
24
+ // The same request again keeps its client id; a new one is told apart by its request id.
25
+ const clientId = earlier?.kind === 'mcpClient' ? earlier.clientId : `client-${deps.secrets.newSecret()}`;
26
+ const granted = scopes.filter((scope) => !EVERY_APP_SHIP_SCOPES.has(scope));
27
+ const approved = await deps.approveClientParty({ operatorFleetId: actor.fleetId, requestId, name, clientId, ownerShipId, scopes: granted });
28
+ if (!approved.isOk) {
29
+ return approved;
30
+ }
31
+ const party = approved.value;
32
+ if (earlier?.state === 'crewed') {
33
+ return ok({ party, clientId, clientSecret: null });
34
+ }
35
+ const clientSecret = party.state === 'crewed' ? deps.secrets.newSecret() : null;
36
+ await deps.clients.save({ clientId, fleetId: actor.fleetId, name, redirectUris: [], secretHash: clientSecret === null ? null : deps.secrets.hashOf(clientSecret), grant: 'clientCredentials' });
37
+ return ok({ party, clientId, clientSecret });
38
+ };
39
+ }
40
+ //# sourceMappingURL=add-client-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-client-party.js","sourceRoot":"","sources":["../../../src/core/parties/add-client-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAerF;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAKpC;IACC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,eAAe,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7D,yFAAyF;QACzF,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACzG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5I,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,IAAI,OAAO,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAChM,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}