@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,75 @@
1
+ import type { DeliveryId, EventId, EventType, FleetId, IdGenerator, MessageId, ShipId } from '@aeolus-fleet/common';
2
+ /** Who caused a state change: a ship (`argo` included) or the system, such as a server command. */
3
+ export type Actor = {
4
+ kind: 'ship';
5
+ shipId: ShipId;
6
+ } | {
7
+ kind: 'system';
8
+ };
9
+ export declare const SYSTEM: Actor;
10
+ export declare function shipActor(shipId: ShipId): Actor;
11
+ /** A small set of flat facts about the change. Never a payload or a secret. */
12
+ export type EventDetails = Readonly<Record<string, string | number | boolean | null>>;
13
+ /**
14
+ * One state change in the append-only event log (docs/blueprint.md, "Domain
15
+ * events"): its type and time, who caused it, which ship, message and delivery
16
+ * it concerns, and a few details.
17
+ */
18
+ export interface FleetEvent {
19
+ id: EventId;
20
+ fleetId: FleetId;
21
+ type: EventType;
22
+ occurredAt: Date;
23
+ actor: Actor;
24
+ shipId?: ShipId;
25
+ messageId?: MessageId;
26
+ deliveryId?: DeliveryId;
27
+ details: EventDetails;
28
+ }
29
+ /** Outbound port: appends events in the caller's unit of work. Events are never changed. */
30
+ export interface EventLog {
31
+ append(event: FleetEvent): Promise<void>;
32
+ }
33
+ export type NewEvent = Omit<FleetEvent, 'id' | 'details'> & {
34
+ details?: EventDetails;
35
+ };
36
+ /** Gives the event its id and appends it. */
37
+ export declare function recordEvent(deps: {
38
+ events: EventLog;
39
+ ids: IdGenerator;
40
+ }, event: NewEvent): Promise<void>;
41
+ /** That a fleet's events up to `seq` have committed: a hint to read them, never their content. */
42
+ export interface FleetEventNotice {
43
+ fleetId: FleetId;
44
+ seq: number;
45
+ }
46
+ /** A committed event and its place in its fleet's stream: commit order, without gaps. */
47
+ export interface SequencedEvent extends FleetEvent {
48
+ seq: number;
49
+ }
50
+ /**
51
+ * Outbound port: wakes a waiting follow when its fleet has a new event. A
52
+ * wake-up is a hint to read again, never the event itself.
53
+ */
54
+ export interface FleetEventWakeups {
55
+ /** Starts watching the fleet. A wake-up that comes before the next wait is kept for it. */
56
+ watch(fleetId: FleetId): FleetNewsWatch;
57
+ }
58
+ export interface FleetNewsWatch {
59
+ /** Settles when the fleet has news, or once `waitMs` has passed. */
60
+ next(waitMs: number): Promise<'woken' | 'timedOut'>;
61
+ stop(): void;
62
+ }
63
+ /**
64
+ * Outbound port: reads a fleet's committed events by their place in its
65
+ * stream, for live subscriptions to resume without missing one.
66
+ */
67
+ export interface FleetEventFeed {
68
+ /** The number of the fleet's last committed event; 0 before its first. */
69
+ lastSeq(fleetId: FleetId): Promise<number>;
70
+ /** Up to `limit` events numbered after `seq`, lowest first. */
71
+ after(fleetId: FleetId, position: {
72
+ seq: number;
73
+ limit: number;
74
+ }): Promise<SequencedEvent[]>;
75
+ }
@@ -0,0 +1,9 @@
1
+ export const SYSTEM = { kind: 'system' };
2
+ export function shipActor(shipId) {
3
+ return { kind: 'ship', shipId };
4
+ }
5
+ /** Gives the event its id and appends it. */
6
+ export async function recordEvent(deps, event) {
7
+ await deps.events.append({ ...event, id: deps.ids('event'), details: event.details ?? {} });
8
+ }
9
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/domain/shared/events.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,MAAM,GAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEhD,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AA6BD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAA4C,EAAE,KAAe;IAC7F,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { Caller } from './caller.js';
2
+ import type { Clock } from './clock.js';
3
+ import { type DomainError } from './errors.js';
4
+ import type { FleetEventFeed, FleetEventWakeups, SequencedEvent } from './events.js';
5
+ import { type Result } from './result.js';
6
+ export type FollowFleetRefusal = DomainError<'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT'>;
7
+ export interface FleetFollowed {
8
+ /** The events after the position, oldest first. */
9
+ events: SequencedEvent[];
10
+ /** The number to follow from next: the last event's, the position itself when none came, or the newest without one. */
11
+ lastSeq: number;
12
+ }
13
+ export type FollowFleet = (caller: Caller, input: {
14
+ afterSeq?: number;
15
+ max?: number;
16
+ waitSeconds?: number;
17
+ }) => Promise<Result<FleetFollowed, FollowFleetRefusal>>;
18
+ /**
19
+ * Use case: a client with fleet:read follows the fleet's committed events
20
+ * (`fleet.follow`) by the same commit-ordered numbers the console follows by,
21
+ * so it misses none across reconnects: it passes the `lastSeq` it was answered
22
+ * as `afterSeq` next. Without a position it learns where to start from. With a
23
+ * wait, and nothing after the position, it watches its fleet's wake-ups and
24
+ * reads again on each until an event comes or the wait has passed; it starts
25
+ * watching before it reads a second time, so an event committed in between is
26
+ * answered. The caller's scope is checked before this runs.
27
+ */
28
+ export declare function createFollowFleet(deps: {
29
+ feed: FleetEventFeed;
30
+ clock: Clock;
31
+ wakeups: FleetEventWakeups;
32
+ }): FollowFleet;
@@ -0,0 +1,65 @@
1
+ import { FOLLOW_MAX_DEFAULT, FOLLOW_MAX_LIMIT, FOLLOW_WAIT_MAX_SECONDS } from '@aeolus-fleet/common';
2
+ import { refuse } from './errors.js';
3
+ import { ok } from './result.js';
4
+ const SECOND_MS = 1_000;
5
+ function checkedMax(max) {
6
+ const value = max ?? FOLLOW_MAX_DEFAULT;
7
+ return Number.isInteger(value) && value >= 1 && value <= FOLLOW_MAX_LIMIT
8
+ ? ok(value)
9
+ : refuse('INVALID_FOLLOW_MAX', `max is 1 to ${String(FOLLOW_MAX_LIMIT)} events`);
10
+ }
11
+ function checkedWaitMs(waitSeconds) {
12
+ const value = waitSeconds ?? 0;
13
+ return Number.isInteger(value) && value >= 0 && value <= FOLLOW_WAIT_MAX_SECONDS
14
+ ? ok(value * SECOND_MS)
15
+ : refuse('INVALID_FOLLOW_WAIT', `waitSeconds is 0 to ${String(FOLLOW_WAIT_MAX_SECONDS)}`);
16
+ }
17
+ /**
18
+ * Use case: a client with fleet:read follows the fleet's committed events
19
+ * (`fleet.follow`) by the same commit-ordered numbers the console follows by,
20
+ * so it misses none across reconnects: it passes the `lastSeq` it was answered
21
+ * as `afterSeq` next. Without a position it learns where to start from. With a
22
+ * wait, and nothing after the position, it watches its fleet's wake-ups and
23
+ * reads again on each until an event comes or the wait has passed; it starts
24
+ * watching before it reads a second time, so an event committed in between is
25
+ * answered. The caller's scope is checked before this runs.
26
+ */
27
+ export function createFollowFleet(deps) {
28
+ return async (caller, input) => {
29
+ const max = checkedMax(input.max);
30
+ if (!max.isOk) {
31
+ return max;
32
+ }
33
+ const waitMs = checkedWaitMs(input.waitSeconds);
34
+ if (!waitMs.isOk) {
35
+ return waitMs;
36
+ }
37
+ const { fleetId } = caller;
38
+ const { afterSeq } = input;
39
+ if (afterSeq === undefined) {
40
+ return ok({ events: [], lastSeq: await deps.feed.lastSeq(fleetId) });
41
+ }
42
+ const until = deps.clock.now().getTime() + waitMs.value;
43
+ let watch;
44
+ try {
45
+ for (;;) {
46
+ const events = await deps.feed.after(fleetId, { seq: afterSeq, limit: max.value });
47
+ const remainingMs = until - deps.clock.now().getTime();
48
+ if (events.length > 0 || remainingMs <= 0) {
49
+ return ok({ events, lastSeq: events.at(-1)?.seq ?? afterSeq });
50
+ }
51
+ if (watch === undefined) {
52
+ watch = deps.wakeups.watch(fleetId);
53
+ continue;
54
+ }
55
+ if ((await watch.next(remainingMs)) === 'timedOut') {
56
+ return ok({ events: [], lastSeq: afterSeq });
57
+ }
58
+ }
59
+ }
60
+ finally {
61
+ watch?.stop();
62
+ }
63
+ };
64
+ }
65
+ //# sourceMappingURL=follow-fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-fleet.js","sourceRoot":"","sources":["../../../src/domain/shared/follow-fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAIrG,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C,MAAM,SAAS,GAAG,KAAK,CAAC;AAgBxB,SAAS,UAAU,CAAC,GAAuB;IACzC,MAAM,KAAK,GAAG,GAAG,IAAI,kBAAkB,CAAC;IACxC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB;QACvE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACX,CAAC,CAAC,MAAM,CAAC,oBAAoB,EAAE,eAAe,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,aAAa,CAAC,WAA+B;IACpD,MAAM,KAAK,GAAG,WAAW,IAAI,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,uBAAuB;QAC9E,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAwE;IACxG,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;QACxD,IAAI,KAAiC,CAAC;QACtC,IAAI,CAAC;YACH,SAAS,CAAC;gBACR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACnF,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACpC,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;oBACnD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { DELIVERY_HISTORY_TYPES, type InboxFilter, type DeliveryId, type DeliveryState, type EventId, type EventType, type FleetId, type MessageId, type ShipId } from '@aeolus-fleet/common';
2
+ import type { Location } from '../registry/public.js';
3
+ import type { EventDetails } from './events.js';
4
+ /**
5
+ * What the console reads: a ship's timeline from the event log, its
6
+ * messages, one message with the history of its delivery, and the
7
+ * undeliverable deliveries of Needs attention. Read models only: they change
8
+ * nothing, so they need no unit of work.
9
+ */
10
+ /** A ship as a party to an event or a message. */
11
+ export interface HistoryParty {
12
+ id: ShipId;
13
+ name: string;
14
+ }
15
+ /** Who a message was addressed to: one ship, or any ship of a type. */
16
+ export type HistoryRecipient = {
17
+ kind: 'ship';
18
+ ship: HistoryParty;
19
+ } | {
20
+ kind: 'type';
21
+ type: string;
22
+ };
23
+ /** One event on a ship's timeline, with its parties named. */
24
+ export interface TimelineEntry {
25
+ seq: number;
26
+ id: EventId;
27
+ type: EventType;
28
+ occurredAt: Date;
29
+ /** The ship that caused it; null for the system. */
30
+ actor: HistoryParty | null;
31
+ ship: HistoryParty | null;
32
+ /** The message it concerns, with its parties and its content type, by which a ping is told. */
33
+ message: {
34
+ id: MessageId;
35
+ sender: HistoryParty;
36
+ recipient: HistoryRecipient;
37
+ contentType: string;
38
+ model: string | null;
39
+ } | null;
40
+ details: EventDetails;
41
+ }
42
+ /** One message with its delivery as it stands. */
43
+ export interface HistoryMessage {
44
+ id: MessageId;
45
+ sender: HistoryParty;
46
+ recipient: HistoryRecipient;
47
+ inReplyTo: MessageId | null;
48
+ sentAt: Date;
49
+ contentType: string;
50
+ /** The model the sender's session stated; none from argo and on messages from before models were stated. */
51
+ model: string | null;
52
+ payload: string;
53
+ delivery: {
54
+ id: DeliveryId;
55
+ state: DeliveryState;
56
+ attempts: number;
57
+ claimedBy: HistoryParty | null;
58
+ };
59
+ }
60
+ /** The events that change a delivery: stored, claimed, returned, acknowledged or undeliverable. */
61
+ export type DeliveryChangeType = (typeof DELIVERY_HISTORY_TYPES)[number];
62
+ export declare function isDeliveryChangeType(type: EventType): type is DeliveryChangeType;
63
+ /** One change to a delivery. */
64
+ export interface DeliveryChange {
65
+ seq: number;
66
+ type: DeliveryChangeType;
67
+ occurredAt: Date;
68
+ /** The ship that claimed, returned or acknowledged it; null when it was stored. */
69
+ ship: HistoryParty | null;
70
+ /** Where the claiming session ran, for a claim. */
71
+ location: Location | null;
72
+ /** The harness the claiming session ran in, for a claim. */
73
+ harness: string | null;
74
+ /** The claims counted by then, where the event records them. */
75
+ attempts: number | null;
76
+ }
77
+ /** An undeliverable delivery, for Needs attention: its claims, since when, and its whole message. */
78
+ export interface UndeliverableEntry {
79
+ deliveryId: DeliveryId;
80
+ attempts: number;
81
+ /** When it became undeliverable. */
82
+ since: Date;
83
+ message: Omit<HistoryMessage, 'delivery'>;
84
+ }
85
+ /** A message to a ship, as its inbox lists it: its delivery's state, when it was read and done, and the reply that made it done. */
86
+ export interface InboxEntry {
87
+ deliveryId: DeliveryId;
88
+ state: DeliveryState;
89
+ readAt: Date | null;
90
+ doneAt: Date | null;
91
+ repliedWith: MessageId | null;
92
+ message: Omit<HistoryMessage, 'delivery' | 'recipient'>;
93
+ }
94
+ /** The delivery states each inbox filter keeps: open is not done yet, done is acknowledged. */
95
+ export declare function isKeptBy(filter: InboxFilter, state: DeliveryState): boolean;
96
+ /**
97
+ * Outbound port: the history reads, scoped to one fleet. A ship's timeline is
98
+ * the events naming it or caused by it; its messages are those it sent, was
99
+ * sent, or claimed as a ship of their type. Undefined when the fleet has no
100
+ * such ship or message.
101
+ */
102
+ export interface ShipHistory {
103
+ /** Newest first, at most `limit`. */
104
+ timeline(fleetId: FleetId, query: {
105
+ shipId: ShipId;
106
+ limit: number;
107
+ }): Promise<TimelineEntry[] | undefined>;
108
+ /** Newest first, at most `limit`. */
109
+ messages(fleetId: FleetId, query: {
110
+ shipId: ShipId;
111
+ limit: number;
112
+ }): Promise<HistoryMessage[] | undefined>;
113
+ /** The message, with its delivery's changes newest first. */
114
+ message(fleetId: FleetId, messageId: MessageId): Promise<(HistoryMessage & {
115
+ history: DeliveryChange[];
116
+ }) | undefined>;
117
+ /** Every undeliverable delivery, oldest first by when it became undeliverable. */
118
+ undeliverable(fleetId: FleetId): Promise<UndeliverableEntry[]>;
119
+ /** The messages addressed to the ship itself that the filter keeps, newest first. */
120
+ inbox(fleetId: FleetId, query: {
121
+ shipId: ShipId;
122
+ filter: InboxFilter;
123
+ }): Promise<InboxEntry[]>;
124
+ }
@@ -0,0 +1,16 @@
1
+ import { DELIVERY_HISTORY_TYPES, } from '@aeolus-fleet/common';
2
+ export function isDeliveryChangeType(type) {
3
+ return DELIVERY_HISTORY_TYPES.some((change) => change === type);
4
+ }
5
+ /** The delivery states each inbox filter keeps: open is not done yet, done is acknowledged. */
6
+ export function isKeptBy(filter, state) {
7
+ switch (filter) {
8
+ case 'open':
9
+ return state === 'pending' || state === 'delivered';
10
+ case 'done':
11
+ return state === 'acknowledged';
12
+ case 'all':
13
+ return true;
14
+ }
15
+ }
16
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GASvB,MAAM,sBAAsB,CAAC;AAoD9B,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AAoCD,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,KAAoB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC;QACtD,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type DomainError } from './errors.js';
2
+ import { type Result } from './result.js';
3
+ /**
4
+ * The caller's own key for one message or one commission, so a network retry
5
+ * never does it twice: 1 to 256 characters of any text, taken exactly as
6
+ * given. The rule is shared with the common schema.
7
+ */
8
+ export declare function idempotencyKey(raw: string): Result<string, DomainError<'INVALID_IDEMPOTENCY_KEY'>>;
@@ -0,0 +1,14 @@
1
+ import { IDEMPOTENCY_KEY_MAX_LENGTH } from '@aeolus-fleet/common';
2
+ import { refuse } from './errors.js';
3
+ import { ok } from './result.js';
4
+ /**
5
+ * The caller's own key for one message or one commission, so a network retry
6
+ * never does it twice: 1 to 256 characters of any text, taken exactly as
7
+ * given. The rule is shared with the common schema.
8
+ */
9
+ export function idempotencyKey(raw) {
10
+ return raw.length >= 1 && raw.length <= IDEMPOTENCY_KEY_MAX_LENGTH
11
+ ? ok(raw)
12
+ : refuse('INVALID_IDEMPOTENCY_KEY', `An idempotency key is 1 to ${IDEMPOTENCY_KEY_MAX_LENGTH} characters`);
13
+ }
14
+ //# sourceMappingURL=idempotency-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency-key.js","sourceRoot":"","sources":["../../../src/domain/shared/idempotency-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,0BAA0B;QAChE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QACT,CAAC,CAAC,MAAM,CAAC,yBAAyB,EAAE,8BAA8B,0BAA0B,aAAa,CAAC,CAAC;AAC/G,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { DeliveryId, FleetId } from '@aeolus-fleet/common';
2
+ import type { Recipient } from './selector.js';
3
+ /** Which delivery is pending, and for whom: never its payload. */
4
+ export interface DeliveryNotice {
5
+ fleetId: FleetId;
6
+ deliveryId: DeliveryId;
7
+ recipient: Recipient;
8
+ }
9
+ /**
10
+ * Outbound port: wakes whoever waits to receive a delivery, when a send stores
11
+ * it or a lease end returns it to pending. Sent as part of the caller's unit
12
+ * of work: it reaches listeners only once that commits, and never when it
13
+ * rolls back, so nobody is woken for a delivery that is not pending.
14
+ */
15
+ export interface Notifier {
16
+ deliveryPending(notice: DeliveryNotice): Promise<void>;
17
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=notifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifier.js","sourceRoot":"","sources":["../../../src/domain/shared/notifier.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { Clock } from './clock.js';
2
+ /**
3
+ * Outbound port: counts the fleets this installation hosts. The only read that
4
+ * is not scoped to one fleet, because it counts the fleets themselves.
5
+ */
6
+ export interface FleetCounter {
7
+ countFleets(): Promise<number>;
8
+ }
9
+ export interface PingResult {
10
+ serverTime: Date;
11
+ fleetCount: number;
12
+ }
13
+ export type Ping = () => Promise<PingResult>;
14
+ /** Use case: proves the server can read its clock and reach its database. */
15
+ export declare function createPing(deps: {
16
+ clock: Clock;
17
+ fleets: FleetCounter;
18
+ }): Ping;
@@ -0,0 +1,8 @@
1
+ /** Use case: proves the server can read its clock and reach its database. */
2
+ export function createPing(deps) {
3
+ return async () => {
4
+ const fleetCount = await deps.fleets.countFleets();
5
+ return { serverTime: deps.clock.now(), fleetCount };
6
+ };
7
+ }
8
+ //# sourceMappingURL=ping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/domain/shared/ping.ts"],"names":[],"mappings":"AAiBA,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,IAA4C;IACrE,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACnD,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC;IACtD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Caller } from './caller.js';
2
+ import type { FleetEventFeed, SequencedEvent } from './events.js';
3
+ /**
4
+ * The most missed events a browser is sent one by one. Further behind, loading
5
+ * the fleet again is cheaper than replaying its history.
6
+ */
7
+ export declare const REPLAY_LIMIT = 1000;
8
+ /**
9
+ * What a browser does next: apply the events after its position, or load the
10
+ * fleet again and follow from `seq`. The number is read before the browser
11
+ * loads, so whatever commits in between is in what it loads or comes after.
12
+ */
13
+ export type FleetEventsRead = {
14
+ kind: 'events';
15
+ events: SequencedEvent[];
16
+ } | {
17
+ kind: 'resync';
18
+ seq: number;
19
+ };
20
+ export type ReadFleetEvents = (caller: Caller, afterSeq: number | undefined) => Promise<FleetEventsRead>;
21
+ /**
22
+ * Use case: the caller's fleet events after a position, for the live fleet
23
+ * view. Without a position, or more than REPLAY_LIMIT behind, the browser is
24
+ * told to load the fleet again. The caller's scope (fleet:read) is checked
25
+ * before this runs.
26
+ */
27
+ export declare function createReadFleetEvents(deps: {
28
+ feed: FleetEventFeed;
29
+ }): ReadFleetEvents;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The most missed events a browser is sent one by one. Further behind, loading
3
+ * the fleet again is cheaper than replaying its history.
4
+ */
5
+ export const REPLAY_LIMIT = 1000;
6
+ /**
7
+ * Use case: the caller's fleet events after a position, for the live fleet
8
+ * view. Without a position, or more than REPLAY_LIMIT behind, the browser is
9
+ * told to load the fleet again. The caller's scope (fleet:read) is checked
10
+ * before this runs.
11
+ */
12
+ export function createReadFleetEvents(deps) {
13
+ const resync = async (caller) => ({
14
+ kind: 'resync',
15
+ seq: await deps.feed.lastSeq(caller.fleetId),
16
+ });
17
+ return async (caller, afterSeq) => {
18
+ if (afterSeq === undefined) {
19
+ return resync(caller);
20
+ }
21
+ const events = await deps.feed.after(caller.fleetId, { seq: afterSeq, limit: REPLAY_LIMIT + 1 });
22
+ return events.length > REPLAY_LIMIT ? resync(caller) : { kind: 'events', events };
23
+ };
24
+ }
25
+ //# sourceMappingURL=read-fleet-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-fleet-events.js","sourceRoot":"","sources":["../../../src/domain/shared/read-fleet-events.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAWjC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA8B;IAClE,MAAM,MAAM,GAAG,KAAK,EAAE,MAAc,EAA4B,EAAE,CAAC,CAAC;QAClE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;KAC7C,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;QAChC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpF,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { Caller } from './caller.js';
3
+ import type { Clock } from './clock.js';
4
+ /** Outbound port: what a fleet's limits apply to, read outside a unit of work. */
5
+ export interface FleetLimitReads {
6
+ /** The ship and daily message limits that apply to the fleet now; null where none does. */
7
+ applied(fleetId: FleetId): Promise<{
8
+ ships: number | null;
9
+ dailyMessages: number | null;
10
+ }>;
11
+ /** Its ships that are not retired, argo included. */
12
+ activeShips(fleetId: FleetId): Promise<number>;
13
+ /** The messages it stored at or after `since`, of any kind and from any sender. */
14
+ messagesSince(fleetId: FleetId, since: Date): Promise<number>;
15
+ }
16
+ export interface FleetLimitsRead {
17
+ ships: {
18
+ limit: number | null;
19
+ count: number;
20
+ };
21
+ dailyMessages: {
22
+ limit: number | null;
23
+ count: number;
24
+ resetsAt: Date;
25
+ };
26
+ }
27
+ export type ReadFleetLimits = (caller: Caller) => Promise<FleetLimitsRead>;
28
+ /**
29
+ * Use case: the caller's fleet's ship and daily message limits, with what
30
+ * each counts by the same measures the limits are enforced by: its ships that
31
+ * are not retired, argo included, and the messages it stored since 00:00 UTC,
32
+ * which count again from the next 00:00 UTC. The console shows from it when
33
+ * the fleet is at a limit. The caller's scope (fleet:read) is checked before
34
+ * this runs.
35
+ */
36
+ export declare function createReadFleetLimits(deps: {
37
+ limits: FleetLimitReads;
38
+ clock: Clock;
39
+ }): ReadFleetLimits;
@@ -0,0 +1,24 @@
1
+ import { nextUtcDayStart, utcDayStart } from './utc-day.js';
2
+ /**
3
+ * Use case: the caller's fleet's ship and daily message limits, with what
4
+ * each counts by the same measures the limits are enforced by: its ships that
5
+ * are not retired, argo included, and the messages it stored since 00:00 UTC,
6
+ * which count again from the next 00:00 UTC. The console shows from it when
7
+ * the fleet is at a limit. The caller's scope (fleet:read) is checked before
8
+ * this runs.
9
+ */
10
+ export function createReadFleetLimits(deps) {
11
+ return async ({ fleetId }) => {
12
+ const now = deps.clock.now();
13
+ const [applied, ships, messages] = await Promise.all([
14
+ deps.limits.applied(fleetId),
15
+ deps.limits.activeShips(fleetId),
16
+ deps.limits.messagesSince(fleetId, utcDayStart(now)),
17
+ ]);
18
+ return {
19
+ ships: { limit: applied.ships, count: ships },
20
+ dailyMessages: { limit: applied.dailyMessages, count: messages, resetsAt: nextUtcDayStart(now) },
21
+ };
22
+ };
23
+ }
24
+ //# sourceMappingURL=read-fleet-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-fleet-limits.js","sourceRoot":"","sources":["../../../src/domain/shared/read-fleet-limits.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmB5D;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA+C;IACnF,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;SACrD,CAAC,CAAC;QACH,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7C,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE;SACjG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { InboxFilter } from '@aeolus-fleet/common';
2
+ import type { ShipRepository } from '../registry/public.js';
3
+ import type { Caller } from './caller.js';
4
+ import type { InboxEntry, ShipHistory } from './history.js';
5
+ export type ReadInbox = (caller: Caller, input: {
6
+ filter: InboxFilter;
7
+ }) => Promise<InboxEntry[]>;
8
+ /**
9
+ * Use case: the caller's own inbox, for the operator inbox of argo
10
+ * (docs/blueprint.md, "Inbox"): the messages addressed to it that the filter
11
+ * keeps (open, done or all), newest first, each with when it was read, when
12
+ * and by which reply it was done, and its whole payload. Messages to its type
13
+ * are its type's queue, not its inbox. A viewer session, which receives
14
+ * nothing, reads argo's inbox instead, read-only (decision 0022). The caller's
15
+ * scope (fleet:read) is checked before this runs.
16
+ */
17
+ export declare function createReadInbox(deps: {
18
+ history: ShipHistory;
19
+ ships: Pick<ShipRepository, 'findOperatorShip'>;
20
+ }): ReadInbox;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Use case: the caller's own inbox, for the operator inbox of argo
3
+ * (docs/blueprint.md, "Inbox"): the messages addressed to it that the filter
4
+ * keeps (open, done or all), newest first, each with when it was read, when
5
+ * and by which reply it was done, and its whole payload. Messages to its type
6
+ * are its type's queue, not its inbox. A viewer session, which receives
7
+ * nothing, reads argo's inbox instead, read-only (decision 0022). The caller's
8
+ * scope (fleet:read) is checked before this runs.
9
+ */
10
+ export function createReadInbox(deps) {
11
+ return async (caller, { filter }) => {
12
+ const argo = caller.kind === 'viewer' ? await deps.ships.findOperatorShip(caller.fleetId) : undefined;
13
+ return deps.history.inbox(caller.fleetId, { shipId: argo?.id ?? caller.shipId, filter });
14
+ };
15
+ }
16
+ //# sourceMappingURL=read-inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-inbox.js","sourceRoot":"","sources":["../../../src/domain/shared/read-inbox.ts"],"names":[],"mappings":"AAQA;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAA+E;IAC7G,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { MessageId } from '@aeolus-fleet/common';
2
+ import type { Caller } from './caller.js';
3
+ import { type DomainError } from './errors.js';
4
+ import type { DeliveryChange, HistoryMessage, ShipHistory } from './history.js';
5
+ import { type Result } from './result.js';
6
+ export type MessageDetail = HistoryMessage & {
7
+ delivery: HistoryMessage['delivery'] & {
8
+ history: DeliveryChange[];
9
+ };
10
+ };
11
+ export type ReadMessage = (caller: Caller, input: {
12
+ messageId: MessageId;
13
+ }) => Promise<Result<MessageDetail, DomainError<'MESSAGE_NOT_FOUND'>>>;
14
+ /**
15
+ * Use case: one message of the caller's fleet: its envelope, its whole
16
+ * payload, and its delivery with every change newest first, from the event
17
+ * log. The caller's scope (fleet:read) is checked before this runs.
18
+ */
19
+ export declare function createReadMessage(deps: {
20
+ history: ShipHistory;
21
+ }): ReadMessage;
@@ -0,0 +1,18 @@
1
+ import { refuse } from './errors.js';
2
+ import { ok } from './result.js';
3
+ /**
4
+ * Use case: one message of the caller's fleet: its envelope, its whole
5
+ * payload, and its delivery with every change newest first, from the event
6
+ * log. The caller's scope (fleet:read) is checked before this runs.
7
+ */
8
+ export function createReadMessage(deps) {
9
+ return async (caller, { messageId }) => {
10
+ const found = await deps.history.message(caller.fleetId, messageId);
11
+ if (!found) {
12
+ return refuse('MESSAGE_NOT_FOUND', `No message ${messageId} in this fleet`);
13
+ }
14
+ const { history, ...message } = found;
15
+ return ok({ ...message, delivery: { ...message.delivery, history } });
16
+ };
17
+ }
18
+ //# sourceMappingURL=read-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-message.js","sourceRoot":"","sources":["../../../src/domain/shared/read-message.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAS9C;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8B;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,mBAAmB,EAAE,cAAc,SAAS,gBAAgB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC"}