@aeolus-fleet/core 0.0.0 → 0.19.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 (610) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +98 -1
  3. package/dist/adapters/cli/fleet-init.d.ts +14 -0
  4. package/dist/adapters/cli/fleet-init.js +68 -0
  5. package/dist/adapters/cli/fleet-init.js.map +1 -0
  6. package/dist/adapters/cli/io.d.ts +35 -0
  7. package/dist/adapters/cli/io.js +21 -0
  8. package/dist/adapters/cli/io.js.map +1 -0
  9. package/dist/adapters/cli/migrate.d.ts +11 -0
  10. package/dist/adapters/cli/migrate.js +12 -0
  11. package/dist/adapters/cli/migrate.js.map +1 -0
  12. package/dist/adapters/cli/operator-reset-password.d.ts +12 -0
  13. package/dist/adapters/cli/operator-reset-password.js +49 -0
  14. package/dist/adapters/cli/operator-reset-password.js.map +1 -0
  15. package/dist/adapters/cli/run.d.ts +14 -0
  16. package/dist/adapters/cli/run.js +40 -0
  17. package/dist/adapters/cli/run.js.map +1 -0
  18. package/dist/adapters/cli/terminal.d.ts +20 -0
  19. package/dist/adapters/cli/terminal.js +68 -0
  20. package/dist/adapters/cli/terminal.js.map +1 -0
  21. package/dist/adapters/crypto/passwords.d.ts +2 -0
  22. package/dist/adapters/crypto/passwords.js +59 -0
  23. package/dist/adapters/crypto/passwords.js.map +1 -0
  24. package/dist/adapters/crypto/secrets.d.ts +5 -0
  25. package/dist/adapters/crypto/secrets.js +10 -0
  26. package/dist/adapters/crypto/secrets.js.map +1 -0
  27. package/dist/adapters/http/device-label.d.ts +9 -0
  28. package/dist/adapters/http/device-label.js +39 -0
  29. package/dist/adapters/http/device-label.js.map +1 -0
  30. package/dist/adapters/http/rate-limiter.d.ts +21 -0
  31. package/dist/adapters/http/rate-limiter.js +44 -0
  32. package/dist/adapters/http/rate-limiter.js.map +1 -0
  33. package/dist/adapters/http/request-credentials.d.ts +23 -0
  34. package/dist/adapters/http/request-credentials.js +45 -0
  35. package/dist/adapters/http/request-credentials.js.map +1 -0
  36. package/dist/adapters/http/server.d.ts +47 -0
  37. package/dist/adapters/http/server.js +216 -0
  38. package/dist/adapters/http/server.js.map +1 -0
  39. package/dist/adapters/http/version.d.ts +9 -0
  40. package/dist/adapters/http/version.js +23 -0
  41. package/dist/adapters/http/version.js.map +1 -0
  42. package/dist/adapters/mcp/mcp-endpoint.d.ts +8 -0
  43. package/dist/adapters/mcp/mcp-endpoint.js +127 -0
  44. package/dist/adapters/mcp/mcp-endpoint.js.map +1 -0
  45. package/dist/adapters/prisma/client.d.ts +10 -0
  46. package/dist/adapters/prisma/client.js +20 -0
  47. package/dist/adapters/prisma/client.js.map +1 -0
  48. package/dist/adapters/prisma/delivery-notices.d.ts +34 -0
  49. package/dist/adapters/prisma/delivery-notices.js +113 -0
  50. package/dist/adapters/prisma/delivery-notices.js.map +1 -0
  51. package/dist/adapters/prisma/event-log.d.ts +11 -0
  52. package/dist/adapters/prisma/event-log.js +61 -0
  53. package/dist/adapters/prisma/event-log.js.map +1 -0
  54. package/dist/adapters/prisma/failure-log.d.ts +22 -0
  55. package/dist/adapters/prisma/failure-log.js +70 -0
  56. package/dist/adapters/prisma/failure-log.js.map +1 -0
  57. package/dist/adapters/prisma/fleet-counter.d.ts +3 -0
  58. package/dist/adapters/prisma/fleet-counter.js +6 -0
  59. package/dist/adapters/prisma/fleet-counter.js.map +1 -0
  60. package/dist/adapters/prisma/fleet-event-wakeups.d.ts +33 -0
  61. package/dist/adapters/prisma/fleet-event-wakeups.js +86 -0
  62. package/dist/adapters/prisma/fleet-event-wakeups.js.map +1 -0
  63. package/dist/adapters/prisma/generated/browser.d.ts +127 -0
  64. package/dist/adapters/prisma/generated/browser.js +18 -0
  65. package/dist/adapters/prisma/generated/browser.js.map +1 -0
  66. package/dist/adapters/prisma/generated/client.d.ts +146 -0
  67. package/dist/adapters/prisma/generated/client.js +38 -0
  68. package/dist/adapters/prisma/generated/client.js.map +1 -0
  69. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +879 -0
  70. package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
  71. package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
  72. package/dist/adapters/prisma/generated/enums.d.ts +75 -0
  73. package/dist/adapters/prisma/generated/enums.js +73 -0
  74. package/dist/adapters/prisma/generated/enums.js.map +1 -0
  75. package/dist/adapters/prisma/generated/internal/class.d.ts +308 -0
  76. package/dist/adapters/prisma/generated/internal/class.js +52 -0
  77. package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
  78. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2131 -0
  79. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +295 -0
  80. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
  81. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
  82. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +265 -0
  83. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
  84. package/dist/adapters/prisma/generated/models/ConsoleSession.d.ts +2137 -0
  85. package/dist/adapters/prisma/generated/models/ConsoleSession.js +2 -0
  86. package/dist/adapters/prisma/generated/models/ConsoleSession.js.map +1 -0
  87. package/dist/adapters/prisma/generated/models/Credential.d.ts +1360 -0
  88. package/dist/adapters/prisma/generated/models/Credential.js +2 -0
  89. package/dist/adapters/prisma/generated/models/Credential.js.map +1 -0
  90. package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +1558 -0
  91. package/dist/adapters/prisma/generated/models/CrewRequest.js +2 -0
  92. package/dist/adapters/prisma/generated/models/CrewRequest.js.map +1 -0
  93. package/dist/adapters/prisma/generated/models/Delivery.d.ts +2211 -0
  94. package/dist/adapters/prisma/generated/models/Delivery.js +2 -0
  95. package/dist/adapters/prisma/generated/models/Delivery.js.map +1 -0
  96. package/dist/adapters/prisma/generated/models/Event.d.ts +1991 -0
  97. package/dist/adapters/prisma/generated/models/Event.js +2 -0
  98. package/dist/adapters/prisma/generated/models/Event.js.map +1 -0
  99. package/dist/adapters/prisma/generated/models/Fleet.d.ts +3032 -0
  100. package/dist/adapters/prisma/generated/models/Fleet.js +2 -0
  101. package/dist/adapters/prisma/generated/models/Fleet.js.map +1 -0
  102. package/dist/adapters/prisma/generated/models/Guide.d.ts +943 -0
  103. package/dist/adapters/prisma/generated/models/Guide.js +2 -0
  104. package/dist/adapters/prisma/generated/models/Guide.js.map +1 -0
  105. package/dist/adapters/prisma/generated/models/GuideProgress.d.ts +1323 -0
  106. package/dist/adapters/prisma/generated/models/GuideProgress.js +2 -0
  107. package/dist/adapters/prisma/generated/models/GuideProgress.js.map +1 -0
  108. package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1036 -0
  109. package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
  110. package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
  111. package/dist/adapters/prisma/generated/models/InstallationSettings.d.ts +1027 -0
  112. package/dist/adapters/prisma/generated/models/InstallationSettings.js +2 -0
  113. package/dist/adapters/prisma/generated/models/InstallationSettings.js.map +1 -0
  114. package/dist/adapters/prisma/generated/models/Lease.d.ts +2076 -0
  115. package/dist/adapters/prisma/generated/models/Lease.js +2 -0
  116. package/dist/adapters/prisma/generated/models/Lease.js.map +1 -0
  117. package/dist/adapters/prisma/generated/models/Message.d.ts +2869 -0
  118. package/dist/adapters/prisma/generated/models/Message.js +2 -0
  119. package/dist/adapters/prisma/generated/models/Message.js.map +1 -0
  120. package/dist/adapters/prisma/generated/models/Notice.d.ts +1068 -0
  121. package/dist/adapters/prisma/generated/models/Notice.js +2 -0
  122. package/dist/adapters/prisma/generated/models/Notice.js.map +1 -0
  123. package/dist/adapters/prisma/generated/models/NoticeDismissal.d.ts +1245 -0
  124. package/dist/adapters/prisma/generated/models/NoticeDismissal.js +2 -0
  125. package/dist/adapters/prisma/generated/models/NoticeDismissal.js.map +1 -0
  126. package/dist/adapters/prisma/generated/models/Operator.d.ts +1173 -0
  127. package/dist/adapters/prisma/generated/models/Operator.js +2 -0
  128. package/dist/adapters/prisma/generated/models/Operator.js.map +1 -0
  129. package/dist/adapters/prisma/generated/models/Ship.d.ts +3320 -0
  130. package/dist/adapters/prisma/generated/models/Ship.js +2 -0
  131. package/dist/adapters/prisma/generated/models/Ship.js.map +1 -0
  132. package/dist/adapters/prisma/generated/models/SignInTicket.d.ts +1222 -0
  133. package/dist/adapters/prisma/generated/models/SignInTicket.js +2 -0
  134. package/dist/adapters/prisma/generated/models/SignInTicket.js.map +1 -0
  135. package/dist/adapters/prisma/generated/models.d.ts +18 -0
  136. package/dist/adapters/prisma/generated/models.js +2 -0
  137. package/dist/adapters/prisma/generated/models.js.map +1 -0
  138. package/dist/adapters/prisma/history.d.ts +3 -0
  139. package/dist/adapters/prisma/history.js +289 -0
  140. package/dist/adapters/prisma/history.js.map +1 -0
  141. package/dist/adapters/prisma/identity.d.ts +10 -0
  142. package/dist/adapters/prisma/identity.js +213 -0
  143. package/dist/adapters/prisma/identity.js.map +1 -0
  144. package/dist/adapters/prisma/installation.d.ts +13 -0
  145. package/dist/adapters/prisma/installation.js +155 -0
  146. package/dist/adapters/prisma/installation.js.map +1 -0
  147. package/dist/adapters/prisma/messaging.d.ts +4 -0
  148. package/dist/adapters/prisma/messaging.js +156 -0
  149. package/dist/adapters/prisma/messaging.js.map +1 -0
  150. package/dist/adapters/prisma/migrate.d.ts +5 -0
  151. package/dist/adapters/prisma/migrate.js +40 -0
  152. package/dist/adapters/prisma/migrate.js.map +1 -0
  153. package/dist/adapters/prisma/receiver-wakeups.d.ts +26 -0
  154. package/dist/adapters/prisma/receiver-wakeups.js +79 -0
  155. package/dist/adapters/prisma/receiver-wakeups.js.map +1 -0
  156. package/dist/adapters/prisma/registry.d.ts +8 -0
  157. package/dist/adapters/prisma/registry.js +427 -0
  158. package/dist/adapters/prisma/registry.js.map +1 -0
  159. package/dist/adapters/prisma/rows.d.ts +58 -0
  160. package/dist/adapters/prisma/rows.js +408 -0
  161. package/dist/adapters/prisma/rows.js.map +1 -0
  162. package/dist/adapters/prisma/unit-of-work.d.ts +36 -0
  163. package/dist/adapters/prisma/unit-of-work.js +66 -0
  164. package/dist/adapters/prisma/unit-of-work.js.map +1 -0
  165. package/dist/adapters/rest/openapi.d.ts +12 -0
  166. package/dist/adapters/rest/openapi.js +62 -0
  167. package/dist/adapters/rest/openapi.js.map +1 -0
  168. package/dist/adapters/rest/rest-api.d.ts +8 -0
  169. package/dist/adapters/rest/rest-api.js +61 -0
  170. package/dist/adapters/rest/rest-api.js.map +1 -0
  171. package/dist/adapters/trpc/console.d.ts +150 -0
  172. package/dist/adapters/trpc/console.js +102 -0
  173. package/dist/adapters/trpc/console.js.map +1 -0
  174. package/dist/adapters/trpc/context.d.ts +201 -0
  175. package/dist/adapters/trpc/context.js +2 -0
  176. package/dist/adapters/trpc/context.js.map +1 -0
  177. package/dist/adapters/trpc/fleet.d.ts +637 -0
  178. package/dist/adapters/trpc/fleet.js +437 -0
  179. package/dist/adapters/trpc/fleet.js.map +1 -0
  180. package/dist/adapters/trpc/installation.d.ts +414 -0
  181. package/dist/adapters/trpc/installation.js +138 -0
  182. package/dist/adapters/trpc/installation.js.map +1 -0
  183. package/dist/adapters/trpc/router.d.ts +1263 -0
  184. package/dist/adapters/trpc/router.js +15 -0
  185. package/dist/adapters/trpc/router.js.map +1 -0
  186. package/dist/adapters/trpc/ship-contract.d.ts +107 -0
  187. package/dist/adapters/trpc/ship-contract.js +165 -0
  188. package/dist/adapters/trpc/ship-contract.js.map +1 -0
  189. package/dist/adapters/trpc/ship-protocol.d.ts +9 -0
  190. package/dist/adapters/trpc/ship-protocol.js +25 -0
  191. package/dist/adapters/trpc/ship-protocol.js.map +1 -0
  192. package/dist/adapters/trpc/ship.d.ts +209 -0
  193. package/dist/adapters/trpc/ship.js +214 -0
  194. package/dist/adapters/trpc/ship.js.map +1 -0
  195. package/dist/adapters/trpc/starting-prompt-text.d.ts +7 -0
  196. package/dist/adapters/trpc/starting-prompt-text.js +60 -0
  197. package/dist/adapters/trpc/starting-prompt-text.js.map +1 -0
  198. package/dist/adapters/trpc/system.d.ts +29 -0
  199. package/dist/adapters/trpc/system.js +15 -0
  200. package/dist/adapters/trpc/system.js.map +1 -0
  201. package/dist/adapters/trpc/trpc.d.ts +131 -0
  202. package/dist/adapters/trpc/trpc.js +350 -0
  203. package/dist/adapters/trpc/trpc.js.map +1 -0
  204. package/dist/app.d.ts +31 -0
  205. package/dist/app.js +80 -0
  206. package/dist/app.js.map +1 -0
  207. package/dist/bin/aeolus-core.d.ts +2 -0
  208. package/dist/bin/aeolus-core.js +45 -0
  209. package/dist/bin/aeolus-core.js.map +1 -0
  210. package/dist/config.d.ts +35 -0
  211. package/dist/config.js +74 -0
  212. package/dist/config.js.map +1 -0
  213. package/dist/domain/identity/authenticate.d.ts +46 -0
  214. package/dist/domain/identity/authenticate.js +18 -0
  215. package/dist/domain/identity/authenticate.js.map +1 -0
  216. package/dist/domain/identity/console-session.d.ts +54 -0
  217. package/dist/domain/identity/console-session.js +29 -0
  218. package/dist/domain/identity/console-session.js.map +1 -0
  219. package/dist/domain/identity/credential.d.ts +76 -0
  220. package/dist/domain/identity/credential.js +63 -0
  221. package/dist/domain/identity/credential.js.map +1 -0
  222. package/dist/domain/identity/dismiss-notice.d.ts +19 -0
  223. package/dist/domain/identity/dismiss-notice.js +23 -0
  224. package/dist/domain/identity/dismiss-notice.js.map +1 -0
  225. package/dist/domain/identity/get-guide.d.ts +7 -0
  226. package/dist/domain/identity/get-guide.js +5 -0
  227. package/dist/domain/identity/get-guide.js.map +1 -0
  228. package/dist/domain/identity/get-notices.d.ts +7 -0
  229. package/dist/domain/identity/get-notices.js +5 -0
  230. package/dist/domain/identity/get-notices.js.map +1 -0
  231. package/dist/domain/identity/guide.d.ts +24 -0
  232. package/dist/domain/identity/guide.js +3 -0
  233. package/dist/domain/identity/guide.js.map +1 -0
  234. package/dist/domain/identity/issue-sign-in-ticket.d.ts +38 -0
  235. package/dist/domain/identity/issue-sign-in-ticket.js +39 -0
  236. package/dist/domain/identity/issue-sign-in-ticket.js.map +1 -0
  237. package/dist/domain/identity/notice.d.ts +16 -0
  238. package/dist/domain/identity/notice.js +12 -0
  239. package/dist/domain/identity/notice.js.map +1 -0
  240. package/dist/domain/identity/operator-account.d.ts +28 -0
  241. package/dist/domain/identity/operator-account.js +21 -0
  242. package/dist/domain/identity/operator-account.js.map +1 -0
  243. package/dist/domain/identity/ports.d.ts +193 -0
  244. package/dist/domain/identity/ports.js +2 -0
  245. package/dist/domain/identity/ports.js.map +1 -0
  246. package/dist/domain/identity/public.d.ts +3 -0
  247. package/dist/domain/identity/public.js +5 -0
  248. package/dist/domain/identity/public.js.map +1 -0
  249. package/dist/domain/identity/read-account.d.ts +35 -0
  250. package/dist/domain/identity/read-account.js +27 -0
  251. package/dist/domain/identity/read-account.js.map +1 -0
  252. package/dist/domain/identity/read-guide.d.ts +18 -0
  253. package/dist/domain/identity/read-guide.js +21 -0
  254. package/dist/domain/identity/read-guide.js.map +1 -0
  255. package/dist/domain/identity/read-notices.d.ts +13 -0
  256. package/dist/domain/identity/read-notices.js +17 -0
  257. package/dist/domain/identity/read-notices.js.map +1 -0
  258. package/dist/domain/identity/record-guide-progress.d.ts +19 -0
  259. package/dist/domain/identity/record-guide-progress.js +24 -0
  260. package/dist/domain/identity/record-guide-progress.js.map +1 -0
  261. package/dist/domain/identity/redeem-sign-in-ticket.d.ts +34 -0
  262. package/dist/domain/identity/redeem-sign-in-ticket.js +25 -0
  263. package/dist/domain/identity/redeem-sign-in-ticket.js.map +1 -0
  264. package/dist/domain/identity/reset-operator-password.d.ts +34 -0
  265. package/dist/domain/identity/reset-operator-password.js +55 -0
  266. package/dist/domain/identity/reset-operator-password.js.map +1 -0
  267. package/dist/domain/identity/set-guide.d.ts +13 -0
  268. package/dist/domain/identity/set-guide.js +12 -0
  269. package/dist/domain/identity/set-guide.js.map +1 -0
  270. package/dist/domain/identity/set-notices.d.ts +13 -0
  271. package/dist/domain/identity/set-notices.js +12 -0
  272. package/dist/domain/identity/set-notices.js.map +1 -0
  273. package/dist/domain/identity/set-theme.d.ts +21 -0
  274. package/dist/domain/identity/set-theme.js +19 -0
  275. package/dist/domain/identity/set-theme.js.map +1 -0
  276. package/dist/domain/identity/sign-in-ticket.d.ts +21 -0
  277. package/dist/domain/identity/sign-in-ticket.js +5 -0
  278. package/dist/domain/identity/sign-in-ticket.js.map +1 -0
  279. package/dist/domain/identity/sign-in.d.ts +51 -0
  280. package/dist/domain/identity/sign-in.js +43 -0
  281. package/dist/domain/identity/sign-in.js.map +1 -0
  282. package/dist/domain/identity/sign-out.d.ts +20 -0
  283. package/dist/domain/identity/sign-out.js +32 -0
  284. package/dist/domain/identity/sign-out.js.map +1 -0
  285. package/dist/domain/identity/start-console-session.d.ts +27 -0
  286. package/dist/domain/identity/start-console-session.js +54 -0
  287. package/dist/domain/identity/start-console-session.js.map +1 -0
  288. package/dist/domain/identity/start-viewer-session.d.ts +29 -0
  289. package/dist/domain/identity/start-viewer-session.js +42 -0
  290. package/dist/domain/identity/start-viewer-session.js.map +1 -0
  291. package/dist/domain/messaging/acknowledge-delivery.d.ts +30 -0
  292. package/dist/domain/messaging/acknowledge-delivery.js +31 -0
  293. package/dist/domain/messaging/acknowledge-delivery.js.map +1 -0
  294. package/dist/domain/messaging/answer-ping.d.ts +33 -0
  295. package/dist/domain/messaging/answer-ping.js +37 -0
  296. package/dist/domain/messaging/answer-ping.js.map +1 -0
  297. package/dist/domain/messaging/check-inbox.d.ts +33 -0
  298. package/dist/domain/messaging/check-inbox.js +61 -0
  299. package/dist/domain/messaging/check-inbox.js.map +1 -0
  300. package/dist/domain/messaging/content-type.d.ts +9 -0
  301. package/dist/domain/messaging/content-type.js +18 -0
  302. package/dist/domain/messaging/content-type.js.map +1 -0
  303. package/dist/domain/messaging/daily-message-limit.d.ts +19 -0
  304. package/dist/domain/messaging/daily-message-limit.js +24 -0
  305. package/dist/domain/messaging/daily-message-limit.js.map +1 -0
  306. package/dist/domain/messaging/delivery.d.ts +116 -0
  307. package/dist/domain/messaging/delivery.js +201 -0
  308. package/dist/domain/messaging/delivery.js.map +1 -0
  309. package/dist/domain/messaging/dismiss-delivery.d.ts +28 -0
  310. package/dist/domain/messaging/dismiss-delivery.js +29 -0
  311. package/dist/domain/messaging/dismiss-delivery.js.map +1 -0
  312. package/dist/domain/messaging/inbox-wait.d.ts +8 -0
  313. package/dist/domain/messaging/inbox-wait.js +19 -0
  314. package/dist/domain/messaging/inbox-wait.js.map +1 -0
  315. package/dist/domain/messaging/mark-done.d.ts +45 -0
  316. package/dist/domain/messaging/mark-done.js +49 -0
  317. package/dist/domain/messaging/mark-done.js.map +1 -0
  318. package/dist/domain/messaging/mark-read.d.ts +27 -0
  319. package/dist/domain/messaging/mark-read.js +34 -0
  320. package/dist/domain/messaging/mark-read.js.map +1 -0
  321. package/dist/domain/messaging/message.d.ts +104 -0
  322. package/dist/domain/messaging/message.js +84 -0
  323. package/dist/domain/messaging/message.js.map +1 -0
  324. package/dist/domain/messaging/payload.d.ts +9 -0
  325. package/dist/domain/messaging/payload.js +16 -0
  326. package/dist/domain/messaging/payload.js.map +1 -0
  327. package/dist/domain/messaging/ping-ship.d.ts +38 -0
  328. package/dist/domain/messaging/ping-ship.js +42 -0
  329. package/dist/domain/messaging/ping-ship.js.map +1 -0
  330. package/dist/domain/messaging/ports.d.ts +116 -0
  331. package/dist/domain/messaging/ports.js +2 -0
  332. package/dist/domain/messaging/ports.js.map +1 -0
  333. package/dist/domain/messaging/receive-deliveries.d.ts +68 -0
  334. package/dist/domain/messaging/receive-deliveries.js +119 -0
  335. package/dist/domain/messaging/receive-deliveries.js.map +1 -0
  336. package/dist/domain/messaging/receive-max.d.ts +8 -0
  337. package/dist/domain/messaging/receive-max.js +17 -0
  338. package/dist/domain/messaging/receive-max.js.map +1 -0
  339. package/dist/domain/messaging/reply-to-message.d.ts +35 -0
  340. package/dist/domain/messaging/reply-to-message.js +49 -0
  341. package/dist/domain/messaging/reply-to-message.js.map +1 -0
  342. package/dist/domain/messaging/resend-delivery.d.ts +48 -0
  343. package/dist/domain/messaging/resend-delivery.js +97 -0
  344. package/dist/domain/messaging/resend-delivery.js.map +1 -0
  345. package/dist/domain/messaging/send-message.d.ts +88 -0
  346. package/dist/domain/messaging/send-message.js +115 -0
  347. package/dist/domain/messaging/send-message.js.map +1 -0
  348. package/dist/domain/messaging/send-request.d.ts +16 -0
  349. package/dist/domain/messaging/send-request.js +18 -0
  350. package/dist/domain/messaging/send-request.js.map +1 -0
  351. package/dist/domain/registry/applied-limits.d.ts +15 -0
  352. package/dist/domain/registry/applied-limits.js +15 -0
  353. package/dist/domain/registry/applied-limits.js.map +1 -0
  354. package/dist/domain/registry/assign-crew.d.ts +31 -0
  355. package/dist/domain/registry/assign-crew.js +35 -0
  356. package/dist/domain/registry/assign-crew.js.map +1 -0
  357. package/dist/domain/registry/claim-ship.d.ts +49 -0
  358. package/dist/domain/registry/claim-ship.js +59 -0
  359. package/dist/domain/registry/claim-ship.js.map +1 -0
  360. package/dist/domain/registry/commission-ship.d.ts +54 -0
  361. package/dist/domain/registry/commission-ship.js +70 -0
  362. package/dist/domain/registry/commission-ship.js.map +1 -0
  363. package/dist/domain/registry/confirm-crew-release.d.ts +28 -0
  364. package/dist/domain/registry/confirm-crew-release.js +28 -0
  365. package/dist/domain/registry/confirm-crew-release.js.map +1 -0
  366. package/dist/domain/registry/create-fleet.d.ts +39 -0
  367. package/dist/domain/registry/create-fleet.js +56 -0
  368. package/dist/domain/registry/create-fleet.js.map +1 -0
  369. package/dist/domain/registry/crew-request.d.ts +148 -0
  370. package/dist/domain/registry/crew-request.js +175 -0
  371. package/dist/domain/registry/crew-request.js.map +1 -0
  372. package/dist/domain/registry/delete-fleet.d.ts +46 -0
  373. package/dist/domain/registry/delete-fleet.js +34 -0
  374. package/dist/domain/registry/delete-fleet.js.map +1 -0
  375. package/dist/domain/registry/deregister.d.ts +32 -0
  376. package/dist/domain/registry/deregister.js +38 -0
  377. package/dist/domain/registry/deregister.js.map +1 -0
  378. package/dist/domain/registry/explain-crew-request.d.ts +30 -0
  379. package/dist/domain/registry/explain-crew-request.js +31 -0
  380. package/dist/domain/registry/explain-crew-request.js.map +1 -0
  381. package/dist/domain/registry/fleet.d.ts +12 -0
  382. package/dist/domain/registry/fleet.js +12 -0
  383. package/dist/domain/registry/fleet.js.map +1 -0
  384. package/dist/domain/registry/found-fleet.d.ts +32 -0
  385. package/dist/domain/registry/found-fleet.js +43 -0
  386. package/dist/domain/registry/found-fleet.js.map +1 -0
  387. package/dist/domain/registry/get-fleet-limits.d.ts +17 -0
  388. package/dist/domain/registry/get-fleet-limits.js +14 -0
  389. package/dist/domain/registry/get-fleet-limits.js.map +1 -0
  390. package/dist/domain/registry/get-installation-fleet.d.ts +15 -0
  391. package/dist/domain/registry/get-installation-fleet.js +12 -0
  392. package/dist/domain/registry/get-installation-fleet.js.map +1 -0
  393. package/dist/domain/registry/get-installation-settings.d.ts +7 -0
  394. package/dist/domain/registry/get-installation-settings.js +5 -0
  395. package/dist/domain/registry/get-installation-settings.js.map +1 -0
  396. package/dist/domain/registry/get-ship.d.ts +34 -0
  397. package/dist/domain/registry/get-ship.js +36 -0
  398. package/dist/domain/registry/get-ship.js.map +1 -0
  399. package/dist/domain/registry/get-starting-prompt.d.ts +24 -0
  400. package/dist/domain/registry/get-starting-prompt.js +46 -0
  401. package/dist/domain/registry/get-starting-prompt.js.map +1 -0
  402. package/dist/domain/registry/initialise-fleet.d.ts +28 -0
  403. package/dist/domain/registry/initialise-fleet.js +39 -0
  404. package/dist/domain/registry/initialise-fleet.js.map +1 -0
  405. package/dist/domain/registry/installation-fleet.d.ts +36 -0
  406. package/dist/domain/registry/installation-fleet.js +22 -0
  407. package/dist/domain/registry/installation-fleet.js.map +1 -0
  408. package/dist/domain/registry/installation-request.d.ts +23 -0
  409. package/dist/domain/registry/installation-request.js +5 -0
  410. package/dist/domain/registry/installation-request.js.map +1 -0
  411. package/dist/domain/registry/lease.d.ts +51 -0
  412. package/dist/domain/registry/lease.js +39 -0
  413. package/dist/domain/registry/lease.js.map +1 -0
  414. package/dist/domain/registry/leases.d.ts +66 -0
  415. package/dist/domain/registry/leases.js +80 -0
  416. package/dist/domain/registry/leases.js.map +1 -0
  417. package/dist/domain/registry/limits.d.ts +50 -0
  418. package/dist/domain/registry/limits.js +24 -0
  419. package/dist/domain/registry/limits.js.map +1 -0
  420. package/dist/domain/registry/list-fleet.d.ts +70 -0
  421. package/dist/domain/registry/list-fleet.js +47 -0
  422. package/dist/domain/registry/list-fleet.js.map +1 -0
  423. package/dist/domain/registry/list-fleets.d.ts +11 -0
  424. package/dist/domain/registry/list-fleets.js +9 -0
  425. package/dist/domain/registry/list-fleets.js.map +1 -0
  426. package/dist/domain/registry/list-installation-fleets.d.ts +15 -0
  427. package/dist/domain/registry/list-installation-fleets.js +15 -0
  428. package/dist/domain/registry/list-installation-fleets.js.map +1 -0
  429. package/dist/domain/registry/ping-status.d.ts +17 -0
  430. package/dist/domain/registry/ping-status.js +28 -0
  431. package/dist/domain/registry/ping-status.js.map +1 -0
  432. package/dist/domain/registry/pingable-ship.d.ts +22 -0
  433. package/dist/domain/registry/pingable-ship.js +21 -0
  434. package/dist/domain/registry/pingable-ship.js.map +1 -0
  435. package/dist/domain/registry/ports.d.ts +318 -0
  436. package/dist/domain/registry/ports.js +2 -0
  437. package/dist/domain/registry/ports.js.map +1 -0
  438. package/dist/domain/registry/public.d.ts +8 -0
  439. package/dist/domain/registry/public.js +10 -0
  440. package/dist/domain/registry/public.js.map +1 -0
  441. package/dist/domain/registry/read-assigned-crew-requests.d.ts +14 -0
  442. package/dist/domain/registry/read-assigned-crew-requests.js +15 -0
  443. package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -0
  444. package/dist/domain/registry/recrew-ship.d.ts +33 -0
  445. package/dist/domain/registry/recrew-ship.js +34 -0
  446. package/dist/domain/registry/recrew-ship.js.map +1 -0
  447. package/dist/domain/registry/release-ship.d.ts +38 -0
  448. package/dist/domain/registry/release-ship.js +47 -0
  449. package/dist/domain/registry/release-ship.js.map +1 -0
  450. package/dist/domain/registry/remove-crew-request.d.ts +28 -0
  451. package/dist/domain/registry/remove-crew-request.js +36 -0
  452. package/dist/domain/registry/remove-crew-request.js.map +1 -0
  453. package/dist/domain/registry/rename-ship.d.ts +30 -0
  454. package/dist/domain/registry/rename-ship.js +39 -0
  455. package/dist/domain/registry/rename-ship.js.map +1 -0
  456. package/dist/domain/registry/report-crew-status.d.ts +29 -0
  457. package/dist/domain/registry/report-crew-status.js +30 -0
  458. package/dist/domain/registry/report-crew-status.js.map +1 -0
  459. package/dist/domain/registry/report-details.d.ts +18 -0
  460. package/dist/domain/registry/report-details.js +41 -0
  461. package/dist/domain/registry/report-details.js.map +1 -0
  462. package/dist/domain/registry/report-log.d.ts +21 -0
  463. package/dist/domain/registry/report-log.js +16 -0
  464. package/dist/domain/registry/report-log.js.map +1 -0
  465. package/dist/domain/registry/report.d.ts +30 -0
  466. package/dist/domain/registry/report.js +30 -0
  467. package/dist/domain/registry/report.js.map +1 -0
  468. package/dist/domain/registry/request-crew.d.ts +32 -0
  469. package/dist/domain/registry/request-crew.js +29 -0
  470. package/dist/domain/registry/request-crew.js.map +1 -0
  471. package/dist/domain/registry/resolve-selector.d.ts +25 -0
  472. package/dist/domain/registry/resolve-selector.js +32 -0
  473. package/dist/domain/registry/resolve-selector.js.map +1 -0
  474. package/dist/domain/registry/retire-ship.d.ts +42 -0
  475. package/dist/domain/registry/retire-ship.js +68 -0
  476. package/dist/domain/registry/retire-ship.js.map +1 -0
  477. package/dist/domain/registry/set-fleet-limits.d.ts +30 -0
  478. package/dist/domain/registry/set-fleet-limits.js +54 -0
  479. package/dist/domain/registry/set-fleet-limits.js.map +1 -0
  480. package/dist/domain/registry/set-installation-settings.d.ts +18 -0
  481. package/dist/domain/registry/set-installation-settings.js +31 -0
  482. package/dist/domain/registry/set-installation-settings.js.map +1 -0
  483. package/dist/domain/registry/ship-handle.d.ts +5 -0
  484. package/dist/domain/registry/ship-handle.js +20 -0
  485. package/dist/domain/registry/ship-handle.js.map +1 -0
  486. package/dist/domain/registry/ship-note.d.ts +7 -0
  487. package/dist/domain/registry/ship-note.js +15 -0
  488. package/dist/domain/registry/ship-note.js.map +1 -0
  489. package/dist/domain/registry/ship-report.d.ts +42 -0
  490. package/dist/domain/registry/ship-report.js +93 -0
  491. package/dist/domain/registry/ship-report.js.map +1 -0
  492. package/dist/domain/registry/ship.d.ts +190 -0
  493. package/dist/domain/registry/ship.js +334 -0
  494. package/dist/domain/registry/ship.js.map +1 -0
  495. package/dist/domain/registry/ships.d.ts +25 -0
  496. package/dist/domain/registry/ships.js +22 -0
  497. package/dist/domain/registry/ships.js.map +1 -0
  498. package/dist/domain/registry/starting-prompt.d.ts +32 -0
  499. package/dist/domain/registry/starting-prompt.js +22 -0
  500. package/dist/domain/registry/starting-prompt.js.map +1 -0
  501. package/dist/domain/registry/whoami.d.ts +20 -0
  502. package/dist/domain/registry/whoami.js +15 -0
  503. package/dist/domain/registry/whoami.js.map +1 -0
  504. package/dist/domain/shared/caller.d.ts +25 -0
  505. package/dist/domain/shared/caller.js +8 -0
  506. package/dist/domain/shared/caller.js.map +1 -0
  507. package/dist/domain/shared/clock.d.ts +4 -0
  508. package/dist/domain/shared/clock.js +2 -0
  509. package/dist/domain/shared/clock.js.map +1 -0
  510. package/dist/domain/shared/errors.d.ts +13 -0
  511. package/dist/domain/shared/errors.js +6 -0
  512. package/dist/domain/shared/errors.js.map +1 -0
  513. package/dist/domain/shared/events.d.ts +75 -0
  514. package/dist/domain/shared/events.js +9 -0
  515. package/dist/domain/shared/events.js.map +1 -0
  516. package/dist/domain/shared/follow-fleet.d.ts +32 -0
  517. package/dist/domain/shared/follow-fleet.js +65 -0
  518. package/dist/domain/shared/follow-fleet.js.map +1 -0
  519. package/dist/domain/shared/history.d.ts +124 -0
  520. package/dist/domain/shared/history.js +16 -0
  521. package/dist/domain/shared/history.js.map +1 -0
  522. package/dist/domain/shared/idempotency-key.d.ts +8 -0
  523. package/dist/domain/shared/idempotency-key.js +14 -0
  524. package/dist/domain/shared/idempotency-key.js.map +1 -0
  525. package/dist/domain/shared/notifier.d.ts +17 -0
  526. package/dist/domain/shared/notifier.js +2 -0
  527. package/dist/domain/shared/notifier.js.map +1 -0
  528. package/dist/domain/shared/ping.d.ts +18 -0
  529. package/dist/domain/shared/ping.js +8 -0
  530. package/dist/domain/shared/ping.js.map +1 -0
  531. package/dist/domain/shared/read-fleet-events.d.ts +29 -0
  532. package/dist/domain/shared/read-fleet-events.js +25 -0
  533. package/dist/domain/shared/read-fleet-events.js.map +1 -0
  534. package/dist/domain/shared/read-fleet-limits.d.ts +39 -0
  535. package/dist/domain/shared/read-fleet-limits.js +24 -0
  536. package/dist/domain/shared/read-fleet-limits.js.map +1 -0
  537. package/dist/domain/shared/read-inbox.d.ts +20 -0
  538. package/dist/domain/shared/read-inbox.js +16 -0
  539. package/dist/domain/shared/read-inbox.js.map +1 -0
  540. package/dist/domain/shared/read-message.d.ts +21 -0
  541. package/dist/domain/shared/read-message.js +18 -0
  542. package/dist/domain/shared/read-message.js.map +1 -0
  543. package/dist/domain/shared/read-needs-attention.d.ts +12 -0
  544. package/dist/domain/shared/read-needs-attention.js +10 -0
  545. package/dist/domain/shared/read-needs-attention.js.map +1 -0
  546. package/dist/domain/shared/read-ship-messages.d.ts +28 -0
  547. package/dist/domain/shared/read-ship-messages.js +30 -0
  548. package/dist/domain/shared/read-ship-messages.js.map +1 -0
  549. package/dist/domain/shared/read-ship-timeline.d.ts +18 -0
  550. package/dist/domain/shared/read-ship-timeline.js +16 -0
  551. package/dist/domain/shared/read-ship-timeline.js.map +1 -0
  552. package/dist/domain/shared/result.d.ts +16 -0
  553. package/dist/domain/shared/result.js +7 -0
  554. package/dist/domain/shared/result.js.map +1 -0
  555. package/dist/domain/shared/secrets.d.ts +26 -0
  556. package/dist/domain/shared/secrets.js +2 -0
  557. package/dist/domain/shared/secrets.js.map +1 -0
  558. package/dist/domain/shared/selector.d.ts +29 -0
  559. package/dist/domain/shared/selector.js +2 -0
  560. package/dist/domain/shared/selector.js.map +1 -0
  561. package/dist/domain/shared/unit-of-work.d.ts +13 -0
  562. package/dist/domain/shared/unit-of-work.js +2 -0
  563. package/dist/domain/shared/unit-of-work.js.map +1 -0
  564. package/dist/domain/shared/utc-day.d.ts +4 -0
  565. package/dist/domain/shared/utc-day.js +9 -0
  566. package/dist/domain/shared/utc-day.js.map +1 -0
  567. package/dist/index.d.ts +1 -0
  568. package/dist/index.js +2 -0
  569. package/dist/index.js.map +1 -0
  570. package/dist/start.d.ts +6 -0
  571. package/dist/start.js +29 -0
  572. package/dist/start.js.map +1 -0
  573. package/dist/wiring.d.ts +158 -0
  574. package/dist/wiring.js +185 -0
  575. package/dist/wiring.js.map +1 -0
  576. package/package.json +58 -3
  577. package/prisma.config.ts +18 -0
  578. package/src/adapters/prisma/migrations/20260929124818_init/migration.sql +201 -0
  579. package/src/adapters/prisma/migrations/20260929160000_fleet_argo_console_session/migration.sql +130 -0
  580. package/src/adapters/prisma/migrations/20260929220017_operator_login/migration.sql +27 -0
  581. package/src/adapters/prisma/migrations/20260930090000_crew_token/migration.sql +5 -0
  582. package/src/adapters/prisma/migrations/20260930120000_send/migration.sql +30 -0
  583. package/src/adapters/prisma/migrations/20260930150000_receive/migration.sql +24 -0
  584. package/src/adapters/prisma/migrations/20261001010000_event_seq/migration.sql +34 -0
  585. package/src/adapters/prisma/migrations/20261001020000_console_session_end_reason/migration.sql +14 -0
  586. package/src/adapters/prisma/migrations/20261001030000_account_theme_session_device/migration.sql +8 -0
  587. package/src/adapters/prisma/migrations/20261001040000_lease_last_seen/migration.sql +2 -0
  588. package/src/adapters/prisma/migrations/20261002190000_lease_report/migration.sql +7 -0
  589. package/src/adapters/prisma/migrations/20261003140000_commission_key/migration.sql +7 -0
  590. package/src/adapters/prisma/migrations/20261003200000_message_model/migration.sql +5 -0
  591. package/src/adapters/prisma/migrations/20261003201000_lease_harness/migration.sql +2 -0
  592. package/src/adapters/prisma/migrations/20261004120000_operator_without_password/migration.sql +2 -0
  593. package/src/adapters/prisma/migrations/20261004121000_installation_requests/migration.sql +21 -0
  594. package/src/adapters/prisma/migrations/20261004122000_events_deleted_with_their_fleet/migration.sql +11 -0
  595. package/src/adapters/prisma/migrations/20261004130000_sign_in_tickets/migration.sql +16 -0
  596. package/src/adapters/prisma/migrations/20261004140000_fleet_limits/migration.sql +6 -0
  597. package/src/adapters/prisma/migrations/20261004141000_installation_settings/migration.sql +12 -0
  598. package/src/adapters/prisma/migrations/20261005090000_viewer_ship/migration.sql +2 -0
  599. package/src/adapters/prisma/migrations/20261005100000_viewer_sessions/migration.sql +20 -0
  600. package/src/adapters/prisma/migrations/20261005110000_notices/migration.sql +37 -0
  601. package/src/adapters/prisma/migrations/20261005120000_guide/migration.sql +34 -0
  602. package/src/adapters/prisma/migrations/20261006100000_fleet_crew_scope/migration.sql +8 -0
  603. package/src/adapters/prisma/migrations/20261006140000_lease_report_details/migration.sql +3 -0
  604. package/src/adapters/prisma/migrations/20261006160000_crew_requests/migration.sql +20 -0
  605. package/src/adapters/prisma/migrations/20261006180000_crew_scopes/migration.sql +9 -0
  606. package/src/adapters/prisma/migrations/20261006190000_crew_assignment/migration.sql +13 -0
  607. package/src/adapters/prisma/migrations/20261006200000_crew_request_reason/migration.sql +3 -0
  608. package/src/adapters/prisma/migrations/20261007020000_broad_crewing_scope_retired/migration.sql +8 -0
  609. package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
  610. package/src/adapters/prisma/schema.prisma +558 -0
@@ -0,0 +1,61 @@
1
+ import { holdLease } from '../registry/public.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { inboxWait } from './inbox-wait.js';
4
+ /**
5
+ * Use case: how many deliveries wait for the crew (`inbox`): what its next
6
+ * receive would hand it, its own in flight and those pending for its ship or
7
+ * its type. It claims nothing, so a watcher can ask as often as it likes and
8
+ * leave every delivery for the receive. Its scope (messages:receive) is
9
+ * checked before this runs.
10
+ *
11
+ * With a wait, and nothing waiting, it watches the same wake-ups as a
12
+ * receive and looks again on each, until something waits or the wait has
13
+ * passed. It starts watching before it looks a second time, so a delivery
14
+ * that commits in between is counted.
15
+ */
16
+ export function createCheckInbox(deps) {
17
+ return async (crew, input) => {
18
+ const waitMs = inboxWait(input.waitSeconds);
19
+ if (!waitMs.isOk) {
20
+ return waitMs;
21
+ }
22
+ const until = deps.clock.now().getTime() + waitMs.value;
23
+ let watch;
24
+ try {
25
+ for (;;) {
26
+ const look = await deps.uow.run(async (tx) => {
27
+ const ship = await holdLease(tx, crew);
28
+ if (!ship.isOk) {
29
+ return ship;
30
+ }
31
+ const waiting = await tx.deliveries.countReceivable({
32
+ fleetId: crew.fleetId,
33
+ shipId: crew.shipId,
34
+ type: ship.value.type,
35
+ leaseId: crew.leaseId,
36
+ });
37
+ return ok({ type: ship.value.type, waiting });
38
+ });
39
+ if (!look.isOk) {
40
+ return look;
41
+ }
42
+ const { type, waiting } = look.value;
43
+ const remainingMs = until - deps.clock.now().getTime();
44
+ if (waiting > 0 || remainingMs <= 0) {
45
+ return ok({ waiting });
46
+ }
47
+ if (watch === undefined) {
48
+ watch = deps.wakeups.watch({ fleetId: crew.fleetId, shipId: crew.shipId, type });
49
+ continue;
50
+ }
51
+ if ((await watch.next(remainingMs)) === 'timedOut') {
52
+ return ok({ waiting: 0 });
53
+ }
54
+ }
55
+ }
56
+ finally {
57
+ watch?.stop();
58
+ }
59
+ };
60
+ }
61
+ //# sourceMappingURL=check-inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-inbox.js","sourceRoot":"","sources":["../../../src/domain/messaging/check-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqC,MAAM,uBAAuB,CAAC;AAIrF,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAc5C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAIhC;IACC,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACxD,IAAI,KAAgC,CAAC;QACrC,IAAI,CAAC;YACH,SAAS,CAAC;gBACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACf,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;wBAClD,OAAO,EAAE,IAAI,CAAC,OAAO;wBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;wBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;qBACtB,CAAC,CAAC;oBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;gBACrC,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBACvD,IAAI,OAAO,GAAG,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACpC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjF,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;oBACnD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type DomainError } from '../shared/errors.js';
2
+ import { type Result } from '../shared/result.js';
3
+ /**
4
+ * What a payload's text is, as its sender says: any well-formed media type,
5
+ * taken exactly as given and passed on untouched, and text/plain when the
6
+ * sender does not say. The fleet never reads the payload by it and allows no
7
+ * list of its own (ADR 0016). The rule is shared with the common schema.
8
+ */
9
+ export declare function contentType(raw: string | undefined): Result<string, DomainError<'INVALID_CONTENT_TYPE'>>;
@@ -0,0 +1,18 @@
1
+ import { CONTENT_TYPE_DEFAULT, CONTENT_TYPE_MAX_LENGTH, isMediaType } from '@aeolus-fleet/common';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ /**
5
+ * What a payload's text is, as its sender says: any well-formed media type,
6
+ * taken exactly as given and passed on untouched, and text/plain when the
7
+ * sender does not say. The fleet never reads the payload by it and allows no
8
+ * list of its own (ADR 0016). The rule is shared with the common schema.
9
+ */
10
+ export function contentType(raw) {
11
+ if (raw === undefined) {
12
+ return ok(CONTENT_TYPE_DEFAULT);
13
+ }
14
+ return raw.length <= CONTENT_TYPE_MAX_LENGTH && isMediaType(raw)
15
+ ? ok(raw)
16
+ : refuse('INVALID_CONTENT_TYPE', `A content type is a media type such as text/plain or application/json; charset=utf-8, of at most ${CONTENT_TYPE_MAX_LENGTH} characters`);
17
+ }
18
+ //# sourceMappingURL=content-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-type.js","sourceRoot":"","sources":["../../../src/domain/messaging/content-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElG,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,IAAI,uBAAuB,IAAI,WAAW,CAAC,GAAG,CAAC;QAC9D,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QACT,CAAC,CAAC,MAAM,CACJ,sBAAsB,EACtB,oGAAoG,uBAAuB,aAAa,CACzI,CAAC;AACR,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import { type AppliedLimitsTx } from '../registry/public.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { MessageRepository } from './ports.js';
6
+ export interface DailyMessageLimitTx extends AppliedLimitsTx {
7
+ messages: Pick<MessageRepository, 'lockDailyCount' | 'countCreatedSince'>;
8
+ }
9
+ /**
10
+ * Whether the fleet may store one more message today, in the caller's unit of
11
+ * work, before it stores it: every message the fleet stored since 00:00 UTC
12
+ * counts, whatever its kind or sender. With a limit, the count is taken under
13
+ * the fleet's lock, held until the message is stored, so sends at the limit
14
+ * never overshoot it. Without one, nothing is counted or locked.
15
+ */
16
+ export declare function withinDailyMessageLimit(tx: DailyMessageLimitTx, at: {
17
+ fleetId: FleetId;
18
+ time: Date;
19
+ }): Promise<Result<undefined, DomainError<'MESSAGE_LIMIT_REACHED'>>>;
@@ -0,0 +1,24 @@
1
+ import { appliedLimits } from '../registry/public.js';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ import { utcDayStart } from '../shared/utc-day.js';
5
+ /**
6
+ * Whether the fleet may store one more message today, in the caller's unit of
7
+ * work, before it stores it: every message the fleet stored since 00:00 UTC
8
+ * counts, whatever its kind or sender. With a limit, the count is taken under
9
+ * the fleet's lock, held until the message is stored, so sends at the limit
10
+ * never overshoot it. Without one, nothing is counted or locked.
11
+ */
12
+ export async function withinDailyMessageLimit(tx, at) {
13
+ const { fleetId, time } = at;
14
+ const { dailyMessages } = await appliedLimits(tx, fleetId);
15
+ if (dailyMessages === null) {
16
+ return ok(undefined);
17
+ }
18
+ await tx.messages.lockDailyCount(fleetId);
19
+ if ((await tx.messages.countCreatedSince(fleetId, utcDayStart(time))) < dailyMessages) {
20
+ return ok(undefined);
21
+ }
22
+ return refuse('MESSAGE_LIMIT_REACHED', `The fleet reached its limit of ${String(dailyMessages)} messages today (UTC), so nothing was stored. Sending works again after 00:00 UTC.`);
23
+ }
24
+ //# sourceMappingURL=daily-message-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-message-limit.js","sourceRoot":"","sources":["../../../src/domain/messaging/daily-message-limit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAwB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOnD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,EAAuB,EACvB,EAAoC;IAEpC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;QACtF,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CACX,uBAAuB,EACvB,kCAAkC,MAAM,CAAC,aAAa,CAAC,oFAAoF,CAC5I,CAAC;AACJ,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { type LeaseId, type MessageId, type ShipId } from '@aeolus-fleet/common';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type NewEvent } from '../shared/events.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { Delivery, Message } from './message.js';
6
+ /**
7
+ * The Delivery's rules once it is stored (docs/blueprint.md, "Key flows"): a
8
+ * receive claims it, the claiming ship acknowledges it, and a delivery that
9
+ * keeps being claimed without an acknowledgement stops, undeliverable, where
10
+ * the operator sees it.
11
+ */
12
+ /**
13
+ * The claim at which a delivery never acknowledged becomes undeliverable
14
+ * instead of being handed out again: the fifth. A poison message stops there
15
+ * rather than looping forever.
16
+ */
17
+ export declare const UNDELIVERABLE_AT_CLAIM = 5;
18
+ /** The crew a receive or an ack comes from: its ship and the lease it crews it under. */
19
+ export interface CrewOfShip {
20
+ shipId: ShipId;
21
+ leaseId: LeaseId;
22
+ }
23
+ export interface DeliveryClaim {
24
+ /** Claimed: handed to the crew. Undeliverable: this was the fifth claim, so it is not handed out. */
25
+ outcome: 'claimed' | 'undeliverable';
26
+ delivery: Delivery;
27
+ events: NewEvent[];
28
+ }
29
+ /**
30
+ * A crew claims a delivery it may take: one pending for its ship or its type,
31
+ * or one of its own in flight, returned again after a lost reply. Every claim
32
+ * counts. The claim that reaches the fifth makes the delivery undeliverable
33
+ * and hands it to no one; before that, the delivery is in flight with the
34
+ * crew's ship and lease. Either change is caused by the receiving ship.
35
+ */
36
+ export declare function claimDelivery(delivery: Delivery, claim: {
37
+ crew: CrewOfShip;
38
+ at: Date;
39
+ }): DeliveryClaim;
40
+ export type AcknowledgeRefusal = DomainError<'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_HELD_BY_ANOTHER_SHIP'>;
41
+ /**
42
+ * The ship takes responsibility for a delivery it received (ADR 0001): only a
43
+ * delivery in flight with that ship moves to acknowledged, keeping who claimed
44
+ * it. Acknowledging it again is harmless: OK, and nothing changes. A delivery
45
+ * another ship holds or acknowledged, or one that is not in flight, is refused.
46
+ */
47
+ export declare function acknowledgeDelivery(delivery: Delivery, ack: {
48
+ crew: CrewOfShip;
49
+ at: Date;
50
+ }): Result<{
51
+ delivery: Delivery;
52
+ events: NewEvent[];
53
+ }, AcknowledgeRefusal>;
54
+ export type AnswerPingRefusal = DomainError<'DELIVERY_NOT_A_PING'> | AcknowledgeRefusal;
55
+ /**
56
+ * The ship answers a ping with pong: the ping's delivery is acknowledged as
57
+ * an ack would, and DeliveryAcknowledged says pong answered it. Pong answers
58
+ * only a ping. Answering again, or after a plain ack, is harmless: OK, and
59
+ * nothing changes, so the first answer stands.
60
+ */
61
+ export declare function answerPing(delivery: Delivery, pong: {
62
+ message: Message;
63
+ crew: CrewOfShip;
64
+ at: Date;
65
+ }): Result<{
66
+ delivery: Delivery;
67
+ events: NewEvent[];
68
+ }, AnswerPingRefusal>;
69
+ export type DismissRefusal = DomainError<'DELIVERY_NOT_UNDELIVERABLE'>;
70
+ /**
71
+ * The operator lets an undeliverable delivery go (docs/blueprint.md,
72
+ * "DeliveryUndeliverable"): it becomes dismissed, kept in history with its
73
+ * claims, and leaves Needs attention. The event names the ship it was for; a
74
+ * delivery to a type names none. Dismissing it again is harmless: OK, and
75
+ * nothing changes. Any other delivery is refused: only an undeliverable one
76
+ * waits for the operator.
77
+ */
78
+ export declare function dismissDelivery(delivery: Delivery, dismiss: {
79
+ by: ShipId;
80
+ at: Date;
81
+ }): Result<{
82
+ delivery: Delivery;
83
+ events: NewEvent[];
84
+ }, DismissRefusal>;
85
+ /**
86
+ * A resend dismisses the delivery it resends, which must be undeliverable:
87
+ * one already dismissed has nothing left to resend.
88
+ */
89
+ export declare function dismissForResend(delivery: Delivery, dismiss: {
90
+ by: ShipId;
91
+ at: Date;
92
+ }): Result<{
93
+ delivery: Delivery;
94
+ events: NewEvent[];
95
+ }, DismissRefusal>;
96
+ export type MarkDoneRefusal = DomainError<'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_HELD_BY_ANOTHER_SHIP'>;
97
+ /**
98
+ * argo marks a message to it done (docs/blueprint.md, "Inbox"): the console
99
+ * never receives, so an open delivery is claimed and acknowledged at once
100
+ * under the console session's lease, one claim counted, and its two events
101
+ * written as a receive and an ack would write them. One the session already
102
+ * holds in flight is only acknowledged. The acknowledgement names the reply
103
+ * that made it done, when a reply did. Marking it done again is harmless: OK,
104
+ * and nothing changes. A delivery to another ship is not in argo's inbox; one
105
+ * undeliverable, dismissed or abandoned is no longer open.
106
+ */
107
+ export declare function markDone(delivery: Delivery, done: {
108
+ crew: CrewOfShip;
109
+ at: Date;
110
+ reply?: MessageId;
111
+ }): Result<{
112
+ delivery: Delivery;
113
+ events: NewEvent[];
114
+ }, MarkDoneRefusal>;
115
+ /** Whether the delivery is addressed to the ship itself: in its inbox, not its type's queue. */
116
+ export declare function isInInboxOf(delivery: Delivery | undefined, shipId: ShipId): delivery is Delivery;
@@ -0,0 +1,201 @@
1
+ import { isPingContentType } from '@aeolus-fleet/common';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { shipActor } from '../shared/events.js';
4
+ import { ok } from '../shared/result.js';
5
+ /**
6
+ * The Delivery's rules once it is stored (docs/blueprint.md, "Key flows"): a
7
+ * receive claims it, the claiming ship acknowledges it, and a delivery that
8
+ * keeps being claimed without an acknowledgement stops, undeliverable, where
9
+ * the operator sees it.
10
+ */
11
+ /**
12
+ * The claim at which a delivery never acknowledged becomes undeliverable
13
+ * instead of being handed out again: the fifth. A poison message stops there
14
+ * rather than looping forever.
15
+ */
16
+ export const UNDELIVERABLE_AT_CLAIM = 5;
17
+ /**
18
+ * A crew claims a delivery it may take: one pending for its ship or its type,
19
+ * or one of its own in flight, returned again after a lost reply. Every claim
20
+ * counts. The claim that reaches the fifth makes the delivery undeliverable
21
+ * and hands it to no one; before that, the delivery is in flight with the
22
+ * crew's ship and lease. Either change is caused by the receiving ship.
23
+ */
24
+ export function claimDelivery(delivery, claim) {
25
+ const { crew, at } = claim;
26
+ const attempts = delivery.attempts + 1;
27
+ const concerns = {
28
+ fleetId: delivery.fleetId,
29
+ occurredAt: at,
30
+ actor: shipActor(crew.shipId),
31
+ shipId: crew.shipId,
32
+ messageId: delivery.messageId,
33
+ deliveryId: delivery.id,
34
+ details: { leaseId: crew.leaseId, attempts },
35
+ };
36
+ if (attempts >= UNDELIVERABLE_AT_CLAIM) {
37
+ return {
38
+ outcome: 'undeliverable',
39
+ delivery: { ...delivery, state: 'undeliverable', claimedByShipId: null, claimedByLeaseId: null, attempts },
40
+ events: [{ ...concerns, type: 'DeliveryUndeliverable' }],
41
+ };
42
+ }
43
+ return {
44
+ outcome: 'claimed',
45
+ delivery: { ...delivery, state: 'delivered', claimedByShipId: crew.shipId, claimedByLeaseId: crew.leaseId, attempts },
46
+ events: [{ ...concerns, type: 'DeliveryClaimed' }],
47
+ };
48
+ }
49
+ /**
50
+ * The ship takes responsibility for a delivery it received (ADR 0001): only a
51
+ * delivery in flight with that ship moves to acknowledged, keeping who claimed
52
+ * it. Acknowledging it again is harmless: OK, and nothing changes. A delivery
53
+ * another ship holds or acknowledged, or one that is not in flight, is refused.
54
+ */
55
+ export function acknowledgeDelivery(delivery, ack) {
56
+ const { crew, at } = ack;
57
+ switch (delivery.state) {
58
+ case 'delivered':
59
+ case 'acknowledged':
60
+ if (delivery.claimedByShipId !== crew.shipId) {
61
+ return refuse('DELIVERY_HELD_BY_ANOTHER_SHIP', `Delivery ${delivery.id} is held by another ship: only the ship that received it acknowledges it`);
62
+ }
63
+ if (delivery.state === 'acknowledged') {
64
+ return ok({ delivery, events: [] });
65
+ }
66
+ return ok({
67
+ delivery: { ...delivery, state: 'acknowledged' },
68
+ events: [
69
+ {
70
+ fleetId: delivery.fleetId,
71
+ type: 'DeliveryAcknowledged',
72
+ occurredAt: at,
73
+ actor: shipActor(crew.shipId),
74
+ shipId: crew.shipId,
75
+ messageId: delivery.messageId,
76
+ deliveryId: delivery.id,
77
+ details: { leaseId: crew.leaseId },
78
+ },
79
+ ],
80
+ });
81
+ case 'pending':
82
+ case 'undeliverable':
83
+ case 'dismissed':
84
+ case 'abandoned':
85
+ return refuse('DELIVERY_NOT_IN_FLIGHT', `Delivery ${delivery.id} is ${delivery.state}, not in flight: acknowledge a delivery once a receive hands it over`);
86
+ }
87
+ }
88
+ /**
89
+ * The ship answers a ping with pong: the ping's delivery is acknowledged as
90
+ * an ack would, and DeliveryAcknowledged says pong answered it. Pong answers
91
+ * only a ping. Answering again, or after a plain ack, is harmless: OK, and
92
+ * nothing changes, so the first answer stands.
93
+ */
94
+ export function answerPing(delivery, pong) {
95
+ if (!isPingContentType(pong.message.contentType)) {
96
+ return refuse('DELIVERY_NOT_A_PING', `Delivery ${delivery.id} is not a ping: pong answers only a ping, ack the others`);
97
+ }
98
+ const acknowledged = acknowledgeDelivery(delivery, pong);
99
+ if (!acknowledged.isOk) {
100
+ return acknowledged;
101
+ }
102
+ const events = acknowledged.value.events.map((event) => ({ ...event, details: { ...event.details, answer: 'pong' } }));
103
+ return ok({ delivery: acknowledged.value.delivery, events });
104
+ }
105
+ /**
106
+ * The operator lets an undeliverable delivery go (docs/blueprint.md,
107
+ * "DeliveryUndeliverable"): it becomes dismissed, kept in history with its
108
+ * claims, and leaves Needs attention. The event names the ship it was for; a
109
+ * delivery to a type names none. Dismissing it again is harmless: OK, and
110
+ * nothing changes. Any other delivery is refused: only an undeliverable one
111
+ * waits for the operator.
112
+ */
113
+ export function dismissDelivery(delivery, dismiss) {
114
+ switch (delivery.state) {
115
+ case 'dismissed':
116
+ return ok({ delivery, events: [] });
117
+ case 'undeliverable':
118
+ return ok({
119
+ delivery: { ...delivery, state: 'dismissed' },
120
+ events: [
121
+ {
122
+ fleetId: delivery.fleetId,
123
+ type: 'DeliveryDismissed',
124
+ occurredAt: dismiss.at,
125
+ actor: shipActor(dismiss.by),
126
+ shipId: delivery.recipient.kind === 'ship' ? delivery.recipient.shipId : undefined,
127
+ messageId: delivery.messageId,
128
+ deliveryId: delivery.id,
129
+ },
130
+ ],
131
+ });
132
+ case 'pending':
133
+ case 'delivered':
134
+ case 'acknowledged':
135
+ case 'abandoned':
136
+ return refuse('DELIVERY_NOT_UNDELIVERABLE', `Delivery ${delivery.id} is ${delivery.state}, not undeliverable: only an undeliverable delivery is dismissed`);
137
+ }
138
+ }
139
+ /**
140
+ * A resend dismisses the delivery it resends, which must be undeliverable:
141
+ * one already dismissed has nothing left to resend.
142
+ */
143
+ export function dismissForResend(delivery, dismiss) {
144
+ return delivery.state === 'undeliverable'
145
+ ? dismissDelivery(delivery, dismiss)
146
+ : refuse('DELIVERY_NOT_UNDELIVERABLE', `Delivery ${delivery.id} is ${delivery.state}, not undeliverable: only an undeliverable delivery is resent`);
147
+ }
148
+ /**
149
+ * argo marks a message to it done (docs/blueprint.md, "Inbox"): the console
150
+ * never receives, so an open delivery is claimed and acknowledged at once
151
+ * under the console session's lease, one claim counted, and its two events
152
+ * written as a receive and an ack would write them. One the session already
153
+ * holds in flight is only acknowledged. The acknowledgement names the reply
154
+ * that made it done, when a reply did. Marking it done again is harmless: OK,
155
+ * and nothing changes. A delivery to another ship is not in argo's inbox; one
156
+ * undeliverable, dismissed or abandoned is no longer open.
157
+ */
158
+ export function markDone(delivery, done) {
159
+ const { crew, at, reply } = done;
160
+ const { recipient } = delivery;
161
+ if (recipient.kind !== 'ship' || recipient.shipId !== crew.shipId) {
162
+ return refuse('DELIVERY_NOT_FOUND', `Delivery ${delivery.id} is not in your inbox`);
163
+ }
164
+ const concerns = {
165
+ fleetId: delivery.fleetId,
166
+ occurredAt: at,
167
+ actor: shipActor(crew.shipId),
168
+ shipId: crew.shipId,
169
+ messageId: delivery.messageId,
170
+ deliveryId: delivery.id,
171
+ };
172
+ const acknowledged = {
173
+ ...concerns,
174
+ type: 'DeliveryAcknowledged',
175
+ details: { leaseId: crew.leaseId, ...(reply && { reply }) },
176
+ };
177
+ switch (delivery.state) {
178
+ case 'acknowledged':
179
+ return ok({ delivery, events: [] });
180
+ case 'pending': {
181
+ const attempts = delivery.attempts + 1;
182
+ return ok({
183
+ delivery: { ...delivery, state: 'acknowledged', claimedByShipId: crew.shipId, claimedByLeaseId: crew.leaseId, attempts },
184
+ events: [{ ...concerns, type: 'DeliveryClaimed', details: { leaseId: crew.leaseId, attempts } }, acknowledged],
185
+ });
186
+ }
187
+ case 'delivered':
188
+ return delivery.claimedByLeaseId === crew.leaseId
189
+ ? ok({ delivery: { ...delivery, state: 'acknowledged' }, events: [acknowledged] })
190
+ : refuse('DELIVERY_HELD_BY_ANOTHER_SHIP', `Delivery ${delivery.id} is held by another session`);
191
+ case 'undeliverable':
192
+ case 'dismissed':
193
+ case 'abandoned':
194
+ return refuse('DELIVERY_NOT_OPEN', `Delivery ${delivery.id} is ${delivery.state}: only an open message is marked done`);
195
+ }
196
+ }
197
+ /** Whether the delivery is addressed to the ship itself: in its inbox, not its type's queue. */
198
+ export function isInInboxOf(delivery, shipId) {
199
+ return delivery?.recipient.kind === 'ship' && delivery.recipient.shipId === shipId;
200
+ }
201
+ //# sourceMappingURL=delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../src/domain/messaging/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6C,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAexC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,KAAqC;IACrF,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;KAC7C,CAAC;IAEF,IAAI,QAAQ,IAAI,sBAAsB,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1G,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACrH,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,GAAmC;IAEnC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IACzB,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,WAAW,CAAC;QACjB,KAAK,cAAc;YACjB,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7C,OAAO,MAAM,CACX,+BAA+B,EAC/B,YAAY,QAAQ,CAAC,EAAE,0EAA0E,CAClG,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACtC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;gBAChD,MAAM,EAAE;oBACN;wBACE,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,IAAI,EAAE,sBAAsB;wBAC5B,UAAU,EAAE,EAAE;wBACd,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;wBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;qBACnC;iBACF;aACF,CAAC,CAAC;QACL,KAAK,SAAS,CAAC;QACf,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,MAAM,CACX,wBAAwB,EACxB,YAAY,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,sEAAsE,CACnH,CAAC;IACN,CAAC;AACH,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,QAAkB,EAClB,IAAsD;IAEtD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,qBAAqB,EAAE,YAAY,QAAQ,CAAC,EAAE,0DAA0D,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACvH,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAID;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAkB,EAClB,OAAiC;IAEjC,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,eAAe;YAClB,OAAO,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC7C,MAAM,EAAE;oBACN;wBACE,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,IAAI,EAAE,mBAAmB;wBACzB,UAAU,EAAE,OAAO,CAAC,EAAE;wBACtB,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC5B,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;wBAClF,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACxB;iBACF;aACF,CAAC,CAAC;QACL,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,cAAc,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,MAAM,CACX,4BAA4B,EAC5B,YAAY,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,kEAAkE,CAC/G,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,OAAiC;IAEjC,OAAO,QAAQ,CAAC,KAAK,KAAK,eAAe;QACvC,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC;QACpC,CAAC,CAAC,MAAM,CACJ,4BAA4B,EAC5B,YAAY,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,+DAA+D,CAC5G,CAAC;AACR,CAAC;AAID;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CACtB,QAAkB,EAClB,IAAuD;IAEvD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;IAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,oBAAoB,EAAE,YAAY,QAAQ,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,EAAE;KACxB,CAAC;IACF,MAAM,YAAY,GAAa;QAC7B,GAAG,QAAQ;QACX,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;KAC5D,CAAC;IAEF,QAAQ,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,KAAK,cAAc;YACjB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvC,OAAO,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;gBACxH,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,CAAC;aAC/G,CAAC,CAAC;QACL,CAAC;QACD,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC,OAAO;gBAC/C,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClF,CAAC,CAAC,MAAM,CAAC,+BAA+B,EAAE,YAAY,QAAQ,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACpG,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC,mBAAmB,EAAE,YAAY,QAAQ,CAAC,EAAE,OAAO,QAAQ,CAAC,KAAK,uCAAuC,CAAC,CAAC;IAC5H,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,QAA8B,EAAE,MAAc;IACxE,OAAO,QAAQ,EAAE,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC;AACrF,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { DeliveryId, IdGenerator } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type EventLog } from '../shared/events.js';
6
+ import { type Result } from '../shared/result.js';
7
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
8
+ import { type DismissRefusal } from './delivery.js';
9
+ import type { DeliveryRepository } from './ports.js';
10
+ export interface DismissDeliveryTx {
11
+ deliveries: Pick<DeliveryRepository, 'findForUpdate' | 'update'>;
12
+ events: EventLog;
13
+ }
14
+ export type DismissDeliveryRefusal = DomainError<'DELIVERY_NOT_FOUND'> | DismissRefusal;
15
+ export type DismissDelivery = (caller: Caller, input: {
16
+ deliveryId: DeliveryId;
17
+ }) => Promise<Result<undefined, DismissDeliveryRefusal>>;
18
+ /**
19
+ * Use case: the operator dismisses an undeliverable delivery from Needs
20
+ * attention. Its scope (fleet:manage) is checked before this runs. The
21
+ * delivery, locked, becomes dismissed with DeliveryDismissed in one unit of
22
+ * work, so a resend of the same delivery waits and then finds it dismissed.
23
+ */
24
+ export declare function createDismissDelivery(deps: {
25
+ uow: UnitOfWork<DismissDeliveryTx>;
26
+ clock: Clock;
27
+ ids: IdGenerator;
28
+ }): DismissDelivery;
@@ -0,0 +1,29 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { recordEvent } from '../shared/events.js';
3
+ import { ok } from '../shared/result.js';
4
+ import { dismissDelivery } from './delivery.js';
5
+ /**
6
+ * Use case: the operator dismisses an undeliverable delivery from Needs
7
+ * attention. Its scope (fleet:manage) is checked before this runs. The
8
+ * delivery, locked, becomes dismissed with DeliveryDismissed in one unit of
9
+ * work, so a resend of the same delivery waits and then finds it dismissed.
10
+ */
11
+ export function createDismissDelivery(deps) {
12
+ return (caller, input) => deps.uow.run(async (tx) => {
13
+ const delivery = await tx.deliveries.findForUpdate(caller.fleetId, input.deliveryId);
14
+ if (!delivery) {
15
+ return refuse('DELIVERY_NOT_FOUND', `Delivery ${input.deliveryId} does not exist`);
16
+ }
17
+ const dismissed = dismissDelivery(delivery, { by: caller.shipId, at: deps.clock.now() });
18
+ if (!dismissed.isOk) {
19
+ return dismissed;
20
+ }
21
+ const { delivery: changed, events } = dismissed.value;
22
+ await tx.deliveries.update(changed);
23
+ for (const event of events) {
24
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
25
+ }
26
+ return ok(undefined);
27
+ });
28
+ }
29
+ //# sourceMappingURL=dismiss-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismiss-delivery.js","sourceRoot":"","sources":["../../../src/domain/messaging/dismiss-delivery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAuB,MAAM,eAAe,CAAC;AAerE;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAIrC;IACC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAsD,EAAE;QAC5E,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,oBAAoB,EAAE,YAAY,KAAK,CAAC,UAAU,iBAAiB,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QACtD,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type DomainError } from '../shared/errors.js';
2
+ import { type Result } from '../shared/result.js';
3
+ /**
4
+ * How long an inbox check waits while nothing waits, in milliseconds: the
5
+ * crew chooses 0 to 25 whole seconds, as long as a receive at most, and gets
6
+ * no wait when it does not say.
7
+ */
8
+ export declare function inboxWait(waitSeconds: number | undefined): Result<number, DomainError<'INVALID_INBOX_WAIT'>>;
@@ -0,0 +1,19 @@
1
+ import { INBOX_WAIT_MAX_SECONDS } from '@aeolus-fleet/common';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ /** A second, in the milliseconds the wake-ups wait. */
5
+ const SECOND_MS = 1000;
6
+ /**
7
+ * How long an inbox check waits while nothing waits, in milliseconds: the
8
+ * crew chooses 0 to 25 whole seconds, as long as a receive at most, and gets
9
+ * no wait when it does not say.
10
+ */
11
+ export function inboxWait(waitSeconds) {
12
+ if (waitSeconds === undefined) {
13
+ return ok(0);
14
+ }
15
+ return Number.isInteger(waitSeconds) && waitSeconds >= 0 && waitSeconds <= INBOX_WAIT_MAX_SECONDS
16
+ ? ok(waitSeconds * SECOND_MS)
17
+ : refuse('INVALID_INBOX_WAIT', `An inbox check waits 0 to ${INBOX_WAIT_MAX_SECONDS} whole seconds`);
18
+ }
19
+ //# sourceMappingURL=inbox-wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox-wait.js","sourceRoot":"","sources":["../../../src/domain/messaging/inbox-wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,uDAAuD;AACvD,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,WAA+B;IACvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,IAAI,sBAAsB;QAC/F,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,CAAC,CAAC,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,sBAAsB,gBAAgB,CAAC,CAAC;AACxG,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { DeliveryId, IdGenerator, MessageId } from '@aeolus-fleet/common';
2
+ import { type HoldLeaseTx, type LeaseEnded } from '../registry/public.js';
3
+ import type { Crew } from '../shared/caller.js';
4
+ import type { Clock } from '../shared/clock.js';
5
+ import { type DomainError } from '../shared/errors.js';
6
+ import { type EventLog } from '../shared/events.js';
7
+ import { type Result } from '../shared/result.js';
8
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
9
+ import { type MarkDoneRefusal } from './delivery.js';
10
+ import type { DeliveryRepository } from './ports.js';
11
+ export interface MarkDoneTx extends HoldLeaseTx {
12
+ deliveries: Pick<DeliveryRepository, 'findForUpdate' | 'update'>;
13
+ events: EventLog;
14
+ }
15
+ export type MarkDoneUseCaseRefusal = DomainError<'DELIVERY_NOT_FOUND' | 'NOT_THE_OPERATOR_SHIP'> | LeaseEnded | MarkDoneRefusal;
16
+ export type MarkDone = (crew: Crew, input: {
17
+ deliveryId: DeliveryId;
18
+ }) => Promise<Result<undefined, MarkDoneUseCaseRefusal>>;
19
+ /**
20
+ * Marks a delivery to argo done inside the caller's unit of work, under the
21
+ * console session's lease, held until the unit of work ends: a sign-in
22
+ * elsewhere ending it waits, then returns nothing this marked. `reply` names
23
+ * the reply that made it done. Only argo: an agent acknowledges what it
24
+ * receives.
25
+ */
26
+ export declare function markDoneWithin(deps: {
27
+ tx: MarkDoneTx;
28
+ clock: Clock;
29
+ ids: IdGenerator;
30
+ }, done: {
31
+ crew: Crew;
32
+ deliveryId: DeliveryId;
33
+ reply?: MessageId;
34
+ }): Promise<Result<undefined, MarkDoneUseCaseRefusal>>;
35
+ /**
36
+ * Use case: argo marks a message to it done from the operator inbox, without
37
+ * a reply (docs/blueprint.md, "Inbox"). Its scope (messages:receive) is
38
+ * checked before this runs. One unit of work: the claim, the acknowledgement
39
+ * and their events.
40
+ */
41
+ export declare function createMarkDone(deps: {
42
+ uow: UnitOfWork<MarkDoneTx>;
43
+ clock: Clock;
44
+ ids: IdGenerator;
45
+ }): MarkDone;