@aeolus-fleet/gateway 0.0.0-stage → 0.28.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 (528) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +105 -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/page-sessions.d.ts +15 -0
  10. package/dist/adapters/crypto/page-sessions.js +40 -0
  11. package/dist/adapters/crypto/page-sessions.js.map +1 -0
  12. package/dist/adapters/crypto/request-hasher.d.ts +3 -0
  13. package/dist/adapters/crypto/request-hasher.js +4 -0
  14. package/dist/adapters/crypto/request-hasher.js.map +1 -0
  15. package/dist/adapters/crypto/request-ids.d.ts +4 -0
  16. package/dist/adapters/crypto/request-ids.js +7 -0
  17. package/dist/adapters/crypto/request-ids.js.map +1 -0
  18. package/dist/adapters/crypto/sealer.d.ts +14 -0
  19. package/dist/adapters/crypto/sealer.js +41 -0
  20. package/dist/adapters/crypto/sealer.js.map +1 -0
  21. package/dist/adapters/crypto/ship-aliases.d.ts +7 -0
  22. package/dist/adapters/crypto/ship-aliases.js +19 -0
  23. package/dist/adapters/crypto/ship-aliases.js.map +1 -0
  24. package/dist/adapters/crypto/sign-in-seals.d.ts +7 -0
  25. package/dist/adapters/crypto/sign-in-seals.js +25 -0
  26. package/dist/adapters/crypto/sign-in-seals.js.map +1 -0
  27. package/dist/adapters/crypto/waiting-seals.d.ts +3 -0
  28. package/dist/adapters/crypto/waiting-seals.js +24 -0
  29. package/dist/adapters/crypto/waiting-seals.js.map +1 -0
  30. package/dist/adapters/fleet/actor-door.d.ts +20 -0
  31. package/dist/adapters/fleet/actor-door.js +75 -0
  32. package/dist/adapters/fleet/actor-door.js.map +1 -0
  33. package/dist/adapters/fleet/console-sessions.d.ts +2 -0
  34. package/dist/adapters/fleet/console-sessions.js +23 -0
  35. package/dist/adapters/fleet/console-sessions.js.map +1 -0
  36. package/dist/adapters/fleet/core-version.d.ts +11 -0
  37. package/dist/adapters/fleet/core-version.js +18 -0
  38. package/dist/adapters/fleet/core-version.js.map +1 -0
  39. package/dist/adapters/fleet/fleet-network.d.ts +2 -0
  40. package/dist/adapters/fleet/fleet-network.js +34 -0
  41. package/dist/adapters/fleet/fleet-network.js.map +1 -0
  42. package/dist/adapters/fleet/logged-verified-facts.d.ts +13 -0
  43. package/dist/adapters/fleet/logged-verified-facts.js +18 -0
  44. package/dist/adapters/fleet/logged-verified-facts.js.map +1 -0
  45. package/dist/adapters/fleet/proxy-ship-reads.d.ts +7 -0
  46. package/dist/adapters/fleet/proxy-ship-reads.js +24 -0
  47. package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -0
  48. package/dist/adapters/fleet/proxy-ships-as-actor.d.ts +3 -0
  49. package/dist/adapters/fleet/proxy-ships-as-actor.js +25 -0
  50. package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -0
  51. package/dist/adapters/fleet/rest-fleet-door.d.ts +14 -0
  52. package/dist/adapters/fleet/rest-fleet-door.js +205 -0
  53. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -0
  54. package/dist/adapters/http/add-server-page.d.ts +7 -0
  55. package/dist/adapters/http/add-server-page.js +175 -0
  56. package/dist/adapters/http/add-server-page.js.map +1 -0
  57. package/dist/adapters/http/delivery-page.d.ts +24 -0
  58. package/dist/adapters/http/delivery-page.js +115 -0
  59. package/dist/adapters/http/delivery-page.js.map +1 -0
  60. package/dist/adapters/http/html.d.ts +15 -0
  61. package/dist/adapters/http/html.js +53 -0
  62. package/dist/adapters/http/html.js.map +1 -0
  63. package/dist/adapters/http/live.d.ts +29 -0
  64. package/dist/adapters/http/live.js +100 -0
  65. package/dist/adapters/http/live.js.map +1 -0
  66. package/dist/adapters/http/mcp-endpoint.d.ts +20 -0
  67. package/dist/adapters/http/mcp-endpoint.js +164 -0
  68. package/dist/adapters/http/mcp-endpoint.js.map +1 -0
  69. package/dist/adapters/http/mcp-task.d.ts +45 -0
  70. package/dist/adapters/http/mcp-task.js +35 -0
  71. package/dist/adapters/http/mcp-task.js.map +1 -0
  72. package/dist/adapters/http/oauth-routes.d.ts +47 -0
  73. package/dist/adapters/http/oauth-routes.js +337 -0
  74. package/dist/adapters/http/oauth-routes.js.map +1 -0
  75. package/dist/adapters/http/outside-parties-page.d.ts +33 -0
  76. package/dist/adapters/http/outside-parties-page.js +153 -0
  77. package/dist/adapters/http/outside-parties-page.js.map +1 -0
  78. package/dist/adapters/http/outside-party-page.d.ts +7 -0
  79. package/dist/adapters/http/outside-party-page.js +212 -0
  80. package/dist/adapters/http/outside-party-page.js.map +1 -0
  81. package/dist/adapters/http/overview-page.d.ts +17 -0
  82. package/dist/adapters/http/overview-page.js +298 -0
  83. package/dist/adapters/http/overview-page.js.map +1 -0
  84. package/dist/adapters/http/parties-page.d.ts +7 -0
  85. package/dist/adapters/http/parties-page.js +139 -0
  86. package/dist/adapters/http/parties-page.js.map +1 -0
  87. package/dist/adapters/http/person-tools.d.ts +22 -0
  88. package/dist/adapters/http/person-tools.js +98 -0
  89. package/dist/adapters/http/person-tools.js.map +1 -0
  90. package/dist/adapters/http/scope-rows.d.ts +10 -0
  91. package/dist/adapters/http/scope-rows.js +30 -0
  92. package/dist/adapters/http/scope-rows.js.map +1 -0
  93. package/dist/adapters/http/signal.d.ts +61 -0
  94. package/dist/adapters/http/signal.js +263 -0
  95. package/dist/adapters/http/signal.js.map +1 -0
  96. package/dist/adapters/http/version.d.ts +6 -0
  97. package/dist/adapters/http/version.js +12 -0
  98. package/dist/adapters/http/version.js.map +1 -0
  99. package/dist/adapters/mcp/mcp-servers.d.ts +2 -0
  100. package/dist/adapters/mcp/mcp-servers.js +154 -0
  101. package/dist/adapters/mcp/mcp-servers.js.map +1 -0
  102. package/dist/adapters/oauth/client-metadata-documents.d.ts +9 -0
  103. package/dist/adapters/oauth/client-metadata-documents.js +25 -0
  104. package/dist/adapters/oauth/client-metadata-documents.js.map +1 -0
  105. package/dist/adapters/pagasae/pagasae-client.d.ts +8 -0
  106. package/dist/adapters/pagasae/pagasae-client.js +88 -0
  107. package/dist/adapters/pagasae/pagasae-client.js.map +1 -0
  108. package/dist/adapters/prisma/account-grants.d.ts +4 -0
  109. package/dist/adapters/prisma/account-grants.js +27 -0
  110. package/dist/adapters/prisma/account-grants.js.map +1 -0
  111. package/dist/adapters/prisma/calls.d.ts +4 -0
  112. package/dist/adapters/prisma/calls.js +35 -0
  113. package/dist/adapters/prisma/calls.js.map +1 -0
  114. package/dist/adapters/prisma/changes.d.ts +21 -0
  115. package/dist/adapters/prisma/changes.js +86 -0
  116. package/dist/adapters/prisma/changes.js.map +1 -0
  117. package/dist/adapters/prisma/client-calls.d.ts +4 -0
  118. package/dist/adapters/prisma/client-calls.js +59 -0
  119. package/dist/adapters/prisma/client-calls.js.map +1 -0
  120. package/dist/adapters/prisma/client.d.ts +8 -0
  121. package/dist/adapters/prisma/client.js +11 -0
  122. package/dist/adapters/prisma/client.js.map +1 -0
  123. package/dist/adapters/prisma/connection-store.d.ts +4 -0
  124. package/dist/adapters/prisma/connection-store.js +28 -0
  125. package/dist/adapters/prisma/connection-store.js.map +1 -0
  126. package/dist/adapters/prisma/fleet-forgetter.d.ts +4 -0
  127. package/dist/adapters/prisma/fleet-forgetter.js +10 -0
  128. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -0
  129. package/dist/adapters/prisma/fleet-switches.d.ts +4 -0
  130. package/dist/adapters/prisma/fleet-switches.js +10 -0
  131. package/dist/adapters/prisma/fleet-switches.js.map +1 -0
  132. package/dist/adapters/prisma/generated/browser.d.ts +108 -0
  133. package/dist/adapters/prisma/generated/browser.js +18 -0
  134. package/dist/adapters/prisma/generated/browser.js.map +1 -0
  135. package/dist/adapters/prisma/generated/client.d.ts +127 -0
  136. package/dist/adapters/prisma/generated/client.js +38 -0
  137. package/dist/adapters/prisma/generated/client.js.map +1 -0
  138. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +490 -0
  139. package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
  140. package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
  141. package/dist/adapters/prisma/generated/enums.d.ts +1 -0
  142. package/dist/adapters/prisma/generated/enums.js +12 -0
  143. package/dist/adapters/prisma/generated/enums.js.map +1 -0
  144. package/dist/adapters/prisma/generated/internal/class.d.ts +319 -0
  145. package/dist/adapters/prisma/generated/internal/class.js +50 -0
  146. package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
  147. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2102 -0
  148. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +294 -0
  149. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
  150. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
  151. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +264 -0
  152. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
  153. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +1088 -0
  154. package/dist/adapters/prisma/generated/models/AccountGrant.js +2 -0
  155. package/dist/adapters/prisma/generated/models/AccountGrant.js.map +1 -0
  156. package/dist/adapters/prisma/generated/models/AuthorizationCode.d.ts +1171 -0
  157. package/dist/adapters/prisma/generated/models/AuthorizationCode.js +2 -0
  158. package/dist/adapters/prisma/generated/models/AuthorizationCode.js.map +1 -0
  159. package/dist/adapters/prisma/generated/models/Call.d.ts +994 -0
  160. package/dist/adapters/prisma/generated/models/Call.js +2 -0
  161. package/dist/adapters/prisma/generated/models/Call.js.map +1 -0
  162. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +1119 -0
  163. package/dist/adapters/prisma/generated/models/ClientCall.js +2 -0
  164. package/dist/adapters/prisma/generated/models/ClientCall.js.map +1 -0
  165. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +1129 -0
  166. package/dist/adapters/prisma/generated/models/ClientCallReply.js +2 -0
  167. package/dist/adapters/prisma/generated/models/ClientCallReply.js.map +1 -0
  168. package/dist/adapters/prisma/generated/models/Connection.d.ts +1011 -0
  169. package/dist/adapters/prisma/generated/models/Connection.js +2 -0
  170. package/dist/adapters/prisma/generated/models/Connection.js.map +1 -0
  171. package/dist/adapters/prisma/generated/models/FleetSwitch.d.ts +945 -0
  172. package/dist/adapters/prisma/generated/models/FleetSwitch.js +2 -0
  173. package/dist/adapters/prisma/generated/models/FleetSwitch.js.map +1 -0
  174. package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1030 -0
  175. package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
  176. package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
  177. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +1224 -0
  178. package/dist/adapters/prisma/generated/models/IssuedToken.js +2 -0
  179. package/dist/adapters/prisma/generated/models/IssuedToken.js.map +1 -0
  180. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +1005 -0
  181. package/dist/adapters/prisma/generated/models/OAuthClient.js +2 -0
  182. package/dist/adapters/prisma/generated/models/OAuthClient.js.map +1 -0
  183. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +1087 -0
  184. package/dist/adapters/prisma/generated/models/OpenedDelivery.js +2 -0
  185. package/dist/adapters/prisma/generated/models/OpenedDelivery.js.map +1 -0
  186. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.d.ts +942 -0
  187. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js +2 -0
  188. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js.map +1 -0
  189. package/dist/adapters/prisma/generated/models/OwnerQuestion.d.ts +1035 -0
  190. package/dist/adapters/prisma/generated/models/OwnerQuestion.js +2 -0
  191. package/dist/adapters/prisma/generated/models/OwnerQuestion.js.map +1 -0
  192. package/dist/adapters/prisma/generated/models/Party.d.ts +1310 -0
  193. package/dist/adapters/prisma/generated/models/Party.js +2 -0
  194. package/dist/adapters/prisma/generated/models/Party.js.map +1 -0
  195. package/dist/adapters/prisma/generated/models/PendingRequest.d.ts +1252 -0
  196. package/dist/adapters/prisma/generated/models/PendingRequest.js +2 -0
  197. package/dist/adapters/prisma/generated/models/PendingRequest.js.map +1 -0
  198. package/dist/adapters/prisma/generated/models/PersonCrew.d.ts +974 -0
  199. package/dist/adapters/prisma/generated/models/PersonCrew.js +2 -0
  200. package/dist/adapters/prisma/generated/models/PersonCrew.js.map +1 -0
  201. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.d.ts +1120 -0
  202. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js +2 -0
  203. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js.map +1 -0
  204. package/dist/adapters/prisma/generated/models/ToolMark.d.ts +947 -0
  205. package/dist/adapters/prisma/generated/models/ToolMark.js +2 -0
  206. package/dist/adapters/prisma/generated/models/ToolMark.js.map +1 -0
  207. package/dist/adapters/prisma/generated/models.d.ts +19 -0
  208. package/dist/adapters/prisma/generated/models.js +2 -0
  209. package/dist/adapters/prisma/generated/models.js.map +1 -0
  210. package/dist/adapters/prisma/installation-requests.d.ts +4 -0
  211. package/dist/adapters/prisma/installation-requests.js +25 -0
  212. package/dist/adapters/prisma/installation-requests.js.map +1 -0
  213. package/dist/adapters/prisma/migrate.d.ts +5 -0
  214. package/dist/adapters/prisma/migrate.js +53 -0
  215. package/dist/adapters/prisma/migrate.js.map +1 -0
  216. package/dist/adapters/prisma/oauth-stores.d.ts +5 -0
  217. package/dist/adapters/prisma/oauth-stores.js +85 -0
  218. package/dist/adapters/prisma/oauth-stores.js.map +1 -0
  219. package/dist/adapters/prisma/opened-deliveries.d.ts +4 -0
  220. package/dist/adapters/prisma/opened-deliveries.js +29 -0
  221. package/dist/adapters/prisma/opened-deliveries.js.map +1 -0
  222. package/dist/adapters/prisma/outcome-notices.d.ts +4 -0
  223. package/dist/adapters/prisma/outcome-notices.js +24 -0
  224. package/dist/adapters/prisma/outcome-notices.js.map +1 -0
  225. package/dist/adapters/prisma/outside-party-switches.d.ts +4 -0
  226. package/dist/adapters/prisma/outside-party-switches.js +10 -0
  227. package/dist/adapters/prisma/outside-party-switches.js.map +1 -0
  228. package/dist/adapters/prisma/owner-questions.d.ts +8 -0
  229. package/dist/adapters/prisma/owner-questions.js +54 -0
  230. package/dist/adapters/prisma/owner-questions.js.map +1 -0
  231. package/dist/adapters/prisma/party-store.d.ts +7 -0
  232. package/dist/adapters/prisma/party-store.js +71 -0
  233. package/dist/adapters/prisma/party-store.js.map +1 -0
  234. package/dist/adapters/prisma/pending-requests.d.ts +11 -0
  235. package/dist/adapters/prisma/pending-requests.js +128 -0
  236. package/dist/adapters/prisma/pending-requests.js.map +1 -0
  237. package/dist/adapters/prisma/person-crews.d.ts +4 -0
  238. package/dist/adapters/prisma/person-crews.js +18 -0
  239. package/dist/adapters/prisma/person-crews.js.map +1 -0
  240. package/dist/adapters/prisma/tool-marks.d.ts +4 -0
  241. package/dist/adapters/prisma/tool-marks.js +15 -0
  242. package/dist/adapters/prisma/tool-marks.js.map +1 -0
  243. package/dist/adapters/timers/sleep.d.ts +3 -0
  244. package/dist/adapters/timers/sleep.js +11 -0
  245. package/dist/adapters/timers/sleep.js.map +1 -0
  246. package/dist/adapters/trpc/router.d.ts +606 -0
  247. package/dist/adapters/trpc/router.js +519 -0
  248. package/dist/adapters/trpc/router.js.map +1 -0
  249. package/dist/app.d.ts +43 -0
  250. package/dist/app.js +446 -0
  251. package/dist/app.js.map +1 -0
  252. package/dist/bin/aeolus-gateway.d.ts +2 -0
  253. package/dist/bin/aeolus-gateway.js +65 -0
  254. package/dist/bin/aeolus-gateway.js.map +1 -0
  255. package/dist/config.d.ts +41 -0
  256. package/dist/config.js +65 -0
  257. package/dist/config.js.map +1 -0
  258. package/dist/core/actors/authenticate-actor.d.ts +54 -0
  259. package/dist/core/actors/authenticate-actor.js +42 -0
  260. package/dist/core/actors/authenticate-actor.js.map +1 -0
  261. package/dist/core/actors/credential-of.d.ts +27 -0
  262. package/dist/core/actors/credential-of.js +25 -0
  263. package/dist/core/actors/credential-of.js.map +1 -0
  264. package/dist/core/connection/connect.d.ts +26 -0
  265. package/dist/core/connection/connect.js +58 -0
  266. package/dist/core/connection/connect.js.map +1 -0
  267. package/dist/core/connection/ports.d.ts +92 -0
  268. package/dist/core/connection/ports.js +2 -0
  269. package/dist/core/connection/ports.js.map +1 -0
  270. package/dist/core/connection/read-connection.d.ts +14 -0
  271. package/dist/core/connection/read-connection.js +24 -0
  272. package/dist/core/connection/read-connection.js.map +1 -0
  273. package/dist/core/installation/delete-fleet.d.ts +21 -0
  274. package/dist/core/installation/delete-fleet.js +21 -0
  275. package/dist/core/installation/delete-fleet.js.map +1 -0
  276. package/dist/core/installation/ports.d.ts +43 -0
  277. package/dist/core/installation/ports.js +2 -0
  278. package/dist/core/installation/ports.js.map +1 -0
  279. package/dist/core/installation/read-fleet.d.ts +18 -0
  280. package/dist/core/installation/read-fleet.js +9 -0
  281. package/dist/core/installation/read-fleet.js.map +1 -0
  282. package/dist/core/installation/request-id.d.ts +8 -0
  283. package/dist/core/installation/request-id.js +10 -0
  284. package/dist/core/installation/request-id.js.map +1 -0
  285. package/dist/core/installation/served.d.ts +12 -0
  286. package/dist/core/installation/served.js +8 -0
  287. package/dist/core/installation/served.js.map +1 -0
  288. package/dist/core/installation/set-fleet-enabled.d.ts +25 -0
  289. package/dist/core/installation/set-fleet-enabled.js +22 -0
  290. package/dist/core/installation/set-fleet-enabled.js.map +1 -0
  291. package/dist/core/mcp-in/call-tool.d.ts +42 -0
  292. package/dist/core/mcp-in/call-tool.js +82 -0
  293. package/dist/core/mcp-in/call-tool.js.map +1 -0
  294. package/dist/core/mcp-in/client-call.d.ts +51 -0
  295. package/dist/core/mcp-in/client-call.js +39 -0
  296. package/dist/core/mcp-in/client-call.js.map +1 -0
  297. package/dist/core/mcp-in/collect-replies.d.ts +22 -0
  298. package/dist/core/mcp-in/collect-replies.js +66 -0
  299. package/dist/core/mcp-in/collect-replies.js.map +1 -0
  300. package/dist/core/mcp-in/list-tools.d.ts +48 -0
  301. package/dist/core/mcp-in/list-tools.js +70 -0
  302. package/dist/core/mcp-in/list-tools.js.map +1 -0
  303. package/dist/core/mcp-in/ports.d.ts +108 -0
  304. package/dist/core/mcp-in/ports.js +2 -0
  305. package/dist/core/mcp-in/ports.js.map +1 -0
  306. package/dist/core/mcp-in/read-client-call.d.ts +23 -0
  307. package/dist/core/mcp-in/read-client-call.js +15 -0
  308. package/dist/core/mcp-in/read-client-call.js.map +1 -0
  309. package/dist/core/mcp-out/content-types.d.ts +12 -0
  310. package/dist/core/mcp-out/content-types.js +28 -0
  311. package/dist/core/mcp-out/content-types.js.map +1 -0
  312. package/dist/core/mcp-out/hand-call.d.ts +105 -0
  313. package/dist/core/mcp-out/hand-call.js +118 -0
  314. package/dist/core/mcp-out/hand-call.js.map +1 -0
  315. package/dist/core/mcp-out/mark-tool.d.ts +20 -0
  316. package/dist/core/mcp-out/mark-tool.js +17 -0
  317. package/dist/core/mcp-out/mark-tool.js.map +1 -0
  318. package/dist/core/mcp-out/ports.d.ts +66 -0
  319. package/dist/core/mcp-out/ports.js +2 -0
  320. package/dist/core/mcp-out/ports.js.map +1 -0
  321. package/dist/core/mcp-out/run-party.d.ts +26 -0
  322. package/dist/core/mcp-out/run-party.js +62 -0
  323. package/dist/core/mcp-out/run-party.js.map +1 -0
  324. package/dist/core/mcp-out/state-party.d.ts +39 -0
  325. package/dist/core/mcp-out/state-party.js +30 -0
  326. package/dist/core/mcp-out/state-party.js.map +1 -0
  327. package/dist/core/mcp-out/statement.d.ts +36 -0
  328. package/dist/core/mcp-out/statement.js +34 -0
  329. package/dist/core/mcp-out/statement.js.map +1 -0
  330. package/dist/core/oauth/authenticate-access-token.d.ts +25 -0
  331. package/dist/core/oauth/authenticate-access-token.js +19 -0
  332. package/dist/core/oauth/authenticate-access-token.js.map +1 -0
  333. package/dist/core/oauth/exchange-token.d.ts +32 -0
  334. package/dist/core/oauth/exchange-token.js +98 -0
  335. package/dist/core/oauth/exchange-token.js.map +1 -0
  336. package/dist/core/oauth/issue-code.d.ts +23 -0
  337. package/dist/core/oauth/issue-code.js +34 -0
  338. package/dist/core/oauth/issue-code.js.map +1 -0
  339. package/dist/core/oauth/ports.d.ts +105 -0
  340. package/dist/core/oauth/ports.js +2 -0
  341. package/dist/core/oauth/ports.js.map +1 -0
  342. package/dist/core/oauth/read-authorization.d.ts +43 -0
  343. package/dist/core/oauth/read-authorization.js +74 -0
  344. package/dist/core/oauth/read-authorization.js.map +1 -0
  345. package/dist/core/oauth/redirect-uri.d.ts +6 -0
  346. package/dist/core/oauth/redirect-uri.js +20 -0
  347. package/dist/core/oauth/redirect-uri.js.map +1 -0
  348. package/dist/core/oauth/register-client.d.ts +22 -0
  349. package/dist/core/oauth/register-client.js +20 -0
  350. package/dist/core/oauth/register-client.js.map +1 -0
  351. package/dist/core/operator/authenticate-operator.d.ts +22 -0
  352. package/dist/core/operator/authenticate-operator.js +26 -0
  353. package/dist/core/operator/authenticate-operator.js.map +1 -0
  354. package/dist/core/operator/ports.d.ts +15 -0
  355. package/dist/core/operator/ports.js +2 -0
  356. package/dist/core/operator/ports.js.map +1 -0
  357. package/dist/core/outside-parties/ports.d.ts +17 -0
  358. package/dist/core/outside-parties/ports.js +2 -0
  359. package/dist/core/outside-parties/ports.js.map +1 -0
  360. package/dist/core/outside-parties/set-outside-parties.d.ts +36 -0
  361. package/dist/core/outside-parties/set-outside-parties.js +38 -0
  362. package/dist/core/outside-parties/set-outside-parties.js.map +1 -0
  363. package/dist/core/parties/approve-party.d.ts +55 -0
  364. package/dist/core/parties/approve-party.js +127 -0
  365. package/dist/core/parties/approve-party.js.map +1 -0
  366. package/dist/core/parties/change-party.d.ts +42 -0
  367. package/dist/core/parties/change-party.js +49 -0
  368. package/dist/core/parties/change-party.js.map +1 -0
  369. package/dist/core/parties/check-server.d.ts +24 -0
  370. package/dist/core/parties/check-server.js +21 -0
  371. package/dist/core/parties/check-server.js.map +1 -0
  372. package/dist/core/parties/crew-party.d.ts +21 -0
  373. package/dist/core/parties/crew-party.js +29 -0
  374. package/dist/core/parties/crew-party.js.map +1 -0
  375. package/dist/core/parties/list-parties.d.ts +29 -0
  376. package/dist/core/parties/list-parties.js +39 -0
  377. package/dist/core/parties/list-parties.js.map +1 -0
  378. package/dist/core/parties/party.d.ts +52 -0
  379. package/dist/core/parties/party.js +24 -0
  380. package/dist/core/parties/party.js.map +1 -0
  381. package/dist/core/parties/ports.d.ts +74 -0
  382. package/dist/core/parties/ports.js +2 -0
  383. package/dist/core/parties/ports.js.map +1 -0
  384. package/dist/core/parties/read-party-tools.d.ts +22 -0
  385. package/dist/core/parties/read-party-tools.js +22 -0
  386. package/dist/core/parties/read-party-tools.js.map +1 -0
  387. package/dist/core/parties/retire-party.d.ts +29 -0
  388. package/dist/core/parties/retire-party.js +43 -0
  389. package/dist/core/parties/retire-party.js.map +1 -0
  390. package/dist/core/parties/shown-party.d.ts +27 -0
  391. package/dist/core/parties/shown-party.js +10 -0
  392. package/dist/core/parties/shown-party.js.map +1 -0
  393. package/dist/core/people/answer-delivery.d.ts +24 -0
  394. package/dist/core/people/answer-delivery.js +28 -0
  395. package/dist/core/people/answer-delivery.js.map +1 -0
  396. package/dist/core/people/crew-person-ship.d.ts +42 -0
  397. package/dist/core/people/crew-person-ship.js +59 -0
  398. package/dist/core/people/crew-person-ship.js.map +1 -0
  399. package/dist/core/people/done-delivery.d.ts +16 -0
  400. package/dist/core/people/done-delivery.js +9 -0
  401. package/dist/core/people/done-delivery.js.map +1 -0
  402. package/dist/core/people/inbox-entry.d.ts +14 -0
  403. package/dist/core/people/inbox-entry.js +11 -0
  404. package/dist/core/people/inbox-entry.js.map +1 -0
  405. package/dist/core/people/open-delivery.d.ts +30 -0
  406. package/dist/core/people/open-delivery.js +40 -0
  407. package/dist/core/people/open-delivery.js.map +1 -0
  408. package/dist/core/people/opened-of.d.ts +29 -0
  409. package/dist/core/people/opened-of.js +30 -0
  410. package/dist/core/people/opened-of.js.map +1 -0
  411. package/dist/core/people/person-crew.d.ts +39 -0
  412. package/dist/core/people/person-crew.js +61 -0
  413. package/dist/core/people/person-crew.js.map +1 -0
  414. package/dist/core/people/ports.d.ts +102 -0
  415. package/dist/core/people/ports.js +2 -0
  416. package/dist/core/people/ports.js.map +1 -0
  417. package/dist/core/people/read-inbox.d.ts +37 -0
  418. package/dist/core/people/read-inbox.js +36 -0
  419. package/dist/core/people/read-inbox.js.map +1 -0
  420. package/dist/core/requests/ask-for-client.d.ts +45 -0
  421. package/dist/core/requests/ask-for-client.js +33 -0
  422. package/dist/core/requests/ask-for-client.js.map +1 -0
  423. package/dist/core/requests/ask-for-server.d.ts +32 -0
  424. package/dist/core/requests/ask-for-server.js +42 -0
  425. package/dist/core/requests/ask-for-server.js.map +1 -0
  426. package/dist/core/requests/ask-owners.d.ts +28 -0
  427. package/dist/core/requests/ask-owners.js +85 -0
  428. package/dist/core/requests/ask-owners.js.map +1 -0
  429. package/dist/core/requests/decide-request.d.ts +53 -0
  430. package/dist/core/requests/decide-request.js +83 -0
  431. package/dist/core/requests/decide-request.js.map +1 -0
  432. package/dist/core/requests/expire-requests.d.ts +14 -0
  433. package/dist/core/requests/expire-requests.js +21 -0
  434. package/dist/core/requests/expire-requests.js.map +1 -0
  435. package/dist/core/requests/list-mine.d.ts +16 -0
  436. package/dist/core/requests/list-mine.js +20 -0
  437. package/dist/core/requests/list-mine.js.map +1 -0
  438. package/dist/core/requests/list-to-decide.d.ts +11 -0
  439. package/dist/core/requests/list-to-decide.js +13 -0
  440. package/dist/core/requests/list-to-decide.js.map +1 -0
  441. package/dist/core/requests/open-request.d.ts +21 -0
  442. package/dist/core/requests/open-request.js +26 -0
  443. package/dist/core/requests/open-request.js.map +1 -0
  444. package/dist/core/requests/outcome-notice.d.ts +13 -0
  445. package/dist/core/requests/outcome-notice.js +26 -0
  446. package/dist/core/requests/outcome-notice.js.map +1 -0
  447. package/dist/core/requests/ports.d.ts +191 -0
  448. package/dist/core/requests/ports.js +2 -0
  449. package/dist/core/requests/ports.js.map +1 -0
  450. package/dist/core/requests/read-waiting.d.ts +46 -0
  451. package/dist/core/requests/read-waiting.js +41 -0
  452. package/dist/core/requests/read-waiting.js.map +1 -0
  453. package/dist/core/requests/request-state.d.ts +5 -0
  454. package/dist/core/requests/request-state.js +10 -0
  455. package/dist/core/requests/request-state.js.map +1 -0
  456. package/dist/core/requests/tell-outcomes.d.ts +24 -0
  457. package/dist/core/requests/tell-outcomes.js +39 -0
  458. package/dist/core/requests/tell-outcomes.js.map +1 -0
  459. package/dist/core/requests/watch-waiting.d.ts +32 -0
  460. package/dist/core/requests/watch-waiting.js +31 -0
  461. package/dist/core/requests/watch-waiting.js.map +1 -0
  462. package/dist/core/shared/clock.d.ts +4 -0
  463. package/dist/core/shared/clock.js +2 -0
  464. package/dist/core/shared/clock.js.map +1 -0
  465. package/dist/core/shared/errors.d.ts +10 -0
  466. package/dist/core/shared/errors.js +6 -0
  467. package/dist/core/shared/errors.js.map +1 -0
  468. package/dist/core/shared/result.d.ts +16 -0
  469. package/dist/core/shared/result.js +7 -0
  470. package/dist/core/shared/result.js.map +1 -0
  471. package/dist/core/sign-in/account-token.d.ts +42 -0
  472. package/dist/core/sign-in/account-token.js +46 -0
  473. package/dist/core/sign-in/account-token.js.map +1 -0
  474. package/dist/core/sign-in/complete-sign-in.d.ts +66 -0
  475. package/dist/core/sign-in/complete-sign-in.js +73 -0
  476. package/dist/core/sign-in/complete-sign-in.js.map +1 -0
  477. package/dist/core/sign-in/end-sign-ins.d.ts +19 -0
  478. package/dist/core/sign-in/end-sign-ins.js +17 -0
  479. package/dist/core/sign-in/end-sign-ins.js.map +1 -0
  480. package/dist/core/sign-in/ports.d.ts +115 -0
  481. package/dist/core/sign-in/ports.js +2 -0
  482. package/dist/core/sign-in/ports.js.map +1 -0
  483. package/dist/core/sign-in/sign-out.d.ts +10 -0
  484. package/dist/core/sign-in/sign-out.js +9 -0
  485. package/dist/core/sign-in/sign-out.js.map +1 -0
  486. package/dist/core/sign-in/start-page-sign-in.d.ts +25 -0
  487. package/dist/core/sign-in/start-page-sign-in.js +30 -0
  488. package/dist/core/sign-in/start-page-sign-in.js.map +1 -0
  489. package/dist/core/sign-in/start-sign-in.d.ts +30 -0
  490. package/dist/core/sign-in/start-sign-in.js +25 -0
  491. package/dist/core/sign-in/start-sign-in.js.map +1 -0
  492. package/dist/core/vault/credential.d.ts +18 -0
  493. package/dist/core/vault/credential.js +2 -0
  494. package/dist/core/vault/credential.js.map +1 -0
  495. package/dist/outcome-worker.d.ts +29 -0
  496. package/dist/outcome-worker.js +60 -0
  497. package/dist/outcome-worker.js.map +1 -0
  498. package/dist/party-workers.d.ts +32 -0
  499. package/dist/party-workers.js +57 -0
  500. package/dist/party-workers.js.map +1 -0
  501. package/package.json +70 -4
  502. package/prisma.config.ts +18 -0
  503. package/src/adapters/prisma/migrations/20261018200000_init/migration.sql +35 -0
  504. package/src/adapters/prisma/migrations/20261018210000_parties/migration.sql +19 -0
  505. package/src/adapters/prisma/migrations/20261018220000_tool_marks/migration.sql +8 -0
  506. package/src/adapters/prisma/migrations/20261018230000_calls/migration.sql +13 -0
  507. package/src/adapters/prisma/migrations/20261019090000_oauth/migration.sql +60 -0
  508. package/src/adapters/prisma/migrations/20261019100000_client_parties/migration.sql +8 -0
  509. package/src/adapters/prisma/migrations/20261019110000_oauth_parties/migration.sql +5 -0
  510. package/src/adapters/prisma/migrations/20261019120000_client_calls/migration.sql +15 -0
  511. package/src/adapters/prisma/migrations/20261019130000_client_call_replies/migration.sql +20 -0
  512. package/src/adapters/prisma/migrations/20261019140000_identity_providers/migration.sql +10 -0
  513. package/src/adapters/prisma/migrations/20261020090000_no_identity_providers/migration.sql +2 -0
  514. package/src/adapters/prisma/migrations/20261020100000_account_grants_in_tokens/migration.sql +5 -0
  515. package/src/adapters/prisma/migrations/20261020110000_account_grants/migration.sql +15 -0
  516. package/src/adapters/prisma/migrations/20261020120000_person_crews/migration.sql +9 -0
  517. package/src/adapters/prisma/migrations/20261020130000_opened_deliveries/migration.sql +13 -0
  518. package/src/adapters/prisma/migrations/20261020140000_pending_requests/migration.sql +26 -0
  519. package/src/adapters/prisma/migrations/20261020150000_outside_party_switches/migration.sql +8 -0
  520. package/src/adapters/prisma/migrations/20261020160000_pending_requests_told/migration.sql +2 -0
  521. package/src/adapters/prisma/migrations/20261020170000_request_outcome_notices/migration.sql +17 -0
  522. package/src/adapters/prisma/migrations/20261020180000_owner_questions/migration.sql +11 -0
  523. package/src/adapters/prisma/migrations/20261020190000_request_changes/migration.sql +12 -0
  524. package/src/adapters/prisma/migrations/20261020200000_account_grant_scopes/migration.sql +2 -0
  525. package/src/adapters/prisma/migrations/20261020210000_party_owner_from_fleet/migration.sql +2 -0
  526. package/src/adapters/prisma/migrations/20261020220000_client_call_deadline_optional/migration.sql +2 -0
  527. package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
  528. package/src/adapters/prisma/schema.prisma +312 -0
@@ -0,0 +1,26 @@
1
+ /** How long a request is kept before it expires (decision 0056, Thomas). */
2
+ export const REQUEST_LIFETIME_MS = 7 * 24 * 60 * 60_000;
3
+ /**
4
+ * Use case: an account asks for an outside party (decision 0056). The one
5
+ * place a request opens, so who may ask is decided here alone (Thomas's
6
+ * question A): a signed-in account in the fleet, for now. A second request
7
+ * for the same client or server joins the one open.
8
+ */
9
+ export function createOpenRequest(deps) {
10
+ return ({ fleetId, subject, requester }) => {
11
+ const now = deps.clock.now();
12
+ return deps.requests.open({
13
+ fleetId,
14
+ requestId: deps.ids.newRequestId(),
15
+ subject,
16
+ requesters: [requester],
17
+ askedAt: now,
18
+ expiresAt: new Date(now.getTime() + REQUEST_LIFETIME_MS),
19
+ state: 'pending',
20
+ decidedBy: null,
21
+ decidedAt: null,
22
+ now,
23
+ });
24
+ };
25
+ }
26
+ //# sourceMappingURL=open-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-request.js","sourceRoot":"","sources":["../../../src/core/requests/open-request.ts"],"names":[],"mappings":"AAKA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAIxD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkE;IAClG,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACxB,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YAClC,OAAO;YACP,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC;YACxD,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;YACf,GAAG;SACJ,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { OutcomeNotice, PendingRequest } from './ports.js';
2
+ /**
3
+ * The outcomes to tell for a request that ended: one per requester with a
4
+ * person ship, for a request for an outside MCP server only. A client's
5
+ * requester is told by its browser, and one with no person ship on the
6
+ * gateway's page (decision 0056).
7
+ */
8
+ export declare function noticesOf(request: PendingRequest, ended: {
9
+ outcome: OutcomeNotice['outcome'];
10
+ partyName: string | null;
11
+ }): OutcomeNotice[];
12
+ /** What the message to the person says (P5-2 a). */
13
+ export declare function textOf(notice: OutcomeNotice): string;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The outcomes to tell for a request that ended: one per requester with a
3
+ * person ship, for a request for an outside MCP server only. A client's
4
+ * requester is told by its browser, and one with no person ship on the
5
+ * gateway's page (decision 0056).
6
+ */
7
+ export function noticesOf(request, ended) {
8
+ const { subject } = request;
9
+ if (subject.kind !== 'server') {
10
+ return [];
11
+ }
12
+ return request.requesters.flatMap(({ accountId, personShipId }) => personShipId === null ? [] : [{ fleetId: request.fleetId, requestId: request.requestId, accountId, personShipId, url: subject.url, outcome: ended.outcome, partyName: ended.partyName }]);
13
+ }
14
+ /** What the message to the person says (P5-2 a). */
15
+ export function textOf(notice) {
16
+ const asked = `Your request for ${notice.url}`;
17
+ switch (notice.outcome) {
18
+ case 'approved':
19
+ return `${asked} was approved: it is the outside party ${notice.partyName ?? notice.url}.`;
20
+ case 'denied':
21
+ return `${asked} was denied.`;
22
+ case 'expired':
23
+ return `${asked} expired after 7 days with no decision: ask again to try anew.`;
24
+ }
25
+ }
26
+ //# sourceMappingURL=outcome-notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-notice.js","sourceRoot":"","sources":["../../../src/core/requests/outcome-notice.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAuB,EAAE,KAAsE;IACvH,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAChE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CACzL,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,MAAM,CAAC,MAAqB;IAC1C,MAAM,KAAK,GAAG,oBAAoB,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/C,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,UAAU;YACb,OAAO,GAAG,KAAK,0CAA0C,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC;QAC7F,KAAK,QAAQ;YACX,OAAO,GAAG,KAAK,cAAc,CAAC;QAChC,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,gEAAgE,CAAC;IACpF,CAAC;AACH,CAAC"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * The gateway's pending requests (decision 0056): an outside MCP client's
3
+ * authorize request, or a person's request for an outside MCP server, in one
4
+ * list, kept 7 days, decided once by an actor holding gateway:approve.
5
+ */
6
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
7
+ import type { FleetRefusal } from '../connection/ports.js';
8
+ import type { Result } from '../shared/result.js';
9
+ /** What a request is for: an outside MCP client, by its OAuth client id and name, or an outside MCP server, by its address. */
10
+ export type RequestSubject = {
11
+ readonly kind: 'client';
12
+ readonly clientId: string;
13
+ readonly clientName: string;
14
+ } | {
15
+ readonly kind: 'server';
16
+ readonly url: string;
17
+ };
18
+ /** An account that asked, and its person ship, which hears the outcome. */
19
+ export interface Requester {
20
+ readonly accountId: string;
21
+ readonly personShipId: ShipId | null;
22
+ }
23
+ /**
24
+ * Where a request stands:
25
+ * - pending: it waits for a decision;
26
+ * - approving: an approver approved it, and its proxy ship is being commissioned; it still counts as open;
27
+ * - approved, denied: decided, the first decision counting;
28
+ * - expired: 7 days passed with no decision.
29
+ */
30
+ export type RequestState = 'pending' | 'approving' | 'approved' | 'denied' | 'expired';
31
+ /** Who decided: an actor (decision 0057), without its scopes. */
32
+ export type DecidedBy = {
33
+ readonly kind: 'operator' | 'viewer';
34
+ } | {
35
+ readonly kind: 'ship';
36
+ readonly shipId: ShipId;
37
+ } | {
38
+ readonly kind: 'account';
39
+ readonly accountId: string;
40
+ };
41
+ export interface PendingRequest {
42
+ readonly fleetId: FleetId;
43
+ readonly requestId: string;
44
+ readonly subject: RequestSubject;
45
+ readonly requesters: readonly Requester[];
46
+ readonly askedAt: Date;
47
+ readonly expiresAt: Date;
48
+ readonly state: RequestState;
49
+ readonly decidedBy: DecidedBy | null;
50
+ readonly decidedAt: Date | null;
51
+ }
52
+ /** Outbound port: the pending requests, by fleet. */
53
+ export interface PendingRequests {
54
+ /**
55
+ * Keeps a new request, or joins the one open for the same client or server
56
+ * in the fleet, adding its requester once. A pending one expired by now is
57
+ * marked expired first, so a new one opens.
58
+ */
59
+ open(request: PendingRequest & {
60
+ now: Date;
61
+ }): Promise<PendingRequest>;
62
+ find(fleetId: FleetId, requestId: string): Promise<PendingRequest | undefined>;
63
+ /** The latest request for the client or server the account asked for, in any state, and whether the account was told its end. */
64
+ latestAskedBy(fleetId: FleetId, asked: {
65
+ subject: RequestSubject;
66
+ accountId: string;
67
+ }): Promise<{
68
+ request: PendingRequest;
69
+ isTold: boolean;
70
+ } | undefined>;
71
+ /** Marks that the account was told the request ended, so its next try asks anew. */
72
+ markTold(fleetId: FleetId, told: {
73
+ requestId: string;
74
+ accountId: string;
75
+ }): Promise<void>;
76
+ /** The open requests not expired by now, the oldest first. */
77
+ listOpen(fleetId: FleetId, now: Date): Promise<PendingRequest[]>;
78
+ /** The requests an account asked in the fleet, in any state, the newest first. */
79
+ listMine(fleetId: FleetId, accountId: string): Promise<PendingRequest[]>;
80
+ /** Takes a pending request, not expired by now, for approving; false when it is not. */
81
+ claim(fleetId: FleetId, claim: {
82
+ requestId: string;
83
+ now: Date;
84
+ }): Promise<boolean>;
85
+ /** Gives an approving request back as pending, when its proxy ship was refused. */
86
+ release(fleetId: FleetId, requestId: string): Promise<void>;
87
+ /**
88
+ * Records the decision on a request in one of the states given, and the
89
+ * outcomes to tell, in one step; false when it was in none, so the first
90
+ * decision counts and only it is told.
91
+ */
92
+ decide(fleetId: FleetId, decided: {
93
+ requestId: string;
94
+ from: readonly RequestState[];
95
+ decision: {
96
+ outcome: 'approved' | 'denied';
97
+ decidedBy: DecidedBy;
98
+ decidedAt: Date;
99
+ };
100
+ notices: readonly OutcomeNotice[];
101
+ }): Promise<boolean>;
102
+ /** The requests still pending once their 7 days passed by now, in every fleet: the ones to expire. */
103
+ listDue(now: Date): Promise<PendingRequest[]>;
104
+ /** Expires a request still pending and due by now, with the outcomes to tell, in one step; false when it is not. */
105
+ expire(fleetId: FleetId, expired: {
106
+ requestId: string;
107
+ now: Date;
108
+ notices: readonly OutcomeNotice[];
109
+ }): Promise<boolean>;
110
+ }
111
+ /** Outbound port: new request ids, prefixed `req_` and time-ordered. */
112
+ export interface RequestIds {
113
+ newRequestId(): string;
114
+ }
115
+ /** A browser waiting for a request for an outside MCP client: the request, the account that asked, and the client's request to answer once it is decided. */
116
+ export interface Waiting {
117
+ readonly fleetId: FleetId;
118
+ readonly requestId: string;
119
+ readonly accountId: string;
120
+ /** The secret the browser that asked holds, so no other browser takes the client's code. */
121
+ readonly browserSecret: string;
122
+ readonly request: Readonly<Record<string, string | undefined>>;
123
+ }
124
+ /**
125
+ * Outbound port: seals a waiting into the waiting page's address, so the
126
+ * gateway stores nothing more than the request, and the browser's secret
127
+ * stays secret on the way.
128
+ */
129
+ export interface WaitingSeals {
130
+ seal(waiting: Waiting): string;
131
+ /** The waiting a sealed address holds; none for one the gateway did not seal. */
132
+ open(sealed: string): Waiting | undefined;
133
+ }
134
+ /** An outcome of a request for an outside MCP server, to tell one requester by a message to their person ship (decision 0056). */
135
+ export interface OutcomeNotice {
136
+ readonly fleetId: FleetId;
137
+ readonly requestId: string;
138
+ readonly accountId: string;
139
+ readonly personShipId: ShipId;
140
+ readonly url: string;
141
+ readonly outcome: 'approved' | 'denied' | 'expired';
142
+ /** The outside party the server is, once approved. */
143
+ readonly partyName: string | null;
144
+ }
145
+ /** Outbound port: the outcomes still to tell, kept until the fleet stored the message or refused it. */
146
+ export interface OutcomeNotices {
147
+ /** The outcomes not ended yet, in every fleet, the oldest first. */
148
+ listUnended(limit: number): Promise<OutcomeNotice[]>;
149
+ /** Ends an outcome: told, or refused by the fleet. */
150
+ end(notice: Pick<OutcomeNotice, 'fleetId' | 'requestId' | 'accountId'>): Promise<void>;
151
+ }
152
+ /** The gateway's question to its owner about one request (decision 0056): asked once, withdrawn once the request ended. */
153
+ export interface OwnerQuestion {
154
+ readonly fleetId: FleetId;
155
+ readonly requestId: string;
156
+ /** The question's own uuid (decision 0038), the same each time it is sent. */
157
+ readonly questionId: string;
158
+ /** The ship asked; null before it is asked, or when the fleet refused the question. */
159
+ readonly askedShipId: ShipId | null;
160
+ readonly askedAt: Date | null;
161
+ readonly withdrawnAt: Date | null;
162
+ }
163
+ /** Outbound port: the gateway's questions to its owner, beside the requests they are about. */
164
+ export interface OwnerQuestions {
165
+ /** The open requests, not expired by now, in every fleet, whose question is not asked yet, with its id once kept. */
166
+ listToAsk(now: Date, limit: number): Promise<{
167
+ request: PendingRequest;
168
+ questionId: string | null;
169
+ }[]>;
170
+ /** Keeps the request's question with this id, unless it has one: the id it keeps. */
171
+ keep(fleetId: FleetId, question: {
172
+ requestId: string;
173
+ questionId: string;
174
+ }): Promise<string>;
175
+ /** Marks the question asked of a ship, or, with none, given up after the fleet refused it. */
176
+ markAsked(fleetId: FleetId, asked: {
177
+ requestId: string;
178
+ askedShipId: ShipId | null;
179
+ at: Date;
180
+ }): Promise<void>;
181
+ /** The questions asked of a ship and not withdrawn whose request ended by now, in every fleet. */
182
+ listToWithdraw(now: Date, limit: number): Promise<OwnerQuestion[]>;
183
+ markWithdrawn(fleetId: FleetId, withdrawn: {
184
+ requestId: string;
185
+ at: Date;
186
+ }): Promise<void>;
187
+ }
188
+ /** Outbound port: who owns a ship (decision 0045), as the fleet answers it. */
189
+ export interface Owners {
190
+ ownerOf(crewToken: string, shipId: ShipId): Promise<Result<ShipId | null, FleetRefusal>>;
191
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/requests/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import type { AuthorizationCodes, OAuthSecrets } from '../oauth/ports.js';
2
+ import type { AuthorizationRefusal, ReadAuthorization } from '../oauth/read-authorization.js';
3
+ import type { PartyStore } from '../parties/ports.js';
4
+ import type { Clock } from '../shared/clock.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { PendingRequests, WaitingSeals } from './ports.js';
7
+ /** What the waiting page shows: the client still waits, until its request expires, or where it is sent back now. */
8
+ export type WaitingAnswer = {
9
+ readonly kind: 'waiting';
10
+ readonly clientName: string;
11
+ readonly expiresAt: Date;
12
+ } | {
13
+ readonly kind: 'answered';
14
+ readonly redirectTo: string;
15
+ };
16
+ /**
17
+ * Why a waiting gives the client nothing, beside its request's own refusals:
18
+ * - unknownWaiting: the gateway sealed no such waiting, or its request is forgotten;
19
+ * - otherBrowser: the browser does not hold the secret of the one that asked.
20
+ */
21
+ export type WaitingRefusal = AuthorizationRefusal | {
22
+ readonly kind: 'unknownWaiting';
23
+ } | {
24
+ readonly kind: 'otherBrowser';
25
+ };
26
+ export type ReadWaiting = (opened: {
27
+ waiting: string;
28
+ browserSecret: string | undefined;
29
+ }) => Promise<Result<WaitingAnswer, WaitingRefusal>>;
30
+ /**
31
+ * Use case: the browser that asked for an outside MCP client looks again
32
+ * (decision 0056). The client's request is read again, so nothing changed on
33
+ * the way is taken. Approved, and its party crewed, the client is sent back
34
+ * with its party's code; denied or expired, with access_denied, the account
35
+ * told; otherwise it waits.
36
+ */
37
+ export declare function createReadWaiting(deps: {
38
+ waitings: WaitingSeals;
39
+ readAuthorization: ReadAuthorization;
40
+ requests: PendingRequests;
41
+ parties: PartyStore;
42
+ codes: AuthorizationCodes;
43
+ secrets: OAuthSecrets;
44
+ clock: Clock;
45
+ issuer: string;
46
+ }): ReadWaiting;
@@ -0,0 +1,41 @@
1
+ import { issueCode, redirectWith } from '../oauth/issue-code.js';
2
+ import { err, ok } from '../shared/result.js';
3
+ import { isRefused } from './request-state.js';
4
+ /**
5
+ * Use case: the browser that asked for an outside MCP client looks again
6
+ * (decision 0056). The client's request is read again, so nothing changed on
7
+ * the way is taken. Approved, and its party crewed, the client is sent back
8
+ * with its party's code; denied or expired, with access_denied, the account
9
+ * told; otherwise it waits.
10
+ */
11
+ export function createReadWaiting(deps) {
12
+ return async ({ waiting: sealed, browserSecret }) => {
13
+ const waiting = deps.waitings.open(sealed);
14
+ if (waiting === undefined) {
15
+ return err({ kind: 'unknownWaiting' });
16
+ }
17
+ if (browserSecret !== waiting.browserSecret) {
18
+ return err({ kind: 'otherBrowser' });
19
+ }
20
+ const { fleetId, requestId, accountId } = waiting;
21
+ const request = await deps.requests.find(fleetId, requestId);
22
+ if (request === undefined) {
23
+ return err({ kind: 'unknownWaiting' });
24
+ }
25
+ const read = await deps.readAuthorization(waiting.request);
26
+ if (!read.isOk) {
27
+ return read;
28
+ }
29
+ const authorization = read.value;
30
+ if (isRefused(request, deps.clock.now())) {
31
+ await deps.requests.markTold(fleetId, { requestId, accountId });
32
+ return ok({ kind: 'answered', redirectTo: redirectWith(authorization.redirectUri, { error: 'access_denied', state: authorization.state, iss: deps.issuer }) });
33
+ }
34
+ const party = request.state === 'approved' ? await deps.parties.findByClient(fleetId, authorization.clientId) : undefined;
35
+ if (party?.state !== 'crewed') {
36
+ return ok({ kind: 'waiting', clientName: authorization.clientName, expiresAt: request.expiresAt });
37
+ }
38
+ return ok({ kind: 'answered', redirectTo: await issueCode(deps, { fleetId, authorization, holder: { kind: 'party', party: party.name } }) });
39
+ };
40
+ }
41
+ //# sourceMappingURL=read-waiting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-waiting.js","sourceRoot":"","sources":["../../../src/core/requests/read-waiting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKjE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAc/C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IASjC;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,aAAa,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACjK,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1H,IAAI,KAAK,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/I,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PendingRequest, RequestState } from './ports.js';
2
+ /** Where a request stands by now: one still pending once its 7 days passed has expired, though the store marks it only when it is next opened. */
3
+ export declare function stateAt(request: PendingRequest, now: Date): RequestState;
4
+ /** Whether a request ended with no proxy ship: denied, or expired. */
5
+ export declare function isRefused(request: PendingRequest, now: Date): boolean;
@@ -0,0 +1,10 @@
1
+ /** Where a request stands by now: one still pending once its 7 days passed has expired, though the store marks it only when it is next opened. */
2
+ export function stateAt(request, now) {
3
+ return request.state === 'pending' && request.expiresAt <= now ? 'expired' : request.state;
4
+ }
5
+ /** Whether a request ended with no proxy ship: denied, or expired. */
6
+ export function isRefused(request, now) {
7
+ const state = stateAt(request, now);
8
+ return state === 'denied' || state === 'expired';
9
+ }
10
+ //# sourceMappingURL=request-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-state.js","sourceRoot":"","sources":["../../../src/core/requests/request-state.ts"],"names":[],"mappings":"AAEA,kJAAkJ;AAClJ,MAAM,UAAU,OAAO,CAAC,OAAuB,EAAE,GAAS;IACxD,OAAO,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7F,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,SAAS,CAAC,OAAuB,EAAE,GAAS;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,CAAC;AACnD,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ConnectionStore } from '../connection/ports.js';
2
+ import type { CallSender } from '../mcp-in/ports.js';
3
+ import type { OutcomeNotices, PendingRequests } from './ports.js';
4
+ /** Tells the outcomes still to tell: how many the fleet stored, kept for the next round, and refused. */
5
+ export type TellOutcomes = () => Promise<{
6
+ told: number;
7
+ kept: number;
8
+ refused: number;
9
+ }>;
10
+ /**
11
+ * Use case: the gateway's ship tells each person the outcome of their
12
+ * request for an outside MCP server, by a text message to their person ship
13
+ * (decision 0056, P5-2 a). The key is the request and the account, so an
14
+ * outcome told again after the fleet did not answer is stored once (P5-3 a).
15
+ * An outcome the fleet stored is ended and the account told; one it refused
16
+ * is ended untold, so the gateway's page shows it; one it did not answer, or
17
+ * of a fleet the gateway is not connected to, is kept for the next round.
18
+ */
19
+ export declare function createTellOutcomes(deps: {
20
+ notices: OutcomeNotices;
21
+ requests: PendingRequests;
22
+ connections: ConnectionStore;
23
+ sender: CallSender;
24
+ }): TellOutcomes;
@@ -0,0 +1,39 @@
1
+ import { textOf } from './outcome-notice.js';
2
+ /** How many outcomes one round tells at most. */
3
+ const OUTCOMES_PER_ROUND = 50;
4
+ /**
5
+ * Use case: the gateway's ship tells each person the outcome of their
6
+ * request for an outside MCP server, by a text message to their person ship
7
+ * (decision 0056, P5-2 a). The key is the request and the account, so an
8
+ * outcome told again after the fleet did not answer is stored once (P5-3 a).
9
+ * An outcome the fleet stored is ended and the account told; one it refused
10
+ * is ended untold, so the gateway's page shows it; one it did not answer, or
11
+ * of a fleet the gateway is not connected to, is kept for the next round.
12
+ */
13
+ export function createTellOutcomes(deps) {
14
+ return async () => {
15
+ const counted = { told: 0, kept: 0, refused: 0 };
16
+ for (const notice of await deps.notices.listUnended(OUTCOMES_PER_ROUND)) {
17
+ const gateway = await deps.connections.find(notice.fleetId);
18
+ if (gateway === undefined) {
19
+ counted.kept += 1;
20
+ continue;
21
+ }
22
+ const sent = await deps.sender.send(gateway.crewToken, { to: notice.personShipId, contentType: 'text/plain', payload: textOf(notice), idempotencyKey: `${notice.requestId}:${notice.accountId}` });
23
+ if (!sent.isOk && sent.error.code === 'UNAVAILABLE') {
24
+ counted.kept += 1;
25
+ continue;
26
+ }
27
+ if (sent.isOk) {
28
+ await deps.requests.markTold(notice.fleetId, { requestId: notice.requestId, accountId: notice.accountId });
29
+ counted.told += 1;
30
+ }
31
+ else {
32
+ counted.refused += 1;
33
+ }
34
+ await deps.notices.end(notice);
35
+ }
36
+ return counted;
37
+ };
38
+ }
39
+ //# sourceMappingURL=tell-outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tell-outcomes.js","sourceRoot":"","sources":["../../../src/core/requests/tell-outcomes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,iDAAiD;AACjD,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAK9B;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA8G;IAC/I,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACnM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3G,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { PartyStore } from '../parties/ports.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { PendingRequests, WaitingSeals } from './ports.js';
6
+ /** Whether the browser that asked still waits, the fleet its request is in, and when the request expires. */
7
+ export interface WatchedWaiting {
8
+ readonly fleetId: FleetId;
9
+ readonly isWaiting: boolean;
10
+ readonly expiresAt: Date;
11
+ }
12
+ export type WatchWaitingRefusal = {
13
+ readonly kind: 'unknownWaiting';
14
+ } | {
15
+ readonly kind: 'otherBrowser';
16
+ };
17
+ export type WatchWaiting = (opened: {
18
+ waiting: string;
19
+ browserSecret: string | undefined;
20
+ }) => Promise<Result<WatchedWaiting, WatchWaitingRefusal>>;
21
+ /**
22
+ * Use case: the waiting page follows its request live (decision 0056). It
23
+ * reads whether the browser that asked still waits as readWaiting decides
24
+ * it, with no side effect: no code is issued and nobody is told, as the page
25
+ * then goes to its own address, where readWaiting answers.
26
+ */
27
+ export declare function createWatchWaiting(deps: {
28
+ waitings: WaitingSeals;
29
+ requests: PendingRequests;
30
+ parties: PartyStore;
31
+ clock: Clock;
32
+ }): WatchWaiting;
@@ -0,0 +1,31 @@
1
+ import { err, ok } from '../shared/result.js';
2
+ import { isRefused } from './request-state.js';
3
+ /**
4
+ * Use case: the waiting page follows its request live (decision 0056). It
5
+ * reads whether the browser that asked still waits as readWaiting decides
6
+ * it, with no side effect: no code is issued and nobody is told, as the page
7
+ * then goes to its own address, where readWaiting answers.
8
+ */
9
+ export function createWatchWaiting(deps) {
10
+ return async ({ waiting: sealed, browserSecret }) => {
11
+ const waiting = deps.waitings.open(sealed);
12
+ if (waiting === undefined) {
13
+ return err({ kind: 'unknownWaiting' });
14
+ }
15
+ if (browserSecret !== waiting.browserSecret) {
16
+ return err({ kind: 'otherBrowser' });
17
+ }
18
+ const request = await deps.requests.find(waiting.fleetId, waiting.requestId);
19
+ if (request === undefined) {
20
+ return err({ kind: 'unknownWaiting' });
21
+ }
22
+ const watched = { fleetId: request.fleetId, expiresAt: request.expiresAt };
23
+ if (isRefused(request, deps.clock.now())) {
24
+ return ok({ ...watched, isWaiting: false });
25
+ }
26
+ const clientId = waiting.request.client_id ?? '';
27
+ const party = request.state === 'approved' ? await deps.parties.findByClient(request.fleetId, clientId) : undefined;
28
+ return ok({ ...watched, isWaiting: party?.state !== 'crewed' });
29
+ };
30
+ }
31
+ //# sourceMappingURL=watch-waiting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-waiting.js","sourceRoot":"","sources":["../../../src/core/requests/watch-waiting.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA8F;IAC/H,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,aAAa,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3E,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpH,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Outbound port: the time now. Tests hold their own clock. */
2
+ export interface Clock {
3
+ now(): Date;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../../src/core/shared/clock.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { type Err } from './result.js';
2
+ /** Every reason the gateway's core refuses a request. */
3
+ export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED';
4
+ /** Why the core refused a request. Adapters map the kind to their own error shape; the message is safe to show. */
5
+ export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
6
+ readonly kind: K;
7
+ readonly message: string;
8
+ }
9
+ /** A refusal: the error result of the given kind. */
10
+ export declare function refuse<K extends DomainErrorKind>(kind: K, message: string): Err<DomainError<K>>;
@@ -0,0 +1,6 @@
1
+ import { err } from './result.js';
2
+ /** A refusal: the error result of the given kind. */
3
+ export function refuse(kind, message) {
4
+ return err({ kind, message });
5
+ }
6
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAsD5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The outcome of a domain operation: its value, or why the domain refused.
3
+ * The core never throws; only adapters throw, for system failures such as a
4
+ * lost database connection.
5
+ */
6
+ export type Result<T, E> = Ok<T> | Err<E>;
7
+ export interface Ok<T> {
8
+ readonly isOk: true;
9
+ readonly value: T;
10
+ }
11
+ export interface Err<E> {
12
+ readonly isOk: false;
13
+ readonly error: E;
14
+ }
15
+ export declare function ok<T>(value: T): Ok<T>;
16
+ export declare function err<E>(error: E): Err<E>;
@@ -0,0 +1,7 @@
1
+ export function ok(value) {
2
+ return { isOk: true, value };
3
+ }
4
+ export function err(error) {
5
+ return { isOk: false, error };
6
+ }
7
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/core/shared/result.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC"}