@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,66 @@
1
+ import type { FleetId, IdGenerator, LeaseId, ShipId, ShipKind } from '@aeolus-fleet/common';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Actor, type EventLog } from '../shared/events.js';
4
+ import type { Notifier } from '../shared/notifier.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import { type LeaseEnded, type LeaseEndReason, type Location } from './lease.js';
7
+ import type { InFlightDeliveries, LeaseRepository, ShipRepository } from './ports.js';
8
+ import type { Ship } from './ship.js';
9
+ /** The ports the lease operations need, inside the caller's unit of work. */
10
+ export interface LeaseTx {
11
+ leases: LeaseRepository;
12
+ inFlightDeliveries: InFlightDeliveries;
13
+ events: EventLog;
14
+ notifier: Notifier;
15
+ }
16
+ /** What the lease operations work with: the caller's unit of work and its id generator. */
17
+ export interface LeaseDeps {
18
+ tx: LeaseTx;
19
+ ids: IdGenerator;
20
+ }
21
+ /**
22
+ * Starts a new lease on the operator ship, ending the one it holds. Only `argo`
23
+ * is taken over this way; any other ship fails a second claim instead
24
+ * (ADR 0010). Writes LeaseRevoked for the old lease and ShipClaimed for the new.
25
+ */
26
+ export declare function takeOverOperatorLease(deps: LeaseDeps, input: {
27
+ fleetId: FleetId;
28
+ shipId: ShipId;
29
+ kind: ShipKind;
30
+ location: Location;
31
+ actor: Actor;
32
+ at: Date;
33
+ }): Promise<Result<LeaseId, DomainError<'NOT_THE_OPERATOR_SHIP'>>>;
34
+ /**
35
+ * Ends a lease if it is still open, and with it the crew token it holds: the
36
+ * ship awaits a new crew, and the deliveries the lease held in flight return
37
+ * to pending, to the ship's inbox or its type's queue, their attempts kept.
38
+ * Writes LeaseRevoked, then DeliveryReturned for each returned delivery, all
39
+ * caused by whoever ended the lease, and wakes whoever waits for each, as a
40
+ * send does: another ship of the type takes a returned type delivery at once.
41
+ * The wake-up reaches them only once the unit of work commits. Returns false
42
+ * when the lease had already ended.
43
+ */
44
+ export declare function endLease(deps: LeaseDeps, input: {
45
+ fleetId: FleetId;
46
+ leaseId: LeaseId;
47
+ actor: Actor;
48
+ at: Date;
49
+ reason: LeaseEndReason;
50
+ }): Promise<boolean>;
51
+ /** The ports holding a crew's lease reads, inside the caller's unit of work. */
52
+ export interface HoldLeaseTx {
53
+ leases: Pick<LeaseRepository, 'findOpenByIdForShare'>;
54
+ ships: Pick<ShipRepository, 'find'>;
55
+ }
56
+ /**
57
+ * Holds a crew's lease open until the unit of work ends and returns the ship
58
+ * it crews: Messaging's question when a crew receives. A release or a takeover
59
+ * ending the lease meanwhile waits, then returns to pending whatever the unit
60
+ * of work claimed, so nothing stays claimed by an ended lease. Refused when
61
+ * the lease has already ended.
62
+ */
63
+ export declare function holdLease(tx: HoldLeaseTx, crew: {
64
+ fleetId: FleetId;
65
+ leaseId: LeaseId;
66
+ }): Promise<Result<Ship, LeaseEnded>>;
@@ -0,0 +1,80 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { recordEvent } from '../shared/events.js';
3
+ import { ok } from '../shared/result.js';
4
+ import { refuseEndedLease } from './lease.js';
5
+ /**
6
+ * Starts a new lease on the operator ship, ending the one it holds. Only `argo`
7
+ * is taken over this way; any other ship fails a second claim instead
8
+ * (ADR 0010). Writes LeaseRevoked for the old lease and ShipClaimed for the new.
9
+ */
10
+ export async function takeOverOperatorLease(deps, input) {
11
+ const { tx, ids } = deps;
12
+ const { fleetId, shipId, location, actor, at } = input;
13
+ if (input.kind !== 'operator') {
14
+ return refuse('NOT_THE_OPERATOR_SHIP', 'Only the operator ship can be taken over');
15
+ }
16
+ const held = await tx.leases.findOpenForUpdate(fleetId, shipId);
17
+ if (held) {
18
+ await endLease(deps, { fleetId, leaseId: held.id, actor, at, reason: 'takenOver' });
19
+ }
20
+ const leaseId = ids('lease');
21
+ await tx.leases.open({ id: leaseId, fleetId, shipId, location, harness: null, crewTokenHash: null, startedAt: at, endedAt: null });
22
+ await recordEvent({ events: tx.events, ids }, {
23
+ fleetId,
24
+ type: 'ShipClaimed',
25
+ occurredAt: at,
26
+ actor,
27
+ shipId,
28
+ details: { leaseId, location: location.kind, locationDescription: location.description, harness: null },
29
+ });
30
+ return ok(leaseId);
31
+ }
32
+ /**
33
+ * Ends a lease if it is still open, and with it the crew token it holds: the
34
+ * ship awaits a new crew, and the deliveries the lease held in flight return
35
+ * to pending, to the ship's inbox or its type's queue, their attempts kept.
36
+ * Writes LeaseRevoked, then DeliveryReturned for each returned delivery, all
37
+ * caused by whoever ended the lease, and wakes whoever waits for each, as a
38
+ * send does: another ship of the type takes a returned type delivery at once.
39
+ * The wake-up reaches them only once the unit of work commits. Returns false
40
+ * when the lease had already ended.
41
+ */
42
+ export async function endLease(deps, input) {
43
+ const { tx, ids } = deps;
44
+ const { fleetId, leaseId, actor, at, reason } = input;
45
+ const ended = await tx.leases.end({ fleetId, leaseId, endedAt: at });
46
+ if (!ended) {
47
+ return false;
48
+ }
49
+ const returned = await tx.inFlightDeliveries.returnToPending(fleetId, leaseId);
50
+ const concerns = { fleetId, occurredAt: at, actor, shipId: ended.shipId };
51
+ await recordEvent({ events: tx.events, ids }, {
52
+ ...concerns,
53
+ type: 'LeaseRevoked',
54
+ details: { leaseId, reason, returnedDeliveries: returned.length },
55
+ });
56
+ for (const { deliveryId, messageId, recipient, attempts } of returned) {
57
+ await recordEvent({ events: tx.events, ids }, {
58
+ ...concerns,
59
+ type: 'DeliveryReturned',
60
+ messageId,
61
+ deliveryId,
62
+ details: { leaseId, attempts },
63
+ });
64
+ await tx.notifier.deliveryPending({ fleetId, deliveryId, recipient });
65
+ }
66
+ return true;
67
+ }
68
+ /**
69
+ * Holds a crew's lease open until the unit of work ends and returns the ship
70
+ * it crews: Messaging's question when a crew receives. A release or a takeover
71
+ * ending the lease meanwhile waits, then returns to pending whatever the unit
72
+ * of work claimed, so nothing stays claimed by an ended lease. Refused when
73
+ * the lease has already ended.
74
+ */
75
+ export async function holdLease(tx, crew) {
76
+ const lease = await tx.leases.findOpenByIdForShare(crew.fleetId, crew.leaseId);
77
+ const ship = lease && (await tx.ships.find(crew.fleetId, lease.shipId));
78
+ return ship ? ok(ship) : refuseEndedLease();
79
+ }
80
+ //# sourceMappingURL=leases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leases.js","sourceRoot":"","sources":["../../../src/domain/registry/leases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAA6B,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAuD,MAAM,YAAY,CAAC;AAkBnG;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAe,EACf,KAAuG;IAEvG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnI,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,OAAO;QACP,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,EAAE;QACd,KAAK;QACL,MAAM;QACN,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;KACxG,CAAC,CAAC;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAe,EACf,KAA6F;IAE7F,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEtD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1E,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,GAAG,QAAQ;QACX,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,CAAC,MAAM,EAAE;KAClE,CAAC,CAAC;IACH,KAAK,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtE,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC5C,GAAG,QAAQ;YACX,IAAI,EAAE,kBAAkB;YACxB,SAAS;YACT,UAAU;YACV,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SAC/B,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAe,EACf,IAA4C;IAE5C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ /**
5
+ * The installation's settings (docs/blueprint.md, "Installation"): the ship
6
+ * and daily message limits a fleet follows unless set for it, and the cap on
7
+ * the number of fleets. Null is no limit. Aeolus sets none of its own: these
8
+ * are whoever runs the installation's (decision 0016).
9
+ */
10
+ export interface InstallationSettings {
11
+ defaultShipLimit: number | null;
12
+ defaultDailyMessageLimit: number | null;
13
+ fleetCap: number | null;
14
+ }
15
+ /** An installation that has set nothing: no limit anywhere, as a self-hosted server runs. */
16
+ export declare const NO_INSTALLATION_SETTINGS: InstallationSettings;
17
+ /** How one of a fleet's limits is set: it follows the installation default, or is set for the fleet to a number or to no limit. */
18
+ export type FleetLimitSetting = {
19
+ kind: 'default';
20
+ } | {
21
+ kind: 'fleet';
22
+ limit: number | null;
23
+ };
24
+ /** How a fleet's ship and daily message limits are set. */
25
+ export interface FleetLimitSettings {
26
+ ships: FleetLimitSetting;
27
+ dailyMessages: FleetLimitSetting;
28
+ }
29
+ /** A fleet that has set nothing for itself: both limits follow the installation defaults. */
30
+ export declare const FOLLOWING_DEFAULTS: FleetLimitSettings;
31
+ /** One of a fleet's limits: how it is set, and the limit that applies (null: none). */
32
+ export interface FleetLimit {
33
+ setting: FleetLimitSetting;
34
+ applies: number | null;
35
+ }
36
+ export interface FleetLimits {
37
+ fleetId: FleetId;
38
+ ships: FleetLimit;
39
+ dailyMessages: FleetLimit;
40
+ }
41
+ /** A limit as configured: a whole number of at least 0, or null for no limit. */
42
+ export declare function limit(raw: number | null): Result<number | null, DomainError<'INVALID_LIMIT'>>;
43
+ /** The limit a setting gives: its own when set for the fleet, else the installation default. */
44
+ export declare function appliedLimit(setting: FleetLimitSetting, defaultLimit: number | null): number | null;
45
+ /** A fleet's limits from how it set them and the installation's defaults. */
46
+ export declare function fleetLimitsOf(of: {
47
+ fleetId: FleetId;
48
+ settings: FleetLimitSettings;
49
+ installation: InstallationSettings;
50
+ }): FleetLimits;
@@ -0,0 +1,24 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /** An installation that has set nothing: no limit anywhere, as a self-hosted server runs. */
4
+ export const NO_INSTALLATION_SETTINGS = { defaultShipLimit: null, defaultDailyMessageLimit: null, fleetCap: null };
5
+ /** A fleet that has set nothing for itself: both limits follow the installation defaults. */
6
+ export const FOLLOWING_DEFAULTS = { ships: { kind: 'default' }, dailyMessages: { kind: 'default' } };
7
+ /** A limit as configured: a whole number of at least 0, or null for no limit. */
8
+ export function limit(raw) {
9
+ return raw === null || (Number.isInteger(raw) && raw >= 0) ? ok(raw) : refuse('INVALID_LIMIT', 'A limit is a whole number of at least 0, or none');
10
+ }
11
+ /** The limit a setting gives: its own when set for the fleet, else the installation default. */
12
+ export function appliedLimit(setting, defaultLimit) {
13
+ return setting.kind === 'fleet' ? setting.limit : defaultLimit;
14
+ }
15
+ /** A fleet's limits from how it set them and the installation's defaults. */
16
+ export function fleetLimitsOf(of) {
17
+ const { fleetId, settings, installation } = of;
18
+ return {
19
+ fleetId,
20
+ ships: { setting: settings.ships, applies: appliedLimit(settings.ships, installation.defaultShipLimit) },
21
+ dailyMessages: { setting: settings.dailyMessages, applies: appliedLimit(settings.dailyMessages, installation.defaultDailyMessageLimit) },
22
+ };
23
+ }
24
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../../src/domain/registry/limits.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AActD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,wBAAwB,GAAyB,EAAE,gBAAgB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAWzI,6FAA6F;AAC7F,MAAM,CAAC,MAAM,kBAAkB,GAAuB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;AAczH,iFAAiF;AACjF,MAAM,UAAU,KAAK,CAAC,GAAkB;IACtC,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,kDAAkD,CAAC,CAAC;AACrJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,YAAY,CAAC,OAA0B,EAAE,YAA2B;IAClF,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AACjE,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,EAA0F;IACtH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;IAC/C,OAAO;QACL,OAAO;QACP,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,EAAE;QACxG,aAAa,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,wBAAwB,CAAC,EAAE;KACzI,CAAC;AACJ,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { Scope, ShipId, ShipKind, ShipStatus } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Location } from './lease.js';
4
+ import { type PingStatus } from './ping-status.js';
5
+ import type { CrewRequest } from './crew-request.js';
6
+ import type { FleetListing, ShipFacts } from './ports.js';
7
+ import type { ShipReport } from './ship-report.js';
8
+ /** A ship as the fleet snapshot shows it. */
9
+ export interface ListedShip {
10
+ id: ShipId;
11
+ name: string;
12
+ type: string;
13
+ /** `operator` for `argo`, which is never released, renamed or retired; `agent` for every other ship. */
14
+ kind: ShipKind;
15
+ status: ShipStatus;
16
+ /**
17
+ * The starting prompt holding the ship's valid secret: when it was issued
18
+ * and whether a session has claimed the ship with it. Null when no secret is
19
+ * valid. An unclaimed one is outstanding: a new prompt would stop it working.
20
+ */
21
+ startingPrompt: {
22
+ issuedAt: Date;
23
+ isClaimed: boolean;
24
+ } | null;
25
+ /** Where the session crewing the ship runs, as it reported on claim; null while no session crews it. */
26
+ location: Location | null;
27
+ /** The last call of the session crewing it; null while no session crews it. Observation only. */
28
+ lastSeenAt: Date | null;
29
+ /** The ship's last ping and how it stands; null before any ping. Observation only. */
30
+ ping: PingStatus | null;
31
+ /** What the ship may do: every agent ship sends and receives, and may hold fleet scopes; argo has all. */
32
+ scopes: readonly Scope[];
33
+ /** The crew's last report with the version of its details, never the details; null until it reports, and while no session crews the ship. */
34
+ report: Omit<ShipReport, 'details'> | null;
35
+ /** The ship's crew request by its settings version and when it was requested, never its settings; null when it holds none. */
36
+ crewRequest: (Pick<CrewRequest, 'settingsVersion' | 'requestedAt' | 'status' | 'reason'> & {
37
+ /** The trierarch ship it is assigned to, by id and name; null while unassigned. */
38
+ assignedTo: {
39
+ id: ShipId;
40
+ name: string;
41
+ } | null;
42
+ /** The ship that got the starting prompt its crew claimed with: argo for a hand crew, or its trierarch; null while not crewed. */
43
+ crewedBy: {
44
+ id: ShipId;
45
+ name: string;
46
+ } | null;
47
+ }) | null;
48
+ /** The harness the crewing session stated, read together with its location; null while no session crews the ship. */
49
+ harness: string | null;
50
+ /** The ship's current model: the last its sessions stated on a send, and when; null before any. */
51
+ model: {
52
+ id: string;
53
+ statedAt: Date;
54
+ } | null;
55
+ /** Since when the ship awaits crew: its commission, or when its last session ended (a release or deregister). Null unless it awaits crew. */
56
+ awaitingCrewSince: Date | null;
57
+ /** When the operator retired the ship; null while it is active. */
58
+ retiredAt: Date | null;
59
+ }
60
+ export type ListFleet = (caller: Caller) => Promise<ListedShip[]>;
61
+ /**
62
+ * Use case: every ship of the caller's fleet, `argo` included, oldest first.
63
+ * Never a secret, a crew token or their hashes. The caller's scope
64
+ * (fleet:read) is checked before this runs.
65
+ */
66
+ export declare function createListFleet(deps: {
67
+ listing: FleetListing;
68
+ }): ListFleet;
69
+ /** A ship as the fleet snapshot shows it, from what the listing read about it. */
70
+ export declare function listedShipOf({ ship, openLease, validSecret, crewRequest, crewRequestAssignee, crewedBy, lastPing, lastModel, lastViewedAt, lastLeaseEndedAt, }: ShipFacts): ListedShip;
@@ -0,0 +1,47 @@
1
+ import { pingStatusOf } from './ping-status.js';
2
+ import { shipStatus } from './ship.js';
3
+ /**
4
+ * Use case: every ship of the caller's fleet, `argo` included, oldest first.
5
+ * Never a secret, a crew token or their hashes. The caller's scope
6
+ * (fleet:read) is checked before this runs.
7
+ */
8
+ export function createListFleet(deps) {
9
+ return async (caller) => (await deps.listing.ships(caller.fleetId)).map(listedShipOf);
10
+ }
11
+ /** A ship as the fleet snapshot shows it, from what the listing read about it. */
12
+ export function listedShipOf({ ship, openLease, validSecret, crewRequest, crewRequestAssignee, crewedBy, lastPing, lastModel, lastViewedAt, lastLeaseEndedAt, }) {
13
+ const status = shipStatus(ship, { isCrewed: openLease !== null });
14
+ return {
15
+ id: ship.id,
16
+ name: ship.name,
17
+ type: ship.type,
18
+ kind: ship.kind,
19
+ status,
20
+ startingPrompt: validSecret && { issuedAt: validSecret.issuedAt, isClaimed: validSecret.claimedAt !== null },
21
+ location: openLease?.location ?? null,
22
+ // The viewer ship holds no lease: it was last seen when its most recent viewer session was used.
23
+ lastSeenAt: openLease?.lastSeenAt ?? lastViewedAt,
24
+ ping: pingStatusOf(lastPing),
25
+ scopes: ship.scopes,
26
+ report: openLease?.report ? listedReportOf(openLease.report) : null,
27
+ crewRequest: crewRequest && {
28
+ settingsVersion: crewRequest.settingsVersion,
29
+ requestedAt: crewRequest.requestedAt,
30
+ assignedTo: crewRequestAssignee,
31
+ status: crewRequest.status,
32
+ reason: crewRequest.reason,
33
+ crewedBy,
34
+ },
35
+ harness: openLease?.harness ?? null,
36
+ model: lastModel,
37
+ awaitingCrewSince: status === 'awaitingCrew' ? latestOf(ship.createdAt, lastLeaseEndedAt) : null,
38
+ retiredAt: ship.retiredAt,
39
+ };
40
+ }
41
+ function listedReportOf({ state, note, reportedAt, detailsVersion }) {
42
+ return { state, note, reportedAt, detailsVersion };
43
+ }
44
+ function latestOf(first, second) {
45
+ return second !== null && second > first ? second : first;
46
+ }
47
+ //# sourceMappingURL=list-fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/list-fleet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAIjE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA+CvC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAA+B;IAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AACxF,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,gBAAgB,GACN;IACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM;QACN,cAAc,EAAE,WAAW,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,KAAK,IAAI,EAAE;QAC5G,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI;QACrC,iGAAiG;QACjG,UAAU,EAAE,SAAS,EAAE,UAAU,IAAI,YAAY;QACjD,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;QAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;QACnE,WAAW,EAAE,WAAW,IAAI;YAC1B,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,UAAU,EAAE,mBAAmB;YAC/B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ;SACT;QACD,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,IAAI;QACnC,KAAK,EAAE,SAAS;QAChB,iBAAiB,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;QAChG,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAc;IAC7E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAW,EAAE,MAAmB;IAChD,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Fleet } from './fleet.js';
2
+ import type { FleetRepository } from './ports.js';
3
+ export type ListFleets = () => Promise<Fleet[]>;
4
+ /**
5
+ * Use case: the fleets this installation hosts, for server commands that act
6
+ * on one of them. Not reachable through the API: listing fleets reads across
7
+ * tenants.
8
+ */
9
+ export declare function createListFleets(deps: {
10
+ fleets: Pick<FleetRepository, 'list'>;
11
+ }): ListFleets;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Use case: the fleets this installation hosts, for server commands that act
3
+ * on one of them. Not reachable through the API: listing fleets reads across
4
+ * tenants.
5
+ */
6
+ export function createListFleets(deps) {
7
+ return () => deps.fleets.list();
8
+ }
9
+ //# sourceMappingURL=list-fleets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-fleets.js","sourceRoot":"","sources":["../../../src/domain/registry/list-fleets.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA+C;IAC9E,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Clock } from '../shared/clock.js';
2
+ import { type InstallationFleet } from './installation-fleet.js';
3
+ import type { InstallationFleets, InstallationSettingsRepository } from './ports.js';
4
+ export type ListInstallationFleets = () => Promise<InstallationFleet[]>;
5
+ /**
6
+ * Use case: every fleet the installation hosts, oldest first, with its
7
+ * operator, its measures, its messages per UTC day of the last 7 days and the
8
+ * limits that apply to it (docs/blueprint.md, "Installation"). It reads across
9
+ * fleets, so only the installation token reaches it.
10
+ */
11
+ export declare function createListInstallationFleets(deps: {
12
+ fleets: InstallationFleets;
13
+ settings: InstallationSettingsRepository;
14
+ clock: Clock;
15
+ }): ListInstallationFleets;
@@ -0,0 +1,15 @@
1
+ import { installationFleet, messageWindow } from './installation-fleet.js';
2
+ /**
3
+ * Use case: every fleet the installation hosts, oldest first, with its
4
+ * operator, its measures, its messages per UTC day of the last 7 days and the
5
+ * limits that apply to it (docs/blueprint.md, "Installation"). It reads across
6
+ * fleets, so only the installation token reaches it.
7
+ */
8
+ export function createListInstallationFleets(deps) {
9
+ return async () => {
10
+ const now = deps.clock.now();
11
+ const installation = await deps.settings.read();
12
+ return (await deps.fleets.list(messageWindow(now))).map((facts) => installationFleet(facts, { now, installation }));
13
+ };
14
+ }
15
+ //# sourceMappingURL=list-installation-fleets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-installation-fleets.js","sourceRoot":"","sources":["../../../src/domain/registry/list-installation-fleets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAA0B,MAAM,yBAAyB,CAAC;AAKnG;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAA4F;IACvI,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { PingState } from '@aeolus-fleet/common';
2
+ import type { ShipFacts } from './ports.js';
3
+ /** How a ship's last ping stands, as the console shows it. Observation only (ADR 0016). */
4
+ export interface PingStatus {
5
+ state: PingState;
6
+ sentAt: Date;
7
+ /** When pong answered it; null until then, and for a ping acknowledged with a plain ack. */
8
+ answeredAt: Date | null;
9
+ }
10
+ /**
11
+ * The status of a ship's last ping: waiting while its delivery is pending or
12
+ * in flight, answered once pong acknowledged it, received when a plain ack
13
+ * did, and undeliverable once it was handed out again and again and never
14
+ * acknowledged (it is in Needs attention too). A ping the operator dismissed,
15
+ * or one abandoned with a retired ship, shows none.
16
+ */
17
+ export declare function pingStatusOf(lastPing: ShipFacts['lastPing']): PingStatus | null;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The status of a ship's last ping: waiting while its delivery is pending or
3
+ * in flight, answered once pong acknowledged it, received when a plain ack
4
+ * did, and undeliverable once it was handed out again and again and never
5
+ * acknowledged (it is in Needs attention too). A ping the operator dismissed,
6
+ * or one abandoned with a retired ship, shows none.
7
+ */
8
+ export function pingStatusOf(lastPing) {
9
+ if (lastPing === null) {
10
+ return null;
11
+ }
12
+ const { sentAt, deliveryState, answeredWithPongAt } = lastPing;
13
+ switch (deliveryState) {
14
+ case 'pending':
15
+ case 'delivered':
16
+ return { state: 'waiting', sentAt, answeredAt: null };
17
+ case 'acknowledged':
18
+ return answeredWithPongAt === null
19
+ ? { state: 'received', sentAt, answeredAt: null }
20
+ : { state: 'answered', sentAt, answeredAt: answeredWithPongAt };
21
+ case 'undeliverable':
22
+ return { state: 'undeliverable', sentAt, answeredAt: null };
23
+ case 'dismissed':
24
+ case 'abandoned':
25
+ return null;
26
+ }
27
+ }
28
+ //# sourceMappingURL=ping-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping-status.js","sourceRoot":"","sources":["../../../src/domain/registry/ping-status.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAA+B;IAC1D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,QAAQ,CAAC;IAC/D,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxD,KAAK,cAAc;YACjB,OAAO,kBAAkB,KAAK,IAAI;gBAChC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;gBACjD,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACpE,KAAK,eAAe;YAClB,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9D,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { LeaseRepository, ShipRepository } from './ports.js';
5
+ import { type PingRefusal, type Ship } from './ship.js';
6
+ /** The ports finding a ship to ping reads, inside the caller's unit of work. */
7
+ export interface PingableShipTx {
8
+ ships: Pick<ShipRepository, 'findForUpdate'>;
9
+ leases: Pick<LeaseRepository, 'findOpenForShare'>;
10
+ }
11
+ export type UnpingableShip = DomainError<'SHIP_NOT_FOUND'> | PingRefusal;
12
+ /**
13
+ * The ship a ping goes to, if it can be pinged: Messaging's question before
14
+ * it pings. The ship stays locked until the unit of work ends, so two pings
15
+ * of one ship take turns and the second finds the first one's ping: pings
16
+ * never stack. Its open lease is held against a release meanwhile. Lock
17
+ * order as everywhere: the ship, then its lease.
18
+ */
19
+ export declare function findPingableShip(tx: PingableShipTx, input: {
20
+ fleetId: FleetId;
21
+ shipId: ShipId;
22
+ }): Promise<Result<Ship, UnpingableShip>>;
@@ -0,0 +1,21 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { checkCanBePinged } from './ship.js';
4
+ /**
5
+ * The ship a ping goes to, if it can be pinged: Messaging's question before
6
+ * it pings. The ship stays locked until the unit of work ends, so two pings
7
+ * of one ship take turns and the second finds the first one's ping: pings
8
+ * never stack. Its open lease is held against a release meanwhile. Lock
9
+ * order as everywhere: the ship, then its lease.
10
+ */
11
+ export async function findPingableShip(tx, input) {
12
+ const { fleetId, shipId } = input;
13
+ const ship = await tx.ships.findForUpdate(fleetId, shipId);
14
+ if (!ship) {
15
+ return refuse('SHIP_NOT_FOUND', `Ship ${shipId} does not exist`);
16
+ }
17
+ const lease = await tx.leases.findOpenForShare(fleetId, shipId);
18
+ const pingable = checkCanBePinged(ship, { isCrewed: lease !== undefined });
19
+ return pingable.isOk ? ok(ship) : pingable;
20
+ }
21
+ //# sourceMappingURL=pingable-ship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pingable-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/pingable-ship.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAA+B,MAAM,WAAW,CAAC;AAU1E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAkB,EAClB,KAA2C;IAE3C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,iBAAiB,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC;IAC3E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7C,CAAC"}