@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 @@
1
+ {"version":3,"file":"crew-person-ship.js","sourceRoot":"","sources":["../../../src/core/people/crew-person-ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Result } from '../shared/result.js';
2
+ import type { CrewPersonShip } from './crew-person-ship.js';
3
+ import { type Dealt, type DealtError } from './opened-of.js';
4
+ import type { PersonCaller } from './person-crew.js';
5
+ import type { OpenedDeliveries, PersonCrews, PersonShipDoor } from './ports.js';
6
+ export type DoneDelivery = (input: {
7
+ caller: PersonCaller;
8
+ deliveryId: string;
9
+ }) => Promise<Result<Dealt, DealtError>>;
10
+ /** Use case: a person is done with a delivery they opened, with no answer (Q20): it is handled. */
11
+ export declare function createDoneDelivery(deps: {
12
+ crewPersonShip: CrewPersonShip;
13
+ crews: PersonCrews;
14
+ door: PersonShipDoor;
15
+ opened: OpenedDeliveries;
16
+ }): DoneDelivery;
@@ -0,0 +1,9 @@
1
+ import { handledOf, openedOf } from './opened-of.js';
2
+ /** Use case: a person is done with a delivery they opened, with no answer (Q20): it is handled. */
3
+ export function createDoneDelivery(deps) {
4
+ return async (asked) => {
5
+ const opened = await openedOf(deps, asked);
6
+ return opened.isOk ? handledOf(deps, { caller: asked.caller, delivery: opened.value }) : opened;
7
+ };
8
+ }
9
+ //# sourceMappingURL=done-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"done-delivery.js","sourceRoot":"","sources":["../../../src/core/people/done-delivery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA+B,MAAM,gBAAgB,CAAC;AAMlF,mGAAmG;AACnG,MAAM,UAAU,kBAAkB,CAAC,IAA4G;IAC7I,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClG,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DeliveryId } from '@aeolus-fleet/common';
2
+ import type { PersonDelivery } from './ports.js';
3
+ /** The longest title an inbox shows, as a message's headline is at most 80 characters. */
4
+ export declare const TITLE_MAX_LENGTH = 80;
5
+ /** A delivery as a person's inbox lists it: by titles only, so no payload leaves the fleet unopened (Q20). */
6
+ export interface InboxEntry {
7
+ readonly deliveryId: DeliveryId;
8
+ readonly from: string;
9
+ readonly title: string;
10
+ readonly sentAt: string;
11
+ }
12
+ /** A question's own title; any other message's first line, cut to the longest title. */
13
+ export declare function titleOf(delivery: PersonDelivery): string;
14
+ export declare function inboxEntryOf(delivery: PersonDelivery): InboxEntry;
@@ -0,0 +1,11 @@
1
+ /** The longest title an inbox shows, as a message's headline is at most 80 characters. */
2
+ export const TITLE_MAX_LENGTH = 80;
3
+ /** A question's own title; any other message's first line, cut to the longest title. */
4
+ export function titleOf(delivery) {
5
+ const title = delivery.questionTitle ?? delivery.payload.split('\n', 1)[0] ?? '';
6
+ return title.length > TITLE_MAX_LENGTH ? `${title.slice(0, TITLE_MAX_LENGTH - 1)}…` : title;
7
+ }
8
+ export function inboxEntryOf(delivery) {
9
+ return { deliveryId: delivery.deliveryId, from: delivery.senderName, title: titleOf(delivery), sentAt: delivery.sentAt.toISOString() };
10
+ }
11
+ //# sourceMappingURL=inbox-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox-entry.js","sourceRoot":"","sources":["../../../src/core/people/inbox-entry.ts"],"names":[],"mappings":"AAIA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAUnC,wFAAwF;AACxF,MAAM,UAAU,OAAO,CAAC,QAAwB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,OAAO,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACzI,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Clock } from '../shared/clock.js';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { CrewPersonShip } from './crew-person-ship.js';
5
+ import { type InboxEntry } from './inbox-entry.js';
6
+ import { type PersonCaller, type PersonCrewError } from './person-crew.js';
7
+ import type { OpenedDeliveries, PersonCrews, PersonShipDoor } from './ports.js';
8
+ /** A delivery as a person opens it: whole. */
9
+ export interface OpenedView extends InboxEntry {
10
+ readonly contentType: string;
11
+ readonly payload: string;
12
+ }
13
+ export type OpenDelivery = (input: {
14
+ caller: PersonCaller;
15
+ deliveryId: string;
16
+ }) => Promise<Result<OpenedView, PersonCrewError | DomainError<'NO_SUCH_DELIVERY'>>>;
17
+ /**
18
+ * Use case: a person opens one delivery that waits for their person ship
19
+ * (Q20). Opening is their own act, so the gateway, as the ship's crew,
20
+ * acknowledges it for them (interop 5.1). What their answer needs is kept
21
+ * before the acknowledgement, so a crash between the two loses nothing: the
22
+ * delivery then still waits, and opening it again keeps it once.
23
+ */
24
+ export declare function createOpenDelivery(deps: {
25
+ crewPersonShip: CrewPersonShip;
26
+ crews: PersonCrews;
27
+ door: PersonShipDoor;
28
+ opened: OpenedDeliveries;
29
+ clock: Clock;
30
+ }): OpenDelivery;
@@ -0,0 +1,40 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { inboxEntryOf, titleOf } from './inbox-entry.js';
4
+ import { asPersonCrew } from './person-crew.js';
5
+ import { waitingFor } from './read-inbox.js';
6
+ /**
7
+ * Use case: a person opens one delivery that waits for their person ship
8
+ * (Q20). Opening is their own act, so the gateway, as the ship's crew,
9
+ * acknowledges it for them (interop 5.1). What their answer needs is kept
10
+ * before the acknowledgement, so a crash between the two loses nothing: the
11
+ * delivery then still waits, and opening it again keeps it once.
12
+ */
13
+ export function createOpenDelivery(deps) {
14
+ return async ({ caller, deliveryId }) => {
15
+ const waiting = await waitingFor(deps, caller);
16
+ if (!waiting.isOk) {
17
+ return waiting;
18
+ }
19
+ const delivery = waiting.value.deliveries.find((each) => each.deliveryId === deliveryId);
20
+ if (!delivery) {
21
+ return refuse('NO_SUCH_DELIVERY', `No delivery ${deliveryId} waits for you: read your inbox again`);
22
+ }
23
+ await deps.opened.save({
24
+ fleetId: caller.fleetId,
25
+ shipId: waiting.value.crew.shipId,
26
+ deliveryId: delivery.deliveryId,
27
+ messageId: delivery.messageId,
28
+ senderShipId: delivery.senderShipId,
29
+ from: delivery.senderName,
30
+ title: titleOf(delivery),
31
+ openedAt: deps.clock.now(),
32
+ });
33
+ const acknowledged = await asPersonCrew(deps, { caller, run: (crew) => deps.door.ack(crew.crewToken, delivery.deliveryId) });
34
+ if (!acknowledged.isOk) {
35
+ return acknowledged;
36
+ }
37
+ return ok({ ...inboxEntryOf(delivery), contentType: delivery.contentType, payload: delivery.payload });
38
+ };
39
+ }
40
+ //# sourceMappingURL=open-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-delivery.js","sourceRoot":"","sources":["../../../src/core/people/open-delivery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0H;IAC3J,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,kBAAkB,EAAE,eAAe,UAAU,uCAAuC,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7H,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzG,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type DomainError } from '../shared/errors.js';
2
+ import { type Result } from '../shared/result.js';
3
+ import type { CrewPersonShip } from './crew-person-ship.js';
4
+ import { type PersonCaller, type PersonCrewError } from './person-crew.js';
5
+ import type { OpenedDeliveries, OpenedDelivery, PersonCrews, PersonShipDoor } from './ports.js';
6
+ /** What a person dealt with a delivery as: answered, or done with it. */
7
+ export interface Dealt {
8
+ readonly deliveryId: string;
9
+ readonly isHandled: true;
10
+ }
11
+ export type DealtError = PersonCrewError | DomainError<'NO_SUCH_DELIVERY'>;
12
+ /** A delivery the caller opened on their person ship. */
13
+ export declare function openedOf(deps: {
14
+ crewPersonShip: CrewPersonShip;
15
+ opened: OpenedDeliveries;
16
+ }, asked: {
17
+ caller: PersonCaller;
18
+ deliveryId: string;
19
+ }): Promise<Result<OpenedDelivery, DealtError>>;
20
+ /** Reports the delivery handled, then forgets it; kept while the fleet does not take it, so the person can go on again. */
21
+ export declare function handledOf(deps: {
22
+ crewPersonShip: CrewPersonShip;
23
+ crews: PersonCrews;
24
+ door: PersonShipDoor;
25
+ opened: OpenedDeliveries;
26
+ }, dealt: {
27
+ caller: PersonCaller;
28
+ delivery: OpenedDelivery;
29
+ }): Promise<Result<Dealt, DealtError>>;
@@ -0,0 +1,30 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { asPersonCrew, personCrewOf, withOwnRefusal } from './person-crew.js';
4
+ /** A delivery the caller opened on their person ship. */
5
+ export async function openedOf(deps, asked) {
6
+ const { caller, deliveryId } = asked;
7
+ const crew = await personCrewOf(deps.crewPersonShip, caller);
8
+ if (!crew.isOk) {
9
+ return crew;
10
+ }
11
+ const delivery = await deps.opened.find(caller.fleetId, { shipId: crew.value.shipId, deliveryId });
12
+ if (!delivery) {
13
+ return refuse('NO_SUCH_DELIVERY', `You have no opened delivery ${deliveryId}: open it from your inbox first`);
14
+ }
15
+ return ok(delivery);
16
+ }
17
+ /** Reports the delivery handled, then forgets it; kept while the fleet does not take it, so the person can go on again. */
18
+ export async function handledOf(deps, dealt) {
19
+ const { caller, delivery } = dealt;
20
+ const handled = await asPersonCrew(deps, { caller, run: (crew) => withOwnRefusal(deps.door.handled(crew.crewToken, delivery.deliveryId)) });
21
+ if (!handled.isOk) {
22
+ return handled;
23
+ }
24
+ if (!handled.value.value.isOk) {
25
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not take that you dealt with it: ${handled.value.value.error.message}. Try again`);
26
+ }
27
+ await deps.opened.remove(delivery.fleetId, { shipId: delivery.shipId, deliveryId: delivery.deliveryId });
28
+ return ok({ deliveryId: delivery.deliveryId, isHandled: true });
29
+ }
30
+ //# sourceMappingURL=opened-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opened-of.js","sourceRoot":"","sources":["../../../src/core/people/opened-of.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAA2C,MAAM,kBAAkB,CAAC;AAWvH,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAkE,EAClE,KAAmD;IAEnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,kBAAkB,EAAE,+BAA+B,UAAU,iCAAiC,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC;AAED,2HAA2H;AAC3H,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAA4G,EAC5G,KAAyD;IAEzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5I,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;IACvI,CAAC;IACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACzG,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ import type { FleetRefusal } from '../connection/ports.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { CrewPersonShip } from './crew-person-ship.js';
6
+ import type { PersonCrews } from './ports.js';
7
+ /** Who calls from a signed-in person's MCP client: the account grant its token stands for. */
8
+ export interface PersonCaller {
9
+ readonly fleetId: FleetId;
10
+ readonly grantId: string;
11
+ }
12
+ /** The person ship the gateway crews for the caller, and its crew token. */
13
+ export interface PersonCrewToken {
14
+ readonly shipId: ShipId;
15
+ readonly crewToken: string;
16
+ }
17
+ export type PersonCrewError = DomainError<'NOT_A_PERSON' | 'SIGNED_OUT' | 'FLEET_UNAVAILABLE'>;
18
+ /** The crew of the caller's person ship, or why there is none, said so the person's model can tell them. */
19
+ export declare function personCrewOf(crewPersonShip: CrewPersonShip, caller: PersonCaller): Promise<Result<PersonCrewToken, PersonCrewError>>;
20
+ /**
21
+ * Makes a call as the crew of the caller's person ship. A crew that no
22
+ * longer works, as when its lease ended, is forgotten and the ship crewed
23
+ * again, once, so the person never deals with a lease.
24
+ */
25
+ export declare function asPersonCrew<T>(deps: {
26
+ crewPersonShip: CrewPersonShip;
27
+ crews: PersonCrews;
28
+ }, call: {
29
+ caller: PersonCaller;
30
+ run: (crew: PersonCrewToken) => Promise<Result<T, FleetRefusal>>;
31
+ }): Promise<Result<{
32
+ crew: PersonCrewToken;
33
+ value: T;
34
+ }, PersonCrewError>>;
35
+ /**
36
+ * A fleet call whose refusal the caller says itself, as a value: only a crew
37
+ * that no longer works stays a refusal, so asPersonCrew crews again.
38
+ */
39
+ export declare function withOwnRefusal<T>(called: Promise<Result<T, FleetRefusal>>): Promise<Result<Result<T, FleetRefusal>, FleetRefusal>>;
@@ -0,0 +1,61 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /** The fleet's codes for a crew token that no longer works: its lease ended, or it is unknown. */
4
+ const ENDED_CREW = new Set(['LEASE_ENDED', 'UNAUTHORIZED']);
5
+ /** The crew of the caller's person ship, or why there is none, said so the person's model can tell them. */
6
+ export async function personCrewOf(crewPersonShip, caller) {
7
+ const crewed = await crewPersonShip(caller);
8
+ if (crewed.isOk) {
9
+ return crewed;
10
+ }
11
+ switch (crewed.error.kind) {
12
+ case 'noPersonShip':
13
+ return refuse('NOT_A_PERSON', 'You have no person ship in this fleet: your rights there do not let you message');
14
+ case 'signedOut':
15
+ return refuse('SIGNED_OUT', 'Your sign-in ended: sign in again from your MCP client');
16
+ case 'pagasaeUnavailable':
17
+ return refuse('FLEET_UNAVAILABLE', 'The sign-in service did not answer: try again');
18
+ case 'notConnected':
19
+ return refuse('FLEET_UNAVAILABLE', 'The gateway is not connected to this fleet now: try again later');
20
+ case 'fleetRefused':
21
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not crew your person ship: ${crewed.error.message}`);
22
+ }
23
+ }
24
+ /**
25
+ * Makes a call as the crew of the caller's person ship. A crew that no
26
+ * longer works, as when its lease ended, is forgotten and the ship crewed
27
+ * again, once, so the person never deals with a lease.
28
+ */
29
+ export async function asPersonCrew(deps, call) {
30
+ const { caller, run } = call;
31
+ const crew = await personCrewOf(deps.crewPersonShip, caller);
32
+ if (!crew.isOk) {
33
+ return crew;
34
+ }
35
+ const answered = await run(crew.value);
36
+ if (answered.isOk) {
37
+ return ok({ crew: crew.value, value: answered.value });
38
+ }
39
+ if (!ENDED_CREW.has(answered.error.code)) {
40
+ return fleetDidNotAnswer(answered.error);
41
+ }
42
+ await deps.crews.drop(caller.fleetId, crew.value.shipId);
43
+ const again = await personCrewOf(deps.crewPersonShip, caller);
44
+ if (!again.isOk) {
45
+ return again;
46
+ }
47
+ const retried = await run(again.value);
48
+ return retried.isOk ? ok({ crew: again.value, value: retried.value }) : fleetDidNotAnswer(retried.error);
49
+ }
50
+ function fleetDidNotAnswer(refusal) {
51
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not answer: ${refusal.message}`);
52
+ }
53
+ /**
54
+ * A fleet call whose refusal the caller says itself, as a value: only a crew
55
+ * that no longer works stays a refusal, so asPersonCrew crews again.
56
+ */
57
+ export async function withOwnRefusal(called) {
58
+ const answered = await called;
59
+ return !answered.isOk && ENDED_CREW.has(answered.error.code) ? answered : ok(answered);
60
+ }
61
+ //# sourceMappingURL=person-crew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"person-crew.js","sourceRoot":"","sources":["../../../src/core/people/person-crew.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * A signed-in person's person ship, which the gateway crews for their
3
+ * messaging (decisions 0054, 0057): the fleet's calls it makes as their
4
+ * account, and the one crew every client of the person shares.
5
+ */
6
+ import type { DeliveryId, FleetId, MessageId, ShipId } from '@aeolus-fleet/common';
7
+ import type { FleetRefusal } from '../connection/ports.js';
8
+ import type { Result } from '../shared/result.js';
9
+ /** A call the gateway makes for an account: the account's token beside the gateway's own crew token, so the account acts through the gateway's ship. */
10
+ export interface AccountCall {
11
+ readonly crewToken: string;
12
+ readonly accountToken: string;
13
+ readonly shipId: ShipId;
14
+ }
15
+ /** Outbound port: the fleet's calls for an account's own person ship (aeolus-fleet #990). */
16
+ export interface AccountDoor {
17
+ /** A new starting prompt for the ship while it awaits crew: its secret. */
18
+ startingPrompt(call: AccountCall): Promise<Result<{
19
+ secret: string;
20
+ }, FleetRefusal>>;
21
+ /** Frees the ship from the crew that has it, so it can be crewed again. */
22
+ release(call: AccountCall): Promise<Result<undefined, FleetRefusal>>;
23
+ }
24
+ /** The crew token the gateway holds for a person ship: one crew, shared by every client of its person. */
25
+ export interface PersonCrew {
26
+ readonly fleetId: FleetId;
27
+ readonly shipId: ShipId;
28
+ readonly crewToken: string;
29
+ readonly crewedAt: Date;
30
+ }
31
+ export interface PersonCrews {
32
+ find(fleetId: FleetId, shipId: ShipId): Promise<PersonCrew | undefined>;
33
+ save(crew: PersonCrew): Promise<void>;
34
+ /** Forgets a crew that no longer works, as when its lease ended, so the ship is crewed again. */
35
+ drop(fleetId: FleetId, shipId: ShipId): Promise<void>;
36
+ }
37
+ /** A delivery to the person ship, as the fleet's push receive hands it. */
38
+ export interface PersonDelivery {
39
+ readonly deliveryId: DeliveryId;
40
+ readonly messageId: MessageId;
41
+ readonly senderShipId: ShipId;
42
+ readonly senderName: string;
43
+ readonly contentType: string;
44
+ readonly payload: string;
45
+ /** The title of a question (the question content type), read at the edge; none for any other message. */
46
+ readonly questionTitle: string | null;
47
+ readonly sentAt: Date;
48
+ readonly inReplyTo: MessageId | null;
49
+ }
50
+ /** Outbound port: the fleet's calls the gateway makes as the crew of a person ship. */
51
+ export interface PersonShipDoor {
52
+ /** How many deliveries wait for the ship, without waiting. */
53
+ inbox(crewToken: string): Promise<Result<{
54
+ waiting: number;
55
+ }, FleetRefusal>>;
56
+ /** The ship's deliveries, up to max, its own held ones again first. */
57
+ pushReceive(crewToken: string, take: {
58
+ max: number;
59
+ }): Promise<Result<PersonDelivery[], FleetRefusal>>;
60
+ /** Acknowledges a delivery the person opened: their own act confirms it (interop 5.1). */
61
+ ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
62
+ /** Sends the person's answer to the sender, in reply to its message, once under its key. */
63
+ reply(crewToken: string, reply: {
64
+ to: ShipId;
65
+ inReplyTo: MessageId;
66
+ contentType: string;
67
+ payload: string;
68
+ idempotencyKey: string;
69
+ }): Promise<Result<undefined, FleetRefusal>>;
70
+ /** Reports the person dealt with the delivery. */
71
+ handled(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
72
+ }
73
+ /**
74
+ * A delivery a person opened, as the gateway keeps it until they deal with
75
+ * it (Q28 (a)): what their answer needs once the delivery is acknowledged,
76
+ * its message and sender, and its title, never its payload. It is the person
77
+ * ship's, so every client of the person finds it.
78
+ */
79
+ export interface OpenedDelivery {
80
+ readonly fleetId: FleetId;
81
+ readonly shipId: ShipId;
82
+ readonly deliveryId: DeliveryId;
83
+ readonly messageId: MessageId;
84
+ readonly senderShipId: ShipId;
85
+ readonly from: string;
86
+ readonly title: string;
87
+ readonly openedAt: Date;
88
+ }
89
+ /** Outbound port: the deliveries people opened, by fleet, person ship and delivery. */
90
+ export interface OpenedDeliveries {
91
+ /** Keeps it, or keeps it as last opened when it was opened before. */
92
+ save(opened: OpenedDelivery): Promise<void>;
93
+ find(fleetId: FleetId, opened: {
94
+ shipId: ShipId;
95
+ deliveryId: string;
96
+ }): Promise<OpenedDelivery | undefined>;
97
+ /** Forgets it once the person dealt with it. */
98
+ remove(fleetId: FleetId, opened: {
99
+ shipId: ShipId;
100
+ deliveryId: string;
101
+ }): Promise<void>;
102
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/people/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { type Result } from '../shared/result.js';
2
+ import type { CrewPersonShip } from './crew-person-ship.js';
3
+ import { type InboxEntry } from './inbox-entry.js';
4
+ import { type PersonCaller, type PersonCrewError, type PersonCrewToken } from './person-crew.js';
5
+ import type { PersonCrews, PersonDelivery, PersonShipDoor } from './ports.js';
6
+ /** The most deliveries an inbox lists at once: as many as one receive takes. */
7
+ export declare const INBOX_LIST_MAX = 10;
8
+ export type ReadInbox = (caller: PersonCaller) => Promise<Result<{
9
+ waiting: number;
10
+ deliveries: InboxEntry[];
11
+ }, PersonCrewError>>;
12
+ /**
13
+ * What waits for the caller's person ship: how many, and up to the most an
14
+ * inbox lists, taken as received, the crew's own held ones again first. It
15
+ * asks how many wait first, so the person is never kept waiting while none
16
+ * does.
17
+ */
18
+ export declare function waitingFor(deps: {
19
+ crewPersonShip: CrewPersonShip;
20
+ crews: PersonCrews;
21
+ door: PersonShipDoor;
22
+ }, caller: PersonCaller): Promise<Result<{
23
+ crew: PersonCrewToken;
24
+ waiting: number;
25
+ deliveries: PersonDelivery[];
26
+ }, PersonCrewError>>;
27
+ /**
28
+ * Use case: a person reads their own person ship's inbox (Q20): what waits,
29
+ * by titles only. The gateway takes the waiting deliveries as the ship's
30
+ * crew, so nothing is stored in the gateway, and a delivery listed is listed
31
+ * again until the person deals with it.
32
+ */
33
+ export declare function createReadInbox(deps: {
34
+ crewPersonShip: CrewPersonShip;
35
+ crews: PersonCrews;
36
+ door: PersonShipDoor;
37
+ }): ReadInbox;
@@ -0,0 +1,36 @@
1
+ import { ok } from '../shared/result.js';
2
+ import { inboxEntryOf } from './inbox-entry.js';
3
+ import { asPersonCrew } from './person-crew.js';
4
+ /** The most deliveries an inbox lists at once: as many as one receive takes. */
5
+ export const INBOX_LIST_MAX = 10;
6
+ /**
7
+ * What waits for the caller's person ship: how many, and up to the most an
8
+ * inbox lists, taken as received, the crew's own held ones again first. It
9
+ * asks how many wait first, so the person is never kept waiting while none
10
+ * does.
11
+ */
12
+ export async function waitingFor(deps, caller) {
13
+ const counted = await asPersonCrew(deps, { caller, run: (crew) => deps.door.inbox(crew.crewToken) });
14
+ if (!counted.isOk) {
15
+ return counted;
16
+ }
17
+ const { crew, value } = counted.value;
18
+ if (value.waiting === 0) {
19
+ return ok({ crew, waiting: 0, deliveries: [] });
20
+ }
21
+ const taken = await asPersonCrew(deps, { caller, run: (held) => deps.door.pushReceive(held.crewToken, { max: INBOX_LIST_MAX }) });
22
+ return taken.isOk ? ok({ crew: taken.value.crew, waiting: value.waiting, deliveries: taken.value.value }) : taken;
23
+ }
24
+ /**
25
+ * Use case: a person reads their own person ship's inbox (Q20): what waits,
26
+ * by titles only. The gateway takes the waiting deliveries as the ship's
27
+ * crew, so nothing is stored in the gateway, and a delivery listed is listed
28
+ * again until the person deals with it.
29
+ */
30
+ export function createReadInbox(deps) {
31
+ return async (caller) => {
32
+ const waiting = await waitingFor(deps, caller);
33
+ return waiting.isOk ? ok({ waiting: waiting.value.waiting, deliveries: waiting.value.deliveries.map(inboxEntryOf) }) : waiting;
34
+ };
35
+ }
36
+ //# sourceMappingURL=read-inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-inbox.js","sourceRoot":"","sources":["../../../src/core/people/read-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAiE,MAAM,kBAAkB,CAAC;AAG/G,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAIjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAkF,EAClF,MAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;IAClI,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkF;IAChH,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACjI,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { AuthorizationCodes, OAuthSecrets } from '../oauth/ports.js';
3
+ import type { AuthorizationRequest } from '../oauth/read-authorization.js';
4
+ import type { PartyStore } from '../parties/ports.js';
5
+ import type { Clock } from '../shared/clock.js';
6
+ import { type DomainError } from '../shared/errors.js';
7
+ import { type Result } from '../shared/result.js';
8
+ import type { OpenRequest } from './open-request.js';
9
+ import type { PendingRequests, Requester, WaitingSeals } from './ports.js';
10
+ /** What asking answers: where the client is sent back now, or the sealed waiting the browser waits on. */
11
+ export type ClientAnswer = {
12
+ readonly kind: 'answered';
13
+ readonly redirectTo: string;
14
+ } | {
15
+ readonly kind: 'waiting';
16
+ readonly waiting: string;
17
+ };
18
+ export type AskForClient = (asked: {
19
+ fleetId: FleetId;
20
+ requester: Requester;
21
+ authorization: AuthorizationRequest;
22
+ /** The client's request as it came, read again while the browser waits. */
23
+ request: Readonly<Record<string, string | undefined>>;
24
+ browserSecret: string;
25
+ }) => Promise<Result<ClientAnswer, DomainError<'OUTSIDE_PARTIES_OFF'>>>;
26
+ /**
27
+ * Use case: an account of the fleet, signed in, asks for access for an
28
+ * outside MCP client (decision 0056, Thomas's question A). A client that is
29
+ * a party already gets its party's code at once. A deny or an expired
30
+ * request the account asked for ends its next try with access_denied, once;
31
+ * otherwise the account opens a request, or joins the one pending, and its
32
+ * browser waits for the decision. While the fleet's outside parties are off,
33
+ * nobody asks (interop I-3).
34
+ */
35
+ export declare function createAskForClient(deps: {
36
+ parties: PartyStore;
37
+ requests: PendingRequests;
38
+ openRequest: OpenRequest;
39
+ servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
40
+ waitings: WaitingSeals;
41
+ codes: AuthorizationCodes;
42
+ secrets: OAuthSecrets;
43
+ clock: Clock;
44
+ issuer: string;
45
+ }): AskForClient;
@@ -0,0 +1,33 @@
1
+ import { issueCode, redirectWith } from '../oauth/issue-code.js';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ import { isRefused } from './request-state.js';
5
+ /**
6
+ * Use case: an account of the fleet, signed in, asks for access for an
7
+ * outside MCP client (decision 0056, Thomas's question A). A client that is
8
+ * a party already gets its party's code at once. A deny or an expired
9
+ * request the account asked for ends its next try with access_denied, once;
10
+ * otherwise the account opens a request, or joins the one pending, and its
11
+ * browser waits for the decision. While the fleet's outside parties are off,
12
+ * nobody asks (interop I-3).
13
+ */
14
+ export function createAskForClient(deps) {
15
+ return async ({ fleetId, requester, authorization, request, browserSecret }) => {
16
+ if (!(await deps.servesOutsideParties(fleetId))) {
17
+ return refuse('OUTSIDE_PARTIES_OFF', "This fleet's outside parties are off: nobody asks for an outside MCP client");
18
+ }
19
+ const party = await deps.parties.findByClient(fleetId, authorization.clientId);
20
+ if (party?.state === 'crewed') {
21
+ return ok({ kind: 'answered', redirectTo: await issueCode(deps, { fleetId, authorization, holder: { kind: 'party', party: party.name } }) });
22
+ }
23
+ const subject = { kind: 'client', clientId: authorization.clientId, clientName: authorization.clientName };
24
+ const latest = await deps.requests.latestAskedBy(fleetId, { subject, accountId: requester.accountId });
25
+ if (latest !== undefined && !latest.isTold && isRefused(latest.request, deps.clock.now())) {
26
+ await deps.requests.markTold(fleetId, { requestId: latest.request.requestId, accountId: requester.accountId });
27
+ return ok({ kind: 'answered', redirectTo: redirectWith(authorization.redirectUri, { error: 'access_denied', state: authorization.state, iss: deps.issuer }) });
28
+ }
29
+ const opened = await deps.openRequest({ fleetId, subject, requester });
30
+ return ok({ kind: 'waiting', waiting: deps.waitings.seal({ fleetId, requestId: opened.requestId, accountId: requester.accountId, browserSecret, request }) });
31
+ };
32
+ }
33
+ //# sourceMappingURL=ask-for-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-for-client.js","sourceRoot":"","sources":["../../../src/core/requests/ask-for-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKjE,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAc/C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAUlC;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE;QAC7E,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,6EAA6E,CAAC,CAAC;QACtH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,KAAK,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,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;QAC/I,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,UAAU,EAAW,CAAC;QACpH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QACvG,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC1F,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/G,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,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChK,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 { PersonCaller } from '../people/person-crew.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { AccountGrants } from '../sign-in/ports.js';
7
+ import type { OpenRequest } from './open-request.js';
8
+ import type { RequestState } from './ports.js';
9
+ /** What asking answers the person: their request, by its id, and until when it waits. */
10
+ export interface AskedServer {
11
+ readonly requestId: string;
12
+ readonly url: string;
13
+ readonly state: RequestState;
14
+ readonly expiresAt: Date;
15
+ }
16
+ export type AskForServer = (asked: {
17
+ caller: PersonCaller;
18
+ url: string;
19
+ }) => Promise<Result<AskedServer, DomainError<'INVALID_SERVER_URL' | 'OUTSIDE_PARTIES_OFF' | 'SIGNED_OUT' | 'PARTY_EXISTS'>>>;
20
+ /**
21
+ * Use case: a signed-in person asks for an outside MCP server, as their
22
+ * account (decision 0056). An outside MCP server never asks itself: an
23
+ * approver adds it, giving its credential. A second person asking for the
24
+ * same server joins the request pending. While the fleet's outside parties
25
+ * are off, nobody asks (interop I-3).
26
+ */
27
+ export declare function createAskForServer(deps: {
28
+ grants: AccountGrants;
29
+ parties: PartyStore;
30
+ openRequest: OpenRequest;
31
+ servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
32
+ }): AskForServer;