@aeolus-fleet/gateway 0.0.0-stage → 0.0.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 (474) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +104 -2
  3. package/dist/adapters/crypto/call-keys.d.ts +7 -0
  4. package/dist/adapters/crypto/call-keys.js +18 -0
  5. package/dist/adapters/crypto/call-keys.js.map +1 -0
  6. package/dist/adapters/crypto/oauth-secrets.d.ts +3 -0
  7. package/dist/adapters/crypto/oauth-secrets.js +10 -0
  8. package/dist/adapters/crypto/oauth-secrets.js.map +1 -0
  9. package/dist/adapters/crypto/request-hasher.d.ts +3 -0
  10. package/dist/adapters/crypto/request-hasher.js +4 -0
  11. package/dist/adapters/crypto/request-hasher.js.map +1 -0
  12. package/dist/adapters/crypto/request-ids.d.ts +4 -0
  13. package/dist/adapters/crypto/request-ids.js +14 -0
  14. package/dist/adapters/crypto/request-ids.js.map +1 -0
  15. package/dist/adapters/crypto/sealer.d.ts +14 -0
  16. package/dist/adapters/crypto/sealer.js +41 -0
  17. package/dist/adapters/crypto/sealer.js.map +1 -0
  18. package/dist/adapters/crypto/ship-aliases.d.ts +7 -0
  19. package/dist/adapters/crypto/ship-aliases.js +19 -0
  20. package/dist/adapters/crypto/ship-aliases.js.map +1 -0
  21. package/dist/adapters/crypto/sign-in-seals.d.ts +7 -0
  22. package/dist/adapters/crypto/sign-in-seals.js +27 -0
  23. package/dist/adapters/crypto/sign-in-seals.js.map +1 -0
  24. package/dist/adapters/crypto/waiting-seals.d.ts +3 -0
  25. package/dist/adapters/crypto/waiting-seals.js +24 -0
  26. package/dist/adapters/crypto/waiting-seals.js.map +1 -0
  27. package/dist/adapters/fleet/console-sessions.d.ts +2 -0
  28. package/dist/adapters/fleet/console-sessions.js +23 -0
  29. package/dist/adapters/fleet/console-sessions.js.map +1 -0
  30. package/dist/adapters/fleet/core-version.d.ts +11 -0
  31. package/dist/adapters/fleet/core-version.js +59 -0
  32. package/dist/adapters/fleet/core-version.js.map +1 -0
  33. package/dist/adapters/fleet/fleet-network.d.ts +2 -0
  34. package/dist/adapters/fleet/fleet-network.js +44 -0
  35. package/dist/adapters/fleet/fleet-network.js.map +1 -0
  36. package/dist/adapters/fleet/rest-fleet-door.d.ts +14 -0
  37. package/dist/adapters/fleet/rest-fleet-door.js +189 -0
  38. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -0
  39. package/dist/adapters/http/html.d.ts +15 -0
  40. package/dist/adapters/http/html.js +53 -0
  41. package/dist/adapters/http/html.js.map +1 -0
  42. package/dist/adapters/http/live.d.ts +29 -0
  43. package/dist/adapters/http/live.js +100 -0
  44. package/dist/adapters/http/live.js.map +1 -0
  45. package/dist/adapters/http/mcp-endpoint.d.ts +20 -0
  46. package/dist/adapters/http/mcp-endpoint.js +164 -0
  47. package/dist/adapters/http/mcp-endpoint.js.map +1 -0
  48. package/dist/adapters/http/mcp-task.d.ts +45 -0
  49. package/dist/adapters/http/mcp-task.js +35 -0
  50. package/dist/adapters/http/mcp-task.js.map +1 -0
  51. package/dist/adapters/http/oauth-routes.d.ts +35 -0
  52. package/dist/adapters/http/oauth-routes.js +305 -0
  53. package/dist/adapters/http/oauth-routes.js.map +1 -0
  54. package/dist/adapters/http/outside-parties-page.d.ts +6 -0
  55. package/dist/adapters/http/outside-parties-page.js +149 -0
  56. package/dist/adapters/http/outside-parties-page.js.map +1 -0
  57. package/dist/adapters/http/overview-page.d.ts +16 -0
  58. package/dist/adapters/http/overview-page.js +255 -0
  59. package/dist/adapters/http/overview-page.js.map +1 -0
  60. package/dist/adapters/http/parties-page.d.ts +6 -0
  61. package/dist/adapters/http/parties-page.js +141 -0
  62. package/dist/adapters/http/parties-page.js.map +1 -0
  63. package/dist/adapters/http/person-tools.d.ts +22 -0
  64. package/dist/adapters/http/person-tools.js +98 -0
  65. package/dist/adapters/http/person-tools.js.map +1 -0
  66. package/dist/adapters/http/signal.d.ts +52 -0
  67. package/dist/adapters/http/signal.js +220 -0
  68. package/dist/adapters/http/signal.js.map +1 -0
  69. package/dist/adapters/http/version.d.ts +6 -0
  70. package/dist/adapters/http/version.js +12 -0
  71. package/dist/adapters/http/version.js.map +1 -0
  72. package/dist/adapters/mcp/mcp-servers.d.ts +2 -0
  73. package/dist/adapters/mcp/mcp-servers.js +154 -0
  74. package/dist/adapters/mcp/mcp-servers.js.map +1 -0
  75. package/dist/adapters/oauth/client-metadata-documents.d.ts +9 -0
  76. package/dist/adapters/oauth/client-metadata-documents.js +25 -0
  77. package/dist/adapters/oauth/client-metadata-documents.js.map +1 -0
  78. package/dist/adapters/pagasae/pagasae-client.d.ts +8 -0
  79. package/dist/adapters/pagasae/pagasae-client.js +90 -0
  80. package/dist/adapters/pagasae/pagasae-client.js.map +1 -0
  81. package/dist/adapters/prisma/account-grants.d.ts +4 -0
  82. package/dist/adapters/prisma/account-grants.js +27 -0
  83. package/dist/adapters/prisma/account-grants.js.map +1 -0
  84. package/dist/adapters/prisma/calls.d.ts +4 -0
  85. package/dist/adapters/prisma/calls.js +35 -0
  86. package/dist/adapters/prisma/calls.js.map +1 -0
  87. package/dist/adapters/prisma/changes.d.ts +21 -0
  88. package/dist/adapters/prisma/changes.js +86 -0
  89. package/dist/adapters/prisma/changes.js.map +1 -0
  90. package/dist/adapters/prisma/client-calls.d.ts +4 -0
  91. package/dist/adapters/prisma/client-calls.js +50 -0
  92. package/dist/adapters/prisma/client-calls.js.map +1 -0
  93. package/dist/adapters/prisma/client.d.ts +8 -0
  94. package/dist/adapters/prisma/client.js +11 -0
  95. package/dist/adapters/prisma/client.js.map +1 -0
  96. package/dist/adapters/prisma/connection-store.d.ts +4 -0
  97. package/dist/adapters/prisma/connection-store.js +28 -0
  98. package/dist/adapters/prisma/connection-store.js.map +1 -0
  99. package/dist/adapters/prisma/fleet-forgetter.d.ts +4 -0
  100. package/dist/adapters/prisma/fleet-forgetter.js +10 -0
  101. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -0
  102. package/dist/adapters/prisma/fleet-switches.d.ts +4 -0
  103. package/dist/adapters/prisma/fleet-switches.js +10 -0
  104. package/dist/adapters/prisma/fleet-switches.js.map +1 -0
  105. package/dist/adapters/prisma/generated/browser.d.ts +108 -0
  106. package/dist/adapters/prisma/generated/browser.js +18 -0
  107. package/dist/adapters/prisma/generated/browser.js.map +1 -0
  108. package/dist/adapters/prisma/generated/client.d.ts +127 -0
  109. package/dist/adapters/prisma/generated/client.js +38 -0
  110. package/dist/adapters/prisma/generated/client.js.map +1 -0
  111. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +490 -0
  112. package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
  113. package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
  114. package/dist/adapters/prisma/generated/enums.d.ts +1 -0
  115. package/dist/adapters/prisma/generated/enums.js +12 -0
  116. package/dist/adapters/prisma/generated/enums.js.map +1 -0
  117. package/dist/adapters/prisma/generated/internal/class.d.ts +319 -0
  118. package/dist/adapters/prisma/generated/internal/class.js +50 -0
  119. package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
  120. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2102 -0
  121. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +294 -0
  122. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
  123. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
  124. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +264 -0
  125. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
  126. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +1056 -0
  127. package/dist/adapters/prisma/generated/models/AccountGrant.js +2 -0
  128. package/dist/adapters/prisma/generated/models/AccountGrant.js.map +1 -0
  129. package/dist/adapters/prisma/generated/models/AuthorizationCode.d.ts +1171 -0
  130. package/dist/adapters/prisma/generated/models/AuthorizationCode.js +2 -0
  131. package/dist/adapters/prisma/generated/models/AuthorizationCode.js.map +1 -0
  132. package/dist/adapters/prisma/generated/models/Call.d.ts +994 -0
  133. package/dist/adapters/prisma/generated/models/Call.js +2 -0
  134. package/dist/adapters/prisma/generated/models/Call.js.map +1 -0
  135. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +1119 -0
  136. package/dist/adapters/prisma/generated/models/ClientCall.js +2 -0
  137. package/dist/adapters/prisma/generated/models/ClientCall.js.map +1 -0
  138. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +1129 -0
  139. package/dist/adapters/prisma/generated/models/ClientCallReply.js +2 -0
  140. package/dist/adapters/prisma/generated/models/ClientCallReply.js.map +1 -0
  141. package/dist/adapters/prisma/generated/models/Connection.d.ts +1011 -0
  142. package/dist/adapters/prisma/generated/models/Connection.js +2 -0
  143. package/dist/adapters/prisma/generated/models/Connection.js.map +1 -0
  144. package/dist/adapters/prisma/generated/models/FleetSwitch.d.ts +945 -0
  145. package/dist/adapters/prisma/generated/models/FleetSwitch.js +2 -0
  146. package/dist/adapters/prisma/generated/models/FleetSwitch.js.map +1 -0
  147. package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1030 -0
  148. package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
  149. package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
  150. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +1224 -0
  151. package/dist/adapters/prisma/generated/models/IssuedToken.js +2 -0
  152. package/dist/adapters/prisma/generated/models/IssuedToken.js.map +1 -0
  153. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +1005 -0
  154. package/dist/adapters/prisma/generated/models/OAuthClient.js +2 -0
  155. package/dist/adapters/prisma/generated/models/OAuthClient.js.map +1 -0
  156. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +1087 -0
  157. package/dist/adapters/prisma/generated/models/OpenedDelivery.js +2 -0
  158. package/dist/adapters/prisma/generated/models/OpenedDelivery.js.map +1 -0
  159. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.d.ts +942 -0
  160. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js +2 -0
  161. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js.map +1 -0
  162. package/dist/adapters/prisma/generated/models/OwnerQuestion.d.ts +1035 -0
  163. package/dist/adapters/prisma/generated/models/OwnerQuestion.js +2 -0
  164. package/dist/adapters/prisma/generated/models/OwnerQuestion.js.map +1 -0
  165. package/dist/adapters/prisma/generated/models/Party.d.ts +1338 -0
  166. package/dist/adapters/prisma/generated/models/Party.js +2 -0
  167. package/dist/adapters/prisma/generated/models/Party.js.map +1 -0
  168. package/dist/adapters/prisma/generated/models/PendingRequest.d.ts +1252 -0
  169. package/dist/adapters/prisma/generated/models/PendingRequest.js +2 -0
  170. package/dist/adapters/prisma/generated/models/PendingRequest.js.map +1 -0
  171. package/dist/adapters/prisma/generated/models/PersonCrew.d.ts +974 -0
  172. package/dist/adapters/prisma/generated/models/PersonCrew.js +2 -0
  173. package/dist/adapters/prisma/generated/models/PersonCrew.js.map +1 -0
  174. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.d.ts +1120 -0
  175. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js +2 -0
  176. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js.map +1 -0
  177. package/dist/adapters/prisma/generated/models/ToolMark.d.ts +947 -0
  178. package/dist/adapters/prisma/generated/models/ToolMark.js +2 -0
  179. package/dist/adapters/prisma/generated/models/ToolMark.js.map +1 -0
  180. package/dist/adapters/prisma/generated/models.d.ts +19 -0
  181. package/dist/adapters/prisma/generated/models.js +2 -0
  182. package/dist/adapters/prisma/generated/models.js.map +1 -0
  183. package/dist/adapters/prisma/installation-requests.d.ts +4 -0
  184. package/dist/adapters/prisma/installation-requests.js +25 -0
  185. package/dist/adapters/prisma/installation-requests.js.map +1 -0
  186. package/dist/adapters/prisma/migrate.d.ts +5 -0
  187. package/dist/adapters/prisma/migrate.js +53 -0
  188. package/dist/adapters/prisma/migrate.js.map +1 -0
  189. package/dist/adapters/prisma/oauth-stores.d.ts +5 -0
  190. package/dist/adapters/prisma/oauth-stores.js +82 -0
  191. package/dist/adapters/prisma/oauth-stores.js.map +1 -0
  192. package/dist/adapters/prisma/opened-deliveries.d.ts +4 -0
  193. package/dist/adapters/prisma/opened-deliveries.js +29 -0
  194. package/dist/adapters/prisma/opened-deliveries.js.map +1 -0
  195. package/dist/adapters/prisma/outcome-notices.d.ts +4 -0
  196. package/dist/adapters/prisma/outcome-notices.js +24 -0
  197. package/dist/adapters/prisma/outcome-notices.js.map +1 -0
  198. package/dist/adapters/prisma/outside-party-switches.d.ts +4 -0
  199. package/dist/adapters/prisma/outside-party-switches.js +10 -0
  200. package/dist/adapters/prisma/outside-party-switches.js.map +1 -0
  201. package/dist/adapters/prisma/owner-questions.d.ts +8 -0
  202. package/dist/adapters/prisma/owner-questions.js +54 -0
  203. package/dist/adapters/prisma/owner-questions.js.map +1 -0
  204. package/dist/adapters/prisma/party-store.d.ts +7 -0
  205. package/dist/adapters/prisma/party-store.js +73 -0
  206. package/dist/adapters/prisma/party-store.js.map +1 -0
  207. package/dist/adapters/prisma/pending-requests.d.ts +11 -0
  208. package/dist/adapters/prisma/pending-requests.js +122 -0
  209. package/dist/adapters/prisma/pending-requests.js.map +1 -0
  210. package/dist/adapters/prisma/person-crews.d.ts +4 -0
  211. package/dist/adapters/prisma/person-crews.js +18 -0
  212. package/dist/adapters/prisma/person-crews.js.map +1 -0
  213. package/dist/adapters/prisma/tool-marks.d.ts +4 -0
  214. package/dist/adapters/prisma/tool-marks.js +15 -0
  215. package/dist/adapters/prisma/tool-marks.js.map +1 -0
  216. package/dist/adapters/timers/sleep.d.ts +3 -0
  217. package/dist/adapters/timers/sleep.js +11 -0
  218. package/dist/adapters/timers/sleep.js.map +1 -0
  219. package/dist/adapters/trpc/router.d.ts +408 -0
  220. package/dist/adapters/trpc/router.js +367 -0
  221. package/dist/adapters/trpc/router.js.map +1 -0
  222. package/dist/app.d.ts +43 -0
  223. package/dist/app.js +400 -0
  224. package/dist/app.js.map +1 -0
  225. package/dist/bin/aeolus-gateway.d.ts +2 -0
  226. package/dist/bin/aeolus-gateway.js +65 -0
  227. package/dist/bin/aeolus-gateway.js.map +1 -0
  228. package/dist/config.d.ts +41 -0
  229. package/dist/config.js +65 -0
  230. package/dist/config.js.map +1 -0
  231. package/dist/core/actors/authenticate-actor.d.ts +38 -0
  232. package/dist/core/actors/authenticate-actor.js +30 -0
  233. package/dist/core/actors/authenticate-actor.js.map +1 -0
  234. package/dist/core/connection/connect.d.ts +26 -0
  235. package/dist/core/connection/connect.js +57 -0
  236. package/dist/core/connection/connect.js.map +1 -0
  237. package/dist/core/connection/ports.d.ts +87 -0
  238. package/dist/core/connection/ports.js +2 -0
  239. package/dist/core/connection/ports.js.map +1 -0
  240. package/dist/core/connection/read-connection.d.ts +14 -0
  241. package/dist/core/connection/read-connection.js +24 -0
  242. package/dist/core/connection/read-connection.js.map +1 -0
  243. package/dist/core/installation/delete-fleet.d.ts +21 -0
  244. package/dist/core/installation/delete-fleet.js +21 -0
  245. package/dist/core/installation/delete-fleet.js.map +1 -0
  246. package/dist/core/installation/ports.d.ts +43 -0
  247. package/dist/core/installation/ports.js +2 -0
  248. package/dist/core/installation/ports.js.map +1 -0
  249. package/dist/core/installation/read-fleet.d.ts +18 -0
  250. package/dist/core/installation/read-fleet.js +9 -0
  251. package/dist/core/installation/read-fleet.js.map +1 -0
  252. package/dist/core/installation/request-id.d.ts +8 -0
  253. package/dist/core/installation/request-id.js +10 -0
  254. package/dist/core/installation/request-id.js.map +1 -0
  255. package/dist/core/installation/served.d.ts +12 -0
  256. package/dist/core/installation/served.js +8 -0
  257. package/dist/core/installation/served.js.map +1 -0
  258. package/dist/core/installation/set-fleet-enabled.d.ts +25 -0
  259. package/dist/core/installation/set-fleet-enabled.js +22 -0
  260. package/dist/core/installation/set-fleet-enabled.js.map +1 -0
  261. package/dist/core/mcp-in/call-tool.d.ts +42 -0
  262. package/dist/core/mcp-in/call-tool.js +82 -0
  263. package/dist/core/mcp-in/call-tool.js.map +1 -0
  264. package/dist/core/mcp-in/client-call.d.ts +51 -0
  265. package/dist/core/mcp-in/client-call.js +39 -0
  266. package/dist/core/mcp-in/client-call.js.map +1 -0
  267. package/dist/core/mcp-in/collect-replies.d.ts +29 -0
  268. package/dist/core/mcp-in/collect-replies.js +44 -0
  269. package/dist/core/mcp-in/collect-replies.js.map +1 -0
  270. package/dist/core/mcp-in/list-tools.d.ts +44 -0
  271. package/dist/core/mcp-in/list-tools.js +70 -0
  272. package/dist/core/mcp-in/list-tools.js.map +1 -0
  273. package/dist/core/mcp-in/ports.d.ts +85 -0
  274. package/dist/core/mcp-in/ports.js +2 -0
  275. package/dist/core/mcp-in/ports.js.map +1 -0
  276. package/dist/core/mcp-in/read-client-call.d.ts +23 -0
  277. package/dist/core/mcp-in/read-client-call.js +15 -0
  278. package/dist/core/mcp-in/read-client-call.js.map +1 -0
  279. package/dist/core/mcp-out/content-types.d.ts +12 -0
  280. package/dist/core/mcp-out/content-types.js +28 -0
  281. package/dist/core/mcp-out/content-types.js.map +1 -0
  282. package/dist/core/mcp-out/hand-call.d.ts +103 -0
  283. package/dist/core/mcp-out/hand-call.js +116 -0
  284. package/dist/core/mcp-out/hand-call.js.map +1 -0
  285. package/dist/core/mcp-out/mark-tool.d.ts +20 -0
  286. package/dist/core/mcp-out/mark-tool.js +17 -0
  287. package/dist/core/mcp-out/mark-tool.js.map +1 -0
  288. package/dist/core/mcp-out/ports.d.ts +66 -0
  289. package/dist/core/mcp-out/ports.js +2 -0
  290. package/dist/core/mcp-out/ports.js.map +1 -0
  291. package/dist/core/mcp-out/run-party.d.ts +26 -0
  292. package/dist/core/mcp-out/run-party.js +62 -0
  293. package/dist/core/mcp-out/run-party.js.map +1 -0
  294. package/dist/core/mcp-out/state-party.d.ts +38 -0
  295. package/dist/core/mcp-out/state-party.js +30 -0
  296. package/dist/core/mcp-out/state-party.js.map +1 -0
  297. package/dist/core/mcp-out/statement.d.ts +26 -0
  298. package/dist/core/mcp-out/statement.js +32 -0
  299. package/dist/core/mcp-out/statement.js.map +1 -0
  300. package/dist/core/oauth/authenticate-access-token.d.ts +25 -0
  301. package/dist/core/oauth/authenticate-access-token.js +19 -0
  302. package/dist/core/oauth/authenticate-access-token.js.map +1 -0
  303. package/dist/core/oauth/exchange-token.d.ts +32 -0
  304. package/dist/core/oauth/exchange-token.js +98 -0
  305. package/dist/core/oauth/exchange-token.js.map +1 -0
  306. package/dist/core/oauth/issue-code.d.ts +23 -0
  307. package/dist/core/oauth/issue-code.js +34 -0
  308. package/dist/core/oauth/issue-code.js.map +1 -0
  309. package/dist/core/oauth/ports.d.ts +103 -0
  310. package/dist/core/oauth/ports.js +2 -0
  311. package/dist/core/oauth/ports.js.map +1 -0
  312. package/dist/core/oauth/read-authorization.d.ts +43 -0
  313. package/dist/core/oauth/read-authorization.js +74 -0
  314. package/dist/core/oauth/read-authorization.js.map +1 -0
  315. package/dist/core/oauth/redirect-uri.d.ts +6 -0
  316. package/dist/core/oauth/redirect-uri.js +20 -0
  317. package/dist/core/oauth/redirect-uri.js.map +1 -0
  318. package/dist/core/oauth/register-client.d.ts +22 -0
  319. package/dist/core/oauth/register-client.js +20 -0
  320. package/dist/core/oauth/register-client.js.map +1 -0
  321. package/dist/core/operator/authenticate-operator.d.ts +22 -0
  322. package/dist/core/operator/authenticate-operator.js +26 -0
  323. package/dist/core/operator/authenticate-operator.js.map +1 -0
  324. package/dist/core/operator/ports.d.ts +15 -0
  325. package/dist/core/operator/ports.js +2 -0
  326. package/dist/core/operator/ports.js.map +1 -0
  327. package/dist/core/outside-parties/ports.d.ts +21 -0
  328. package/dist/core/outside-parties/ports.js +2 -0
  329. package/dist/core/outside-parties/ports.js.map +1 -0
  330. package/dist/core/outside-parties/set-outside-parties.d.ts +34 -0
  331. package/dist/core/outside-parties/set-outside-parties.js +34 -0
  332. package/dist/core/outside-parties/set-outside-parties.js.map +1 -0
  333. package/dist/core/parties/approve-party.d.ts +55 -0
  334. package/dist/core/parties/approve-party.js +111 -0
  335. package/dist/core/parties/approve-party.js.map +1 -0
  336. package/dist/core/parties/crew-party.d.ts +21 -0
  337. package/dist/core/parties/crew-party.js +29 -0
  338. package/dist/core/parties/crew-party.js.map +1 -0
  339. package/dist/core/parties/list-parties.d.ts +8 -0
  340. package/dist/core/parties/list-parties.js +8 -0
  341. package/dist/core/parties/list-parties.js.map +1 -0
  342. package/dist/core/parties/party.d.ts +46 -0
  343. package/dist/core/parties/party.js +2 -0
  344. package/dist/core/parties/party.js.map +1 -0
  345. package/dist/core/parties/ports.d.ts +39 -0
  346. package/dist/core/parties/ports.js +2 -0
  347. package/dist/core/parties/ports.js.map +1 -0
  348. package/dist/core/parties/shown-party.d.ts +21 -0
  349. package/dist/core/parties/shown-party.js +10 -0
  350. package/dist/core/parties/shown-party.js.map +1 -0
  351. package/dist/core/people/answer-delivery.d.ts +24 -0
  352. package/dist/core/people/answer-delivery.js +28 -0
  353. package/dist/core/people/answer-delivery.js.map +1 -0
  354. package/dist/core/people/crew-person-ship.d.ts +42 -0
  355. package/dist/core/people/crew-person-ship.js +59 -0
  356. package/dist/core/people/crew-person-ship.js.map +1 -0
  357. package/dist/core/people/done-delivery.d.ts +16 -0
  358. package/dist/core/people/done-delivery.js +9 -0
  359. package/dist/core/people/done-delivery.js.map +1 -0
  360. package/dist/core/people/inbox-entry.d.ts +14 -0
  361. package/dist/core/people/inbox-entry.js +11 -0
  362. package/dist/core/people/inbox-entry.js.map +1 -0
  363. package/dist/core/people/open-delivery.d.ts +30 -0
  364. package/dist/core/people/open-delivery.js +40 -0
  365. package/dist/core/people/open-delivery.js.map +1 -0
  366. package/dist/core/people/opened-of.d.ts +29 -0
  367. package/dist/core/people/opened-of.js +30 -0
  368. package/dist/core/people/opened-of.js.map +1 -0
  369. package/dist/core/people/person-crew.d.ts +39 -0
  370. package/dist/core/people/person-crew.js +61 -0
  371. package/dist/core/people/person-crew.js.map +1 -0
  372. package/dist/core/people/ports.d.ts +102 -0
  373. package/dist/core/people/ports.js +2 -0
  374. package/dist/core/people/ports.js.map +1 -0
  375. package/dist/core/people/read-inbox.d.ts +37 -0
  376. package/dist/core/people/read-inbox.js +36 -0
  377. package/dist/core/people/read-inbox.js.map +1 -0
  378. package/dist/core/requests/ask-for-client.d.ts +45 -0
  379. package/dist/core/requests/ask-for-client.js +33 -0
  380. package/dist/core/requests/ask-for-client.js.map +1 -0
  381. package/dist/core/requests/ask-for-server.d.ts +32 -0
  382. package/dist/core/requests/ask-for-server.js +42 -0
  383. package/dist/core/requests/ask-for-server.js.map +1 -0
  384. package/dist/core/requests/ask-owners.d.ts +28 -0
  385. package/dist/core/requests/ask-owners.js +85 -0
  386. package/dist/core/requests/ask-owners.js.map +1 -0
  387. package/dist/core/requests/decide-request.d.ts +53 -0
  388. package/dist/core/requests/decide-request.js +75 -0
  389. package/dist/core/requests/decide-request.js.map +1 -0
  390. package/dist/core/requests/expire-requests.d.ts +14 -0
  391. package/dist/core/requests/expire-requests.js +21 -0
  392. package/dist/core/requests/expire-requests.js.map +1 -0
  393. package/dist/core/requests/list-to-decide.d.ts +11 -0
  394. package/dist/core/requests/list-to-decide.js +13 -0
  395. package/dist/core/requests/list-to-decide.js.map +1 -0
  396. package/dist/core/requests/open-request.d.ts +21 -0
  397. package/dist/core/requests/open-request.js +26 -0
  398. package/dist/core/requests/open-request.js.map +1 -0
  399. package/dist/core/requests/outcome-notice.d.ts +13 -0
  400. package/dist/core/requests/outcome-notice.js +26 -0
  401. package/dist/core/requests/outcome-notice.js.map +1 -0
  402. package/dist/core/requests/ports.d.ts +186 -0
  403. package/dist/core/requests/ports.js +2 -0
  404. package/dist/core/requests/ports.js.map +1 -0
  405. package/dist/core/requests/read-waiting.d.ts +46 -0
  406. package/dist/core/requests/read-waiting.js +41 -0
  407. package/dist/core/requests/read-waiting.js.map +1 -0
  408. package/dist/core/requests/request-state.d.ts +5 -0
  409. package/dist/core/requests/request-state.js +10 -0
  410. package/dist/core/requests/request-state.js.map +1 -0
  411. package/dist/core/requests/tell-outcomes.d.ts +24 -0
  412. package/dist/core/requests/tell-outcomes.js +39 -0
  413. package/dist/core/requests/tell-outcomes.js.map +1 -0
  414. package/dist/core/requests/watch-waiting.d.ts +32 -0
  415. package/dist/core/requests/watch-waiting.js +31 -0
  416. package/dist/core/requests/watch-waiting.js.map +1 -0
  417. package/dist/core/shared/clock.d.ts +4 -0
  418. package/dist/core/shared/clock.js +2 -0
  419. package/dist/core/shared/clock.js.map +1 -0
  420. package/dist/core/shared/errors.d.ts +10 -0
  421. package/dist/core/shared/errors.js +6 -0
  422. package/dist/core/shared/errors.js.map +1 -0
  423. package/dist/core/shared/result.d.ts +16 -0
  424. package/dist/core/shared/result.js +7 -0
  425. package/dist/core/shared/result.js.map +1 -0
  426. package/dist/core/sign-in/account-token.d.ts +38 -0
  427. package/dist/core/sign-in/account-token.js +46 -0
  428. package/dist/core/sign-in/account-token.js.map +1 -0
  429. package/dist/core/sign-in/complete-sign-in.d.ts +55 -0
  430. package/dist/core/sign-in/complete-sign-in.js +50 -0
  431. package/dist/core/sign-in/complete-sign-in.js.map +1 -0
  432. package/dist/core/sign-in/end-sign-ins.d.ts +19 -0
  433. package/dist/core/sign-in/end-sign-ins.js +17 -0
  434. package/dist/core/sign-in/end-sign-ins.js.map +1 -0
  435. package/dist/core/sign-in/ports.d.ts +85 -0
  436. package/dist/core/sign-in/ports.js +2 -0
  437. package/dist/core/sign-in/ports.js.map +1 -0
  438. package/dist/core/sign-in/start-sign-in.d.ts +30 -0
  439. package/dist/core/sign-in/start-sign-in.js +25 -0
  440. package/dist/core/sign-in/start-sign-in.js.map +1 -0
  441. package/dist/core/vault/credential.d.ts +18 -0
  442. package/dist/core/vault/credential.js +2 -0
  443. package/dist/core/vault/credential.js.map +1 -0
  444. package/dist/outcome-worker.d.ts +29 -0
  445. package/dist/outcome-worker.js +60 -0
  446. package/dist/outcome-worker.js.map +1 -0
  447. package/dist/party-workers.d.ts +32 -0
  448. package/dist/party-workers.js +57 -0
  449. package/dist/party-workers.js.map +1 -0
  450. package/package.json +70 -4
  451. package/prisma.config.ts +18 -0
  452. package/src/adapters/prisma/migrations/20261018200000_init/migration.sql +35 -0
  453. package/src/adapters/prisma/migrations/20261018210000_parties/migration.sql +19 -0
  454. package/src/adapters/prisma/migrations/20261018220000_tool_marks/migration.sql +8 -0
  455. package/src/adapters/prisma/migrations/20261018230000_calls/migration.sql +13 -0
  456. package/src/adapters/prisma/migrations/20261019090000_oauth/migration.sql +60 -0
  457. package/src/adapters/prisma/migrations/20261019100000_client_parties/migration.sql +8 -0
  458. package/src/adapters/prisma/migrations/20261019110000_oauth_parties/migration.sql +5 -0
  459. package/src/adapters/prisma/migrations/20261019120000_client_calls/migration.sql +15 -0
  460. package/src/adapters/prisma/migrations/20261019130000_client_call_replies/migration.sql +20 -0
  461. package/src/adapters/prisma/migrations/20261019140000_identity_providers/migration.sql +10 -0
  462. package/src/adapters/prisma/migrations/20261020090000_no_identity_providers/migration.sql +2 -0
  463. package/src/adapters/prisma/migrations/20261020100000_account_grants_in_tokens/migration.sql +5 -0
  464. package/src/adapters/prisma/migrations/20261020110000_account_grants/migration.sql +15 -0
  465. package/src/adapters/prisma/migrations/20261020120000_person_crews/migration.sql +9 -0
  466. package/src/adapters/prisma/migrations/20261020130000_opened_deliveries/migration.sql +13 -0
  467. package/src/adapters/prisma/migrations/20261020140000_pending_requests/migration.sql +26 -0
  468. package/src/adapters/prisma/migrations/20261020150000_outside_party_switches/migration.sql +8 -0
  469. package/src/adapters/prisma/migrations/20261020160000_pending_requests_told/migration.sql +2 -0
  470. package/src/adapters/prisma/migrations/20261020170000_request_outcome_notices/migration.sql +17 -0
  471. package/src/adapters/prisma/migrations/20261020180000_owner_questions/migration.sql +11 -0
  472. package/src/adapters/prisma/migrations/20261020190000_request_changes/migration.sql +12 -0
  473. package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
  474. package/src/adapters/prisma/schema.prisma +311 -0
@@ -0,0 +1,55 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { AuthorizationCodes, OAuthSecrets } from '../oauth/ports.js';
3
+ import type { AuthorizationRefusal, ReadAuthorization } from '../oauth/read-authorization.js';
4
+ import type { AskForClient, ClientAnswer } from '../requests/ask-for-client.js';
5
+ import type { Clock } from '../shared/clock.js';
6
+ import { type Result } from '../shared/result.js';
7
+ import type { AccountGrants, Pagasae, SignInSeals } from './ports.js';
8
+ /**
9
+ * Why a sign-in gave the client no code, beside the request's own refusals:
10
+ * - unknownSignIn: the gateway sealed no sign-in into this state, or its 10 minutes passed;
11
+ * - otherBrowser: the browser that came back does not hold the sign-in's secret, as when another site makes it finish its own;
12
+ * - pagasaeRefused: pagasae did not redeem its code, for the reason given;
13
+ * - fleetNotServed: the account's fleet is one this gateway does not serve;
14
+ * - outsidePartiesOff: the person asked for access for the client while the fleet's outside parties are off (interop I-3).
15
+ */
16
+ export type SignInRefusal = AuthorizationRefusal | {
17
+ readonly kind: 'unknownSignIn';
18
+ } | {
19
+ readonly kind: 'otherBrowser';
20
+ } | {
21
+ readonly kind: 'pagasaeRefused';
22
+ readonly message: string;
23
+ } | {
24
+ readonly kind: 'fleetNotServed';
25
+ } | {
26
+ readonly kind: 'outsidePartiesOff';
27
+ };
28
+ export type CompleteSignIn = (back: {
29
+ state?: string | undefined;
30
+ code?: string | undefined;
31
+ error?: string | undefined;
32
+ browserSecret?: string | undefined;
33
+ }) => Promise<Result<ClientAnswer, SignInRefusal>>;
34
+ /**
35
+ * Use case: pagasae sends the person back. Their sign-in is opened from its
36
+ * state, the client's request read again, and pagasae's code redeemed with
37
+ * the gateway's verifier; pagasae takes a code once. Then, as the person
38
+ * picked: the account's grant is kept, and the client is sent back with the
39
+ * gateway's own code for it, acting in the fleet as the account with no
40
+ * approval (orchestrator-1, slice 7 Q1); or the account asks for access for
41
+ * the client, as an outside party (decision 0056).
42
+ */
43
+ export declare function createCompleteSignIn(deps: {
44
+ readAuthorization: ReadAuthorization;
45
+ seals: SignInSeals;
46
+ pagasae: Pagasae;
47
+ grants: AccountGrants;
48
+ codes: AuthorizationCodes;
49
+ secrets: OAuthSecrets;
50
+ clock: Clock;
51
+ issuer: string;
52
+ /** Whether the gateway serves the fleet: connected to it, and switched on where an installation switches fleets (decision 0021). */
53
+ servesFleet: (fleetId: FleetId) => Promise<boolean>;
54
+ askForClient: AskForClient;
55
+ }): CompleteSignIn;
@@ -0,0 +1,50 @@
1
+ import { issueCode, redirectWith } from '../oauth/issue-code.js';
2
+ import { err, ok } from '../shared/result.js';
3
+ /**
4
+ * Use case: pagasae sends the person back. Their sign-in is opened from its
5
+ * state, the client's request read again, and pagasae's code redeemed with
6
+ * the gateway's verifier; pagasae takes a code once. Then, as the person
7
+ * picked: the account's grant is kept, and the client is sent back with the
8
+ * gateway's own code for it, acting in the fleet as the account with no
9
+ * approval (orchestrator-1, slice 7 Q1); or the account asks for access for
10
+ * the client, as an outside party (decision 0056).
11
+ */
12
+ export function createCompleteSignIn(deps) {
13
+ return async ({ state, code, error, browserSecret }) => {
14
+ const signIn = state === undefined ? undefined : deps.seals.open(state);
15
+ if (signIn === undefined || signIn.expiresAt.getTime() <= deps.clock.now().getTime()) {
16
+ return err({ kind: 'unknownSignIn' });
17
+ }
18
+ if (browserSecret !== signIn.browserSecret) {
19
+ return err({ kind: 'otherBrowser' });
20
+ }
21
+ const read = await deps.readAuthorization(signIn.request);
22
+ if (!read.isOk) {
23
+ return read;
24
+ }
25
+ const authorization = read.value;
26
+ if (error !== undefined || code === undefined) {
27
+ return ok({ kind: 'answered', redirectTo: redirectWith(authorization.redirectUri, { error: 'access_denied', state: authorization.state, iss: deps.issuer }) });
28
+ }
29
+ const redeemed = await deps.pagasae.redeemCode({ code, verifier: signIn.verifier });
30
+ if (!redeemed.isOk) {
31
+ return err({ kind: 'pagasaeRefused', message: redeemed.error.reason });
32
+ }
33
+ const tokens = redeemed.value;
34
+ if (!(await deps.servesFleet(tokens.fleetId))) {
35
+ return err({ kind: 'fleetNotServed' });
36
+ }
37
+ if (authorization.clientFleetId !== null && authorization.clientFleetId !== tokens.fleetId) {
38
+ return err({ kind: 'invalidClient', message: `${authorization.clientName} is registered for another fleet` });
39
+ }
40
+ const { fleetId, accountId, personShipId, refreshToken, accountToken, accountTokenExpiresAt } = tokens;
41
+ if (signIn.holder === 'party') {
42
+ const asked = await deps.askForClient({ fleetId, requester: { accountId, personShipId }, authorization, request: signIn.request, browserSecret: signIn.browserSecret });
43
+ return asked.isOk ? asked : err({ kind: 'outsidePartiesOff' });
44
+ }
45
+ const grantId = deps.secrets.newSecret();
46
+ await deps.grants.save({ grantId, fleetId, accountId, personShipId, refreshToken, accountToken, accountTokenExpiresAt });
47
+ return ok({ kind: 'answered', redirectTo: await issueCode(deps, { fleetId, authorization, holder: { kind: 'account', grantId } }) });
48
+ };
49
+ }
50
+ //# sourceMappingURL=complete-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete-sign-in.js","sourceRoot":"","sources":["../../../src/core/sign-in/complete-sign-in.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { IssuedTokens } from '../oauth/ports.js';
3
+ import type { AccountGrants } from './ports.js';
4
+ export type EndSignIns = (account: {
5
+ fleetId: FleetId;
6
+ accountId: string;
7
+ }) => Promise<void>;
8
+ /**
9
+ * Use case: pagasae disabled the account and tells the gateway, which ends
10
+ * its gateway tokens there (decision 0055): every sign-in of the account in
11
+ * the fleet ends, and its clients' tokens are revoked, so each client is
12
+ * refused at its next call. pagasae refuses the account a new sign-in. A
13
+ * grant is ended before its tokens are revoked, as when pagasae refuses a
14
+ * refresh: a call with a token whose grant is gone is signed out already.
15
+ */
16
+ export declare function createEndSignIns(deps: {
17
+ grants: AccountGrants;
18
+ tokens: IssuedTokens;
19
+ }): EndSignIns;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Use case: pagasae disabled the account and tells the gateway, which ends
3
+ * its gateway tokens there (decision 0055): every sign-in of the account in
4
+ * the fleet ends, and its clients' tokens are revoked, so each client is
5
+ * refused at its next call. pagasae refuses the account a new sign-in. A
6
+ * grant is ended before its tokens are revoked, as when pagasae refuses a
7
+ * refresh: a call with a token whose grant is gone is signed out already.
8
+ */
9
+ export function createEndSignIns(deps) {
10
+ return async ({ fleetId, accountId }) => {
11
+ for (const { grantId } of await deps.grants.ofAccount(fleetId, accountId)) {
12
+ await deps.grants.end(fleetId, grantId);
13
+ await deps.tokens.revokeGrant(fleetId, grantId);
14
+ }
15
+ };
16
+ }
17
+ //# sourceMappingURL=end-sign-ins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end-sign-ins.js","sourceRoot":"","sources":["../../../src/core/sign-in/end-sign-ins.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAqD;IACpF,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QACtC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * A person signs in to the gateway through pagasae, the one identity
3
+ * provider (decision 0054): the gateway is its OpenID Connect client, and
4
+ * the person acts in the fleet as their account, by its account token.
5
+ */
6
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
7
+ import type { Result } from '../shared/result.js';
8
+ /** A person's sign-in at pagasae under way: the client's authorization request, with the gateway's PKCE verifier. */
9
+ export interface PendingSignIn {
10
+ readonly verifier: string;
11
+ /** The secret the browser that started the sign-in holds, so no other browser finishes it (login CSRF). */
12
+ readonly browserSecret: string;
13
+ readonly request: Readonly<Record<string, string | undefined>>;
14
+ /** What the person picked the client to act as: their account, or a party they ask access for (Q1 a). */
15
+ readonly holder: SignInHolder;
16
+ readonly expiresAt: Date;
17
+ }
18
+ /** What a client acts as once its person signed in: the account itself, or an outside party (decision 0056). */
19
+ export type SignInHolder = 'account' | 'party';
20
+ /**
21
+ * Outbound port: seals a sign-in under way into the state pagasae carries
22
+ * back, so the gateway stores nothing before it knows the fleet, and the
23
+ * verifier stays secret on the way.
24
+ */
25
+ export interface SignInSeals {
26
+ seal(signIn: PendingSignIn): string;
27
+ /** The sign-in a state seals; none for a state the gateway did not seal. */
28
+ open(state: string): PendingSignIn | undefined;
29
+ }
30
+ /** What pagasae answers for a redeemed code: the account token, what it names, and the refresh token behind it. */
31
+ export interface PagasaeTokens {
32
+ readonly accountToken: string;
33
+ readonly accountTokenExpiresAt: Date;
34
+ readonly refreshToken: string;
35
+ /** The fleet pagasae signed the account token for: the one the person picked, or their only one. */
36
+ readonly fleetId: FleetId;
37
+ readonly accountId: string;
38
+ /** The account's person ship in the fleet, if it has one (decision 0052). */
39
+ readonly personShipId: ShipId | null;
40
+ }
41
+ /** Outbound port: pagasae, where the gateway sends a person to sign in, and redeems the code they come back with. */
42
+ export interface Pagasae {
43
+ /** pagasae's authorize address for the gateway, with the state and the PKCE challenge, naming no fleet. */
44
+ authorizeUrl(signIn: {
45
+ state: string;
46
+ codeChallenge: string;
47
+ }): string;
48
+ redeemCode(code: {
49
+ code: string;
50
+ verifier: string;
51
+ }): Promise<Result<PagasaeTokens, {
52
+ reason: string;
53
+ }>>;
54
+ /**
55
+ * New tokens for a refresh token, which pagasae replaces on use: refused
56
+ * when pagasae ended the grant (disabled, signed out, no right left, the
57
+ * token used twice), unavailable when it did not answer.
58
+ */
59
+ refresh(refreshToken: string): Promise<Result<PagasaeTokens, {
60
+ kind: 'refused' | 'unavailable';
61
+ reason: string;
62
+ }>>;
63
+ }
64
+ /** A person's sign-in kept for their MCP client: the account in the fleet, and pagasae's tokens to act as it. */
65
+ export interface AccountGrant {
66
+ readonly grantId: string;
67
+ readonly fleetId: FleetId;
68
+ readonly accountId: string;
69
+ readonly personShipId: ShipId | null;
70
+ readonly refreshToken: string;
71
+ readonly accountToken: string;
72
+ readonly accountTokenExpiresAt: Date;
73
+ }
74
+ export interface AccountGrants {
75
+ save(grant: AccountGrant): Promise<void>;
76
+ find(fleetId: FleetId, grantId: string): Promise<AccountGrant | undefined>;
77
+ /** Every grant of the account in the fleet: one per client it signed in from. */
78
+ ofAccount(fleetId: FleetId, accountId: string): Promise<readonly AccountGrant[]>;
79
+ /** Keeps pagasae's new tokens for the grant, and the person ship they name. */
80
+ renew(grant: {
81
+ fleetId: FleetId;
82
+ grantId: string;
83
+ }, tokens: Partial<Pick<AccountGrant, 'refreshToken' | 'accountToken' | 'accountTokenExpiresAt' | 'personShipId'>>): Promise<void>;
84
+ end(fleetId: FleetId, grantId: string): Promise<void>;
85
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/sign-in/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { OAuthSecrets } from '../oauth/ports.js';
2
+ import type { AuthorizationRefusal, ReadAuthorization } from '../oauth/read-authorization.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { Pagasae, SignInHolder, SignInSeals } from './ports.js';
6
+ /** How long a person has to sign in at pagasae and come back. */
7
+ export declare const SIGN_IN_LIFETIME_MS: number;
8
+ export type StartSignIn = (picked: {
9
+ request: Readonly<Record<string, string | undefined>>;
10
+ holder: SignInHolder;
11
+ }) => Promise<Result<{
12
+ redirectTo: string;
13
+ browserSecret: string;
14
+ }, AuthorizationRefusal>>;
15
+ /**
16
+ * Use case: a person comes to /authorize from their MCP client (Q25) and
17
+ * picks what it acts as: their account, or a party they ask access for (Q1
18
+ * a). The client's request is read, then sealed, with that pick, with the
19
+ * gateway's own PKCE verifier into the state, and the person is sent to
20
+ * pagasae naming no fleet, so pagasae answers their only fleet or asks
21
+ * which (decision 0054). The browser is given a secret of its own, sealed
22
+ * too, so only it finishes the sign-in.
23
+ */
24
+ export declare function createStartSignIn(deps: {
25
+ readAuthorization: ReadAuthorization;
26
+ seals: SignInSeals;
27
+ pagasae: Pagasae;
28
+ secrets: OAuthSecrets;
29
+ clock: Clock;
30
+ }): StartSignIn;
@@ -0,0 +1,25 @@
1
+ import { ok } from '../shared/result.js';
2
+ /** How long a person has to sign in at pagasae and come back. */
3
+ export const SIGN_IN_LIFETIME_MS = 10 * 60_000;
4
+ /**
5
+ * Use case: a person comes to /authorize from their MCP client (Q25) and
6
+ * picks what it acts as: their account, or a party they ask access for (Q1
7
+ * a). The client's request is read, then sealed, with that pick, with the
8
+ * gateway's own PKCE verifier into the state, and the person is sent to
9
+ * pagasae naming no fleet, so pagasae answers their only fleet or asks
10
+ * which (decision 0054). The browser is given a secret of its own, sealed
11
+ * too, so only it finishes the sign-in.
12
+ */
13
+ export function createStartSignIn(deps) {
14
+ return async ({ request, holder }) => {
15
+ const read = await deps.readAuthorization(request);
16
+ if (!read.isOk) {
17
+ return read;
18
+ }
19
+ const verifier = deps.secrets.newSecret();
20
+ const browserSecret = deps.secrets.newSecret();
21
+ const state = deps.seals.seal({ verifier, browserSecret, request, holder, expiresAt: new Date(deps.clock.now().getTime() + SIGN_IN_LIFETIME_MS) });
22
+ return ok({ redirectTo: deps.pagasae.authorizeUrl({ state, codeChallenge: deps.secrets.challengeOf(verifier) }), browserSecret });
23
+ };
24
+ }
25
+ //# sourceMappingURL=start-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-sign-in.js","sourceRoot":"","sources":["../../../src/core/sign-in/start-sign-in.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AAI/C;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAyH;IACzJ,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACnJ,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;IACpI,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The credential the gateway calls an outside MCP server with, kept in the
3
+ * vault, the gateway's own database (as squadrons keeps crew tokens). The
4
+ * server sees the gateway's credential, never the asker's: no rights travel
5
+ * with a message.
6
+ */
7
+ export type McpServerCredential = {
8
+ readonly kind: 'bearer';
9
+ readonly token: string;
10
+ } | {
11
+ readonly kind: 'clientCredentials';
12
+ readonly clientId: string;
13
+ readonly clientSecret: string;
14
+ /** The authorization server's issuer: the credential goes to no other. */
15
+ readonly issuer: string;
16
+ /** The OAuth scope to ask the authorization server for, if the server needs one. */
17
+ readonly scope?: string;
18
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential.js","sourceRoot":"","sources":["../../../src/core/vault/credential.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The gateway's round of request outcomes (decision 0056): each round
3
+ * expires the requests due, tells the outcomes still to tell, and asks the
4
+ * gateway's owner about new requests and withdraws the questions whose
5
+ * request ended. Rounds
6
+ * run one at a time, every interval, and at once when a request is decided;
7
+ * a round asked for while one runs runs right after it.
8
+ */
9
+ import type { FastifyBaseLogger } from 'fastify';
10
+ import type { Sleep } from './core/mcp-out/run-party.js';
11
+ import type { AskOwners } from './core/requests/ask-owners.js';
12
+ import type { ExpireRequests } from './core/requests/expire-requests.js';
13
+ import type { TellOutcomes } from './core/requests/tell-outcomes.js';
14
+ export interface OutcomeWorker {
15
+ /** Runs a round every interval until it stops. */
16
+ start(): void;
17
+ /** Runs a round now, as when a request was opened or decided. */
18
+ tellNow(): void;
19
+ /** Stops, once the round under way ended. */
20
+ stop(): Promise<void>;
21
+ }
22
+ export declare function createOutcomeWorker(deps: {
23
+ expireRequests: ExpireRequests;
24
+ tellOutcomes: TellOutcomes;
25
+ askOwners: AskOwners;
26
+ sleep: Sleep;
27
+ intervalMs: number;
28
+ log: FastifyBaseLogger;
29
+ }): OutcomeWorker;
@@ -0,0 +1,60 @@
1
+ export function createOutcomeWorker(deps) {
2
+ const stopping = new AbortController();
3
+ let running = Promise.resolve();
4
+ /** Whether a round runs, and how many were asked for since it started. */
5
+ const rounds = { isRunning: false, asked: 0 };
6
+ const round = async () => {
7
+ try {
8
+ const expired = await deps.expireRequests();
9
+ const { told, kept, refused } = await deps.tellOutcomes();
10
+ if (refused > 0) {
11
+ deps.log.warn({ refused }, "the fleet refused some request outcomes: their people see them on the gateway's page");
12
+ }
13
+ if (expired + told + kept > 0) {
14
+ deps.log.info({ expired, told, kept }, 'request outcomes');
15
+ }
16
+ const questions = await deps.askOwners();
17
+ if (questions.refused > 0) {
18
+ deps.log.warn({ refused: questions.refused }, "the fleet refused some questions to the gateway's owner");
19
+ }
20
+ }
21
+ catch (error) {
22
+ deps.log.error({ err: error }, 'request outcomes round failed');
23
+ }
24
+ };
25
+ const runRound = () => {
26
+ rounds.asked += 1;
27
+ if (rounds.isRunning) {
28
+ return;
29
+ }
30
+ rounds.isRunning = true;
31
+ running = (async () => {
32
+ while (rounds.asked > 0 && !stopping.signal.aborted) {
33
+ rounds.asked = 0;
34
+ await round();
35
+ }
36
+ rounds.isRunning = false;
37
+ })();
38
+ };
39
+ return {
40
+ start: () => {
41
+ void (async () => {
42
+ while (!stopping.signal.aborted) {
43
+ runRound();
44
+ await running;
45
+ await deps.sleep(deps.intervalMs, stopping.signal);
46
+ }
47
+ })();
48
+ },
49
+ tellNow: () => {
50
+ if (!stopping.signal.aborted) {
51
+ runRound();
52
+ }
53
+ },
54
+ stop: async () => {
55
+ stopping.abort();
56
+ await running;
57
+ },
58
+ };
59
+ }
60
+ //# sourceMappingURL=outcome-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-worker.js","sourceRoot":"","sources":["../src/outcome-worker.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,mBAAmB,CAAC,IAAoJ;IACtL,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,IAAI,OAAO,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,0EAA0E;IAC1E,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAE9C,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,sFAAsF,CAAC,CAAC;YACrH,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,yDAAyD,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACpB,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBACjB,MAAM,KAAK,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAChC,QAAQ,EAAE,CAAC;oBACX,MAAM,OAAO,CAAC;oBACd,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7B,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,OAAO,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The gateway's workers, one per crewed party, each until the gateway stops
3
+ * or the fleet refuses its crew token: an outside server's states its proxy
4
+ * ship, then takes its calls (interop 5.2); an outside client's takes the
5
+ * replies to its calls (Q9 a). A fleet's workers work only while its outside
6
+ * parties are on (interop I-3).
7
+ */
8
+ import type { FleetId } from '@aeolus-fleet/common';
9
+ import type { FastifyBaseLogger } from 'fastify';
10
+ import type { CollectReplies } from './core/mcp-in/collect-replies.js';
11
+ import type { RunParty } from './core/mcp-out/run-party.js';
12
+ import type { StateParty } from './core/mcp-out/state-party.js';
13
+ import type { PartyStore } from './core/parties/ports.js';
14
+ export interface PartyWorkers {
15
+ /** Starts the party's worker, unless it is not crewed or its worker runs already. */
16
+ start(party: {
17
+ fleetId: FleetId;
18
+ name: string;
19
+ }): Promise<void>;
20
+ /** Stops the fleet's workers, once their calls in flight ended, as when its outside parties go off. */
21
+ stopFleet(fleetId: FleetId): Promise<void>;
22
+ /** Stops every worker, once its calls in flight ended. */
23
+ stop(): Promise<void>;
24
+ }
25
+ export declare function createPartyWorkers(deps: {
26
+ parties: PartyStore;
27
+ stateParty: StateParty;
28
+ runParty: RunParty;
29
+ collectReplies: CollectReplies;
30
+ servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
31
+ log: FastifyBaseLogger;
32
+ }): PartyWorkers;
@@ -0,0 +1,57 @@
1
+ export function createPartyWorkers(deps) {
2
+ const stop = new AbortController();
3
+ /** Each running worker, by fleet and party, with what stops it. */
4
+ const running = new Map();
5
+ const work = async ({ fleetId, name }, signal) => {
6
+ if (!(await deps.servesOutsideParties(fleetId))) {
7
+ return;
8
+ }
9
+ const party = await deps.parties.find(fleetId, name);
10
+ if (party?.state !== 'crewed' || signal.aborted) {
11
+ return;
12
+ }
13
+ if (party.kind === 'mcpClient') {
14
+ const { ended } = await deps.collectReplies({ party, signal });
15
+ if (ended === 'crewRefused') {
16
+ deps.log.warn({ fleetId, party: name }, "the fleet refused the proxy ship's crew token: its calls get no replies");
17
+ }
18
+ return;
19
+ }
20
+ const stated = await deps.stateParty({ fleetId, name });
21
+ if (!stated.isOk) {
22
+ // Its calls are taken all the same; the next statement states it.
23
+ deps.log.warn({ fleetId, party: name, reason: stated.error.message }, 'proxy ship not stated');
24
+ }
25
+ const { ended } = await deps.runParty({ party, signal });
26
+ if (ended === 'crewRefused') {
27
+ deps.log.warn({ fleetId, party: name }, 'the fleet refused the proxy ship\'s crew token: its calls are not taken');
28
+ }
29
+ };
30
+ return {
31
+ start: (party) => {
32
+ const key = JSON.stringify([party.fleetId, party.name]);
33
+ if (!running.has(key) && !stop.signal.aborted) {
34
+ const stopFleet = new AbortController();
35
+ const done = work(party, AbortSignal.any([stop.signal, stopFleet.signal]))
36
+ .catch((error) => {
37
+ deps.log.error({ err: error, fleetId: party.fleetId, party: party.name }, 'party worker failed');
38
+ })
39
+ .finally(() => running.delete(key));
40
+ running.set(key, { fleetId: party.fleetId, done, stopFleet });
41
+ }
42
+ return Promise.resolve();
43
+ },
44
+ stopFleet: async (fleetId) => {
45
+ const fleetWorkers = [...running.values()].filter((worker) => worker.fleetId === fleetId);
46
+ for (const worker of fleetWorkers) {
47
+ worker.stopFleet.abort();
48
+ }
49
+ await Promise.all(fleetWorkers.map((worker) => worker.done));
50
+ },
51
+ stop: async () => {
52
+ stop.abort();
53
+ await Promise.all([...running.values()].map((worker) => worker.done));
54
+ },
55
+ };
56
+ }
57
+ //# sourceMappingURL=party-workers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party-workers.js","sourceRoot":"","sources":["../src/party-workers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,72 @@
1
1
  {
2
2
  "name": "@aeolus-fleet/gateway",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.0",
4
+ "description": "Aeolus gateway: outside MCP servers and clients join a fleet as ships, through one gateway beside core.",
5
+ "keywords": [
6
+ "ai-agents",
7
+ "mcp",
8
+ "model-context-protocol",
9
+ "gateway"
10
+ ],
11
+ "license": "Apache-2.0",
12
+ "type": "module",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/ThomasHendrickx/aeolus-fleet-gateway.git"
16
+ },
17
+ "packageManager": "npm@11.19.1",
18
+ "engines": {
19
+ "node": ">=26"
20
+ },
21
+ "bin": {
22
+ "aeolus-gateway": "dist/bin/aeolus-gateway.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "prisma.config.ts",
27
+ "src/adapters/prisma/schema.prisma",
28
+ "src/adapters/prisma/migrations"
29
+ ],
30
+ "scripts": {
31
+ "postinstall": "prisma generate",
32
+ "generate": "prisma generate",
33
+ "build": "tsc --project tsconfig.build.json",
34
+ "typecheck": "tsc --project tsconfig.json",
35
+ "lint": "eslint --max-warnings 0 .",
36
+ "test": "vitest run",
37
+ "test:unit": "vitest run --project '*:unit'",
38
+ "test:integration": "vitest run --project '*:integration'",
39
+ "start": "node dist/bin/aeolus-gateway.js start",
40
+ "db:migrate": "tsx --env-file-if-exists=.env src/bin/aeolus-gateway.ts migrate"
41
+ },
42
+ "dependencies": {
43
+ "@aeolus-fleet/common": "^0.27.0",
44
+ "@fastify/websocket": "^11.3.4",
45
+ "@modelcontextprotocol/client": "^2.3.1",
46
+ "@modelcontextprotocol/server": "^2.3.1",
47
+ "@prisma/adapter-pg": "^7.10.1",
48
+ "@prisma/client": "^7.10.1",
49
+ "@trpc/server": "^11.19.0",
50
+ "fastify": "^5.12.7",
51
+ "pg": "^8.23.1",
52
+ "prisma": "^7.10.1",
53
+ "zod": "^4.6.5"
54
+ },
55
+ "devDependencies": {
56
+ "@aeolus-fleet/core": "0.27.0",
57
+ "@eslint/js": "^10.0.1",
58
+ "@modelcontextprotocol/ext-tasks": "0.2.2",
59
+ "@testcontainers/postgresql": "^12.2.0",
60
+ "@types/node": "^26.6.3",
61
+ "@types/pg": "^8.23.1",
62
+ "@types/ws": "^8.18.2",
63
+ "eslint": "^10.11.0",
64
+ "eslint-plugin-check-file": "^3.3.2",
65
+ "testcontainers": "^12.2.0",
66
+ "tsx": "^4.23.15",
67
+ "typescript": "~6.0.3",
68
+ "typescript-eslint": "^8.71.0",
69
+ "vitest": "^5.0.3",
70
+ "ws": "^8.22.0"
71
+ }
72
+ }
@@ -0,0 +1,18 @@
1
+ import { existsSync } from 'node:fs';
2
+
3
+ import { defineConfig } from 'prisma/config';
4
+
5
+ if (existsSync('.env')) {
6
+ process.loadEnvFile('.env');
7
+ }
8
+
9
+ export default defineConfig({
10
+ schema: 'src/adapters/prisma/schema.prisma',
11
+ migrations: {
12
+ path: 'src/adapters/prisma/migrations',
13
+ },
14
+ datasource: {
15
+ // Only migrate commands need the URL; `prisma generate` runs without one.
16
+ url: process.env.DATABASE_URL,
17
+ },
18
+ });