@aeolus-fleet/core 0.26.1 → 0.27.1

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 (364) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/http/request-credentials.d.ts +2 -9
  3. package/dist/adapters/http/request-credentials.js +8 -1
  4. package/dist/adapters/http/request-credentials.js.map +1 -1
  5. package/dist/adapters/http/server.js +2 -1
  6. package/dist/adapters/http/server.js.map +1 -1
  7. package/dist/adapters/mcp/mcp-endpoint.js +11 -1
  8. package/dist/adapters/mcp/mcp-endpoint.js.map +1 -1
  9. package/dist/adapters/prisma/generated/browser.d.ts +14 -0
  10. package/dist/adapters/prisma/generated/client.d.ts +14 -0
  11. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +30 -0
  12. package/dist/adapters/prisma/generated/enums.d.ts +10 -0
  13. package/dist/adapters/prisma/generated/enums.js +10 -1
  14. package/dist/adapters/prisma/generated/enums.js.map +1 -1
  15. package/dist/adapters/prisma/generated/internal/class.d.ts +22 -0
  16. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  17. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  18. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +186 -1
  19. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +27 -2
  20. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  21. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +27 -0
  22. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +27 -2
  23. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  24. package/dist/adapters/prisma/generated/models/Delivery.d.ts +71 -1
  25. package/dist/adapters/prisma/generated/models/Fleet.d.ts +558 -0
  26. package/dist/adapters/prisma/generated/models/Lease.d.ts +172 -1
  27. package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +185 -21
  28. package/dist/adapters/prisma/generated/models/PluginConnection.d.ts +1180 -0
  29. package/dist/adapters/prisma/generated/models/PluginConnection.js +2 -0
  30. package/dist/adapters/prisma/generated/models/PluginConnection.js.map +1 -0
  31. package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +71 -1
  32. package/dist/adapters/prisma/generated/models/ScopeNamespace.d.ts +1220 -0
  33. package/dist/adapters/prisma/generated/models/ScopeNamespace.js +2 -0
  34. package/dist/adapters/prisma/generated/models/ScopeNamespace.js.map +1 -0
  35. package/dist/adapters/prisma/generated/models/Ship.d.ts +1269 -51
  36. package/dist/adapters/prisma/generated/models.d.ts +2 -0
  37. package/dist/adapters/prisma/health.js +27 -7
  38. package/dist/adapters/prisma/health.js.map +1 -1
  39. package/dist/adapters/prisma/history.js +18 -72
  40. package/dist/adapters/prisma/history.js.map +1 -1
  41. package/dist/adapters/prisma/messaging.js +31 -35
  42. package/dist/adapters/prisma/messaging.js.map +1 -1
  43. package/dist/adapters/prisma/network.js +45 -15
  44. package/dist/adapters/prisma/network.js.map +1 -1
  45. package/dist/adapters/prisma/overdue.js +4 -3
  46. package/dist/adapters/prisma/overdue.js.map +1 -1
  47. package/dist/adapters/prisma/plugin-connections.d.ts +4 -0
  48. package/dist/adapters/prisma/plugin-connections.js +20 -0
  49. package/dist/adapters/prisma/plugin-connections.js.map +1 -0
  50. package/dist/adapters/prisma/registry.js +68 -13
  51. package/dist/adapters/prisma/registry.js.map +1 -1
  52. package/dist/adapters/prisma/rows.d.ts +3 -0
  53. package/dist/adapters/prisma/rows.js +22 -7
  54. package/dist/adapters/prisma/rows.js.map +1 -1
  55. package/dist/adapters/prisma/scope-namespaces.d.ts +4 -0
  56. package/dist/adapters/prisma/scope-namespaces.js +39 -0
  57. package/dist/adapters/prisma/scope-namespaces.js.map +1 -0
  58. package/dist/adapters/prisma/unit-of-work.d.ts +3 -1
  59. package/dist/adapters/prisma/unit-of-work.js +4 -0
  60. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  61. package/dist/adapters/rest/rest-api.js +2 -2
  62. package/dist/adapters/rest/rest-api.js.map +1 -1
  63. package/dist/adapters/trpc/console.d.ts +1 -1
  64. package/dist/adapters/trpc/console.js +6 -4
  65. package/dist/adapters/trpc/console.js.map +1 -1
  66. package/dist/adapters/trpc/context.d.ts +28 -4
  67. package/dist/adapters/trpc/fleet.d.ts +243 -90
  68. package/dist/adapters/trpc/fleet.js +146 -57
  69. package/dist/adapters/trpc/fleet.js.map +1 -1
  70. package/dist/adapters/trpc/router.d.ts +366 -86
  71. package/dist/adapters/trpc/ship-contract.js +5 -0
  72. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  73. package/dist/adapters/trpc/ship-protocol.js +7 -5
  74. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  75. package/dist/adapters/trpc/ship.d.ts +156 -3
  76. package/dist/adapters/trpc/ship.js +89 -8
  77. package/dist/adapters/trpc/ship.js.map +1 -1
  78. package/dist/adapters/trpc/trpc.d.ts +13 -9
  79. package/dist/adapters/trpc/trpc.js +90 -26
  80. package/dist/adapters/trpc/trpc.js.map +1 -1
  81. package/dist/domain/messaging/check-inbox.d.ts +5 -5
  82. package/dist/domain/messaging/check-inbox.js +9 -7
  83. package/dist/domain/messaging/check-inbox.js.map +1 -1
  84. package/dist/domain/messaging/delivery.d.ts +8 -2
  85. package/dist/domain/messaging/delivery.js +14 -9
  86. package/dist/domain/messaging/delivery.js.map +1 -1
  87. package/dist/domain/messaging/dismiss-delivery.d.ts +9 -4
  88. package/dist/domain/messaging/dismiss-delivery.js +26 -19
  89. package/dist/domain/messaging/dismiss-delivery.js.map +1 -1
  90. package/dist/domain/messaging/hand-over-delivery.d.ts +1 -0
  91. package/dist/domain/messaging/hand-over-delivery.js +1 -0
  92. package/dist/domain/messaging/hand-over-delivery.js.map +1 -1
  93. package/dist/domain/messaging/message.d.ts +11 -5
  94. package/dist/domain/messaging/message.js +11 -4
  95. package/dist/domain/messaging/message.js.map +1 -1
  96. package/dist/domain/messaging/overdue.d.ts +2 -0
  97. package/dist/domain/messaging/overdue.js +3 -0
  98. package/dist/domain/messaging/overdue.js.map +1 -1
  99. package/dist/domain/messaging/ping-ship.d.ts +3 -3
  100. package/dist/domain/messaging/ping-ship.js +6 -2
  101. package/dist/domain/messaging/ping-ship.js.map +1 -1
  102. package/dist/domain/messaging/ports.d.ts +11 -3
  103. package/dist/domain/messaging/push-receive-deliveries.d.ts +4 -1
  104. package/dist/domain/messaging/push-receive-deliveries.js +5 -3
  105. package/dist/domain/messaging/push-receive-deliveries.js.map +1 -1
  106. package/dist/domain/messaging/receive-deliveries.d.ts +23 -0
  107. package/dist/domain/messaging/receive-deliveries.js +6 -3
  108. package/dist/domain/messaging/receive-deliveries.js.map +1 -1
  109. package/dist/domain/messaging/receive-reply.d.ts +32 -0
  110. package/dist/domain/messaging/receive-reply.js +25 -0
  111. package/dist/domain/messaging/receive-reply.js.map +1 -0
  112. package/dist/domain/messaging/resend-delivery.d.ts +5 -2
  113. package/dist/domain/messaging/resend-delivery.js +8 -4
  114. package/dist/domain/messaging/resend-delivery.js.map +1 -1
  115. package/dist/domain/messaging/send-message.d.ts +9 -2
  116. package/dist/domain/messaging/send-message.js +12 -2
  117. package/dist/domain/messaging/send-message.js.map +1 -1
  118. package/dist/domain/messaging/send-request.d.ts +3 -1
  119. package/dist/domain/messaging/send-request.js +4 -2
  120. package/dist/domain/messaging/send-request.js.map +1 -1
  121. package/dist/domain/registry/assign-label.d.ts +2 -1
  122. package/dist/domain/registry/assign-label.js +3 -2
  123. package/dist/domain/registry/assign-label.js.map +1 -1
  124. package/dist/domain/registry/check-reach.d.ts +69 -6
  125. package/dist/domain/registry/check-reach.js +109 -12
  126. package/dist/domain/registry/check-reach.js.map +1 -1
  127. package/dist/domain/registry/commission-ship.d.ts +21 -8
  128. package/dist/domain/registry/commission-ship.js +55 -10
  129. package/dist/domain/registry/commission-ship.js.map +1 -1
  130. package/dist/domain/registry/connect-plugin.d.ts +30 -0
  131. package/dist/domain/registry/connect-plugin.js +35 -0
  132. package/dist/domain/registry/connect-plugin.js.map +1 -0
  133. package/dist/domain/registry/crew-request.d.ts +1 -1
  134. package/dist/domain/registry/declare-scopes.d.ts +38 -0
  135. package/dist/domain/registry/declare-scopes.js +34 -0
  136. package/dist/domain/registry/declare-scopes.js.map +1 -0
  137. package/dist/domain/registry/declared-network-rules.d.ts +2 -1
  138. package/dist/domain/registry/declared-network-rules.js +11 -5
  139. package/dist/domain/registry/declared-network-rules.js.map +1 -1
  140. package/dist/domain/registry/discover.d.ts +29 -0
  141. package/dist/domain/registry/discover.js +54 -0
  142. package/dist/domain/registry/discover.js.map +1 -0
  143. package/dist/domain/registry/explain-reach.d.ts +13 -12
  144. package/dist/domain/registry/explain-reach.js +35 -12
  145. package/dist/domain/registry/explain-reach.js.map +1 -1
  146. package/dist/domain/registry/get-ship.d.ts +11 -3
  147. package/dist/domain/registry/get-ship.js +8 -2
  148. package/dist/domain/registry/get-ship.js.map +1 -1
  149. package/dist/domain/registry/get-starting-prompt.d.ts +18 -2
  150. package/dist/domain/registry/get-starting-prompt.js +7 -7
  151. package/dist/domain/registry/get-starting-prompt.js.map +1 -1
  152. package/dist/domain/registry/grant-scopes.d.ts +34 -0
  153. package/dist/domain/registry/grant-scopes.js +35 -0
  154. package/dist/domain/registry/grant-scopes.js.map +1 -0
  155. package/dist/domain/registry/label.d.ts +12 -7
  156. package/dist/domain/registry/label.js +21 -4
  157. package/dist/domain/registry/label.js.map +1 -1
  158. package/dist/domain/registry/leases.d.ts +6 -3
  159. package/dist/domain/registry/leases.js +7 -5
  160. package/dist/domain/registry/leases.js.map +1 -1
  161. package/dist/domain/registry/list-fleet.d.ts +19 -6
  162. package/dist/domain/registry/list-fleet.js +18 -3
  163. package/dist/domain/registry/list-fleet.js.map +1 -1
  164. package/dist/domain/registry/list-scopes.d.ts +24 -0
  165. package/dist/domain/registry/list-scopes.js +22 -0
  166. package/dist/domain/registry/list-scopes.js.map +1 -0
  167. package/dist/domain/registry/managed-or-assigned.d.ts +25 -0
  168. package/dist/domain/registry/managed-or-assigned.js +23 -0
  169. package/dist/domain/registry/managed-or-assigned.js.map +1 -0
  170. package/dist/domain/registry/named-namespaces.d.ts +19 -0
  171. package/dist/domain/registry/named-namespaces.js +19 -0
  172. package/dist/domain/registry/named-namespaces.js.map +1 -0
  173. package/dist/domain/registry/network-settings.d.ts +95 -24
  174. package/dist/domain/registry/network-settings.js +146 -46
  175. package/dist/domain/registry/network-settings.js.map +1 -1
  176. package/dist/domain/registry/plugin-connection.d.ts +48 -0
  177. package/dist/domain/registry/plugin-connection.js +35 -0
  178. package/dist/domain/registry/plugin-connection.js.map +1 -0
  179. package/dist/domain/registry/ports.d.ts +75 -1
  180. package/dist/domain/registry/public.d.ts +3 -2
  181. package/dist/domain/registry/public.js +3 -2
  182. package/dist/domain/registry/public.js.map +1 -1
  183. package/dist/domain/registry/reach-refusal.d.ts +12 -4
  184. package/dist/domain/registry/read-assigned-crew-requests.d.ts +12 -3
  185. package/dist/domain/registry/read-assigned-crew-requests.js +8 -8
  186. package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -1
  187. package/dist/domain/registry/read-built-in-rules.d.ts +20 -0
  188. package/dist/domain/registry/read-built-in-rules.js +24 -0
  189. package/dist/domain/registry/read-built-in-rules.js.map +1 -0
  190. package/dist/domain/registry/read-clear-requests.d.ts +5 -3
  191. package/dist/domain/registry/read-clear-requests.js +7 -5
  192. package/dist/domain/registry/read-clear-requests.js.map +1 -1
  193. package/dist/domain/registry/read-network-plugin.d.ts +23 -0
  194. package/dist/domain/registry/read-network-plugin.js +15 -0
  195. package/dist/domain/registry/read-network-plugin.js.map +1 -0
  196. package/dist/domain/registry/read-on-behalf.d.ts +20 -0
  197. package/dist/domain/registry/read-on-behalf.js +31 -0
  198. package/dist/domain/registry/read-on-behalf.js.map +1 -0
  199. package/dist/domain/registry/read-reach.d.ts +64 -0
  200. package/dist/domain/registry/read-reach.js +83 -0
  201. package/dist/domain/registry/read-reach.js.map +1 -0
  202. package/dist/domain/registry/recrew-ship.d.ts +3 -2
  203. package/dist/domain/registry/recrew-ship.js +8 -1
  204. package/dist/domain/registry/recrew-ship.js.map +1 -1
  205. package/dist/domain/registry/release-ship.d.ts +10 -5
  206. package/dist/domain/registry/release-ship.js +11 -8
  207. package/dist/domain/registry/release-ship.js.map +1 -1
  208. package/dist/domain/registry/remove-crew-request.d.ts +4 -3
  209. package/dist/domain/registry/remove-crew-request.js +6 -1
  210. package/dist/domain/registry/remove-crew-request.js.map +1 -1
  211. package/dist/domain/registry/rename-ship.d.ts +7 -5
  212. package/dist/domain/registry/rename-ship.js +9 -3
  213. package/dist/domain/registry/rename-ship.js.map +1 -1
  214. package/dist/domain/registry/request-crew.d.ts +5 -4
  215. package/dist/domain/registry/request-crew.js +6 -1
  216. package/dist/domain/registry/request-crew.js.map +1 -1
  217. package/dist/domain/registry/request-worktree-clear.d.ts +3 -2
  218. package/dist/domain/registry/request-worktree-clear.js +6 -1
  219. package/dist/domain/registry/request-worktree-clear.js.map +1 -1
  220. package/dist/domain/registry/retire-ship.d.ts +17 -7
  221. package/dist/domain/registry/retire-ship.js +48 -5
  222. package/dist/domain/registry/retire-ship.js.map +1 -1
  223. package/dist/domain/registry/scope-grant.d.ts +53 -0
  224. package/dist/domain/registry/scope-grant.js +74 -0
  225. package/dist/domain/registry/scope-grant.js.map +1 -0
  226. package/dist/domain/registry/scope-namespace.d.ts +68 -0
  227. package/dist/domain/registry/scope-namespace.js +82 -0
  228. package/dist/domain/registry/scope-namespace.js.map +1 -0
  229. package/dist/domain/registry/set-built-in-rule.d.ts +28 -0
  230. package/dist/domain/registry/set-built-in-rule.js +33 -0
  231. package/dist/domain/registry/set-built-in-rule.js.map +1 -0
  232. package/dist/domain/registry/set-network-rules.d.ts +3 -3
  233. package/dist/domain/registry/set-network-rules.js +2 -2
  234. package/dist/domain/registry/set-owner.d.ts +30 -0
  235. package/dist/domain/registry/set-owner.js +37 -0
  236. package/dist/domain/registry/set-owner.js.map +1 -0
  237. package/dist/domain/registry/set-statement.d.ts +27 -0
  238. package/dist/domain/registry/set-statement.js +28 -0
  239. package/dist/domain/registry/set-statement.js.map +1 -0
  240. package/dist/domain/registry/ship.d.ts +74 -10
  241. package/dist/domain/registry/ship.js +128 -10
  242. package/dist/domain/registry/ship.js.map +1 -1
  243. package/dist/domain/registry/statement.d.ts +32 -0
  244. package/dist/domain/registry/statement.js +39 -0
  245. package/dist/domain/registry/statement.js.map +1 -0
  246. package/dist/domain/registry/unassign-label.js +1 -1
  247. package/dist/domain/registry/unassign-label.js.map +1 -1
  248. package/dist/domain/registry/whoami.d.ts +5 -1
  249. package/dist/domain/registry/whoami.js +7 -4
  250. package/dist/domain/registry/whoami.js.map +1 -1
  251. package/dist/domain/shared/caller.d.ts +5 -2
  252. package/dist/domain/shared/caller.js.map +1 -1
  253. package/dist/domain/shared/delivery-way.d.ts +9 -5
  254. package/dist/domain/shared/delivery-way.js +17 -5
  255. package/dist/domain/shared/delivery-way.js.map +1 -1
  256. package/dist/domain/shared/errors.d.ts +1 -1
  257. package/dist/domain/shared/errors.js.map +1 -1
  258. package/dist/domain/shared/events-read.d.ts +16 -0
  259. package/dist/domain/shared/events-read.js +15 -0
  260. package/dist/domain/shared/events-read.js.map +1 -0
  261. package/dist/domain/shared/follow-fleet.d.ts +8 -2
  262. package/dist/domain/shared/follow-fleet.js +14 -4
  263. package/dist/domain/shared/follow-fleet.js.map +1 -1
  264. package/dist/domain/shared/health.d.ts +11 -2
  265. package/dist/domain/shared/health.js +11 -3
  266. package/dist/domain/shared/health.js.map +1 -1
  267. package/dist/domain/shared/history.d.ts +11 -42
  268. package/dist/domain/shared/history.js +9 -0
  269. package/dist/domain/shared/history.js.map +1 -1
  270. package/dist/domain/shared/read-fleet-events.d.ts +8 -2
  271. package/dist/domain/shared/read-fleet-events.js +10 -4
  272. package/dist/domain/shared/read-fleet-events.js.map +1 -1
  273. package/dist/domain/shared/read-health.d.ts +5 -1
  274. package/dist/domain/shared/read-health.js +13 -2
  275. package/dist/domain/shared/read-health.js.map +1 -1
  276. package/dist/domain/shared/read-inbox.d.ts +6 -3
  277. package/dist/domain/shared/read-inbox.js +14 -4
  278. package/dist/domain/shared/read-inbox.js.map +1 -1
  279. package/dist/domain/shared/read-message.d.ts +6 -2
  280. package/dist/domain/shared/read-message.js +6 -2
  281. package/dist/domain/shared/read-message.js.map +1 -1
  282. package/dist/domain/shared/read-needs-attention.d.ts +4 -1
  283. package/dist/domain/shared/read-needs-attention.js +8 -3
  284. package/dist/domain/shared/read-needs-attention.js.map +1 -1
  285. package/dist/domain/shared/read-sent-message.d.ts +31 -0
  286. package/dist/domain/shared/read-sent-message.js +28 -0
  287. package/dist/domain/shared/read-sent-message.js.map +1 -0
  288. package/dist/domain/shared/read-ship-messages.d.ts +6 -2
  289. package/dist/domain/shared/read-ship-messages.js +7 -2
  290. package/dist/domain/shared/read-ship-messages.js.map +1 -1
  291. package/dist/domain/shared/read-ship-timeline.d.ts +5 -2
  292. package/dist/domain/shared/read-ship-timeline.js +11 -6
  293. package/dist/domain/shared/read-ship-timeline.js.map +1 -1
  294. package/dist/domain/shared/read-ship-way.d.ts +11 -4
  295. package/dist/domain/shared/read-ship-way.js +9 -2
  296. package/dist/domain/shared/read-ship-way.js.map +1 -1
  297. package/dist/domain/shared/stuck.d.ts +10 -1
  298. package/dist/domain/shared/stuck.js +5 -3
  299. package/dist/domain/shared/stuck.js.map +1 -1
  300. package/dist/testing/container-images.d.ts +14 -0
  301. package/dist/testing/container-images.js +18 -0
  302. package/dist/testing/container-images.js.map +1 -0
  303. package/dist/testing/database.d.ts +14 -0
  304. package/dist/testing/database.js +48 -0
  305. package/dist/testing/database.js.map +1 -0
  306. package/dist/testing/fleet.d.ts +13 -0
  307. package/dist/testing/fleet.js +17 -0
  308. package/dist/testing/fleet.js.map +1 -0
  309. package/dist/testing/index.d.ts +12 -0
  310. package/dist/testing/index.js +12 -0
  311. package/dist/testing/index.js.map +1 -0
  312. package/dist/testing/keys.d.ts +1 -0
  313. package/dist/testing/keys.js +7 -0
  314. package/dist/testing/keys.js.map +1 -0
  315. package/dist/testing/migrate-lock.d.ts +12 -0
  316. package/dist/testing/migrate-lock.js +51 -0
  317. package/dist/testing/migrate-lock.js.map +1 -0
  318. package/dist/testing/migrated-template.d.ts +12 -0
  319. package/dist/testing/migrated-template.js +29 -0
  320. package/dist/testing/migrated-template.js.map +1 -0
  321. package/dist/testing/postgres-container.d.ts +16 -0
  322. package/dist/testing/postgres-container.js +30 -0
  323. package/dist/testing/postgres-container.js.map +1 -0
  324. package/dist/testing/postgres-global-setup.d.ts +15 -0
  325. package/dist/testing/postgres-global-setup.js +20 -0
  326. package/dist/testing/postgres-global-setup.js.map +1 -0
  327. package/dist/testing/prisma-cli.d.ts +5 -0
  328. package/dist/testing/prisma-cli.js +15 -0
  329. package/dist/testing/prisma-cli.js.map +1 -0
  330. package/dist/testing/result.d.ts +5 -0
  331. package/dist/testing/result.js +15 -0
  332. package/dist/testing/result.js.map +1 -0
  333. package/dist/wiring.d.ts +26 -4
  334. package/dist/wiring.js +51 -18
  335. package/dist/wiring.js.map +1 -1
  336. package/package.json +28 -2
  337. package/src/adapters/prisma/migrations/20261018100000_force_scope/migration.sql +8 -0
  338. package/src/adapters/prisma/migrations/20261018110000_forced_delivery/migration.sql +4 -0
  339. package/src/adapters/prisma/migrations/20261018120000_person_and_app_ships/migration.sql +3 -0
  340. package/src/adapters/prisma/migrations/20261018130000_owners/migration.sql +14 -0
  341. package/src/adapters/prisma/migrations/20261018140000_owners_on_reach_refusals/migration.sql +14 -0
  342. package/src/adapters/prisma/migrations/20261018150000_network_verbs/migration.sql +9 -0
  343. package/src/adapters/prisma/migrations/20261018160000_built_in_rules/migration.sql +13 -0
  344. package/src/adapters/prisma/migrations/20261018170000_network_rules_a_list/migration.sql +5 -0
  345. package/src/adapters/prisma/migrations/20261018180000_verb_on_reach_refusals/migration.sql +4 -0
  346. package/src/adapters/prisma/migrations/20261018200000_lease_statements/migration.sql +3 -0
  347. package/src/adapters/prisma/migrations/20261018210000_declare_and_grant_scopes/migration.sql +8 -0
  348. package/src/adapters/prisma/migrations/20261018220000_plugin_scopes/migration.sql +14 -0
  349. package/src/adapters/prisma/migrations/20261018230000_scope_namespaces/migration.sql +20 -0
  350. package/src/adapters/prisma/migrations/20261018240000_trierarch_plugin_crew_run/migration.sql +44 -0
  351. package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +67 -0
  352. package/src/adapters/prisma/migrations/20261019090000_reach_refusal_asked_by/migration.sql +2 -0
  353. package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +61 -0
  354. package/src/adapters/prisma/migrations/20261019110000_events_fleet_id_occurred_at/migration.sql +2 -0
  355. package/src/adapters/prisma/migrations/20261019130000_plugin_connections/migration.sql +54 -0
  356. package/src/adapters/prisma/migrations/20261019150000_network_plugin_registered_at/migration.sql +23 -0
  357. package/src/adapters/prisma/migrations/20261019160000_lease_waker/migration.sql +4 -0
  358. package/src/adapters/prisma/schema.prisma +81 -7
  359. package/dist/domain/shared/read-no-ship-can-take.d.ts +0 -13
  360. package/dist/domain/shared/read-no-ship-can-take.js +0 -12
  361. package/dist/domain/shared/read-no-ship-can-take.js.map +0 -1
  362. package/dist/domain/shared/read-overdue.d.ts +0 -13
  363. package/dist/domain/shared/read-overdue.js +0 -12
  364. package/dist/domain/shared/read-overdue.js.map +0 -1
@@ -1,15 +1,18 @@
1
1
  import { refuse } from '../shared/errors.js';
2
2
  import { ok } from '../shared/result.js';
3
3
  /**
4
- * Use case: tells the caller which ship it crews: id, fleet, name and type.
4
+ * Use case: tells the caller which ship it crews: id, fleet, name, type and
5
+ * owner.
5
6
  * Any caller may ask, whatever its scopes: it learns only about itself.
6
7
  */
7
8
  export function createWhoami(deps) {
8
9
  return async (caller) => {
9
10
  const ship = await deps.ships.find(caller.fleetId, caller.shipId);
10
- return ship
11
- ? ok({ shipId: ship.id, fleetId: ship.fleetId, name: ship.name, type: ship.type })
12
- : refuse('SHIP_NOT_FOUND', `Ship ${caller.shipId} does not exist`);
11
+ if (!ship) {
12
+ return refuse('SHIP_NOT_FOUND', `Ship ${caller.shipId} does not exist`);
13
+ }
14
+ const owner = ship.owner === null ? undefined : await deps.ships.find(caller.fleetId, ship.owner);
15
+ return ok({ shipId: ship.id, fleetId: ship.fleetId, name: ship.name, type: ship.type, ownerShipId: owner?.id ?? null, ownerName: owner?.name ?? null });
13
16
  };
14
17
  }
15
18
  //# sourceMappingURL=whoami.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/domain/registry/whoami.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAatD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6C;IACxE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI;YACT,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAClF,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/domain/registry/whoami.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAgBtD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6C;IACxE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClG,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1J,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ConsoleSessionId, FleetId, LeaseId, Scope, ShipId, ShipKind } from '@aeolus-fleet/common';
1
+ import type { ConsoleSessionId, FleetId, LeaseId, Scope, ScopeName, ShipId, ShipKind } from '@aeolus-fleet/common';
2
2
  /**
3
3
  * Who is calling. Every caller is a ship (ADR 0012), resolved from its crew
4
4
  * token or from a console session. Kind and scopes come from the server, never
@@ -8,9 +8,12 @@ export interface Caller {
8
8
  shipId: ShipId;
9
9
  fleetId: FleetId;
10
10
  kind: ShipKind;
11
- scopes: readonly Scope[];
11
+ /** Core scopes and plugin scopes; core checks only its own (decision 0046). */
12
+ scopes: readonly ScopeName[];
12
13
  /** Set when the caller signed in through the console rather than calling with a crew token. */
13
14
  consoleSessionId?: ConsoleSessionId;
15
+ /** The plugin ship that reads on behalf of this ship, with this ship's read reach (decision 0034); absent for a ship's own call. */
16
+ askedBy?: ShipId;
14
17
  }
15
18
  /**
16
19
  * A caller that came with the crew token `register` gave it: one session
@@ -1 +1 @@
1
- {"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../src/domain/shared/caller.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAY;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../src/domain/shared/caller.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAY;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type ComputerSide, type CrewStatus, type DeliveryHolder, type DeliveryState, type LeaseEndReason, type OverdueClock, type ShipId, type TurnState } from '@aeolus-fleet/common';
1
+ import { type ComputerSide, type CrewStatus, type DeliveryHolder, type DeliveryState, type LeaseEndReason, type LeaseWaker, type OverdueClock, type ShipId, type TurnState } from '@aeolus-fleet/common';
2
2
  import type { Location } from '../registry/public.js';
3
3
  import type { SequencedEvent } from './events.js';
4
4
  import { type DeliveryChange, type HistoryParty } from './history.js';
@@ -15,6 +15,8 @@ export interface WayLease {
15
15
  trierarch: HistoryParty | null;
16
16
  /** From its first push receive until it ends. */
17
17
  isPushed: boolean;
18
+ /** What wakes the ship, as its first push receive stated it (interop 5.1); null when it stated none. */
19
+ waker: LeaseWaker | null;
18
20
  isEnded: boolean;
19
21
  /** Why it ended, as its LeaseRevoked says; null while open. */
20
22
  endReason: LeaseEndReason | null;
@@ -54,11 +56,13 @@ export interface DeliveryWay {
54
56
  crew: WayCrew | null;
55
57
  }
56
58
  /**
57
- * The part that receives and hands over for a pushed lease's session: its
58
- * trierarch, or else the plugin watcher of a session crewed by hand. A pull
59
- * lease has none: its agent receives itself.
59
+ * The part that receives and hands over for a pushed lease's session: what
60
+ * its first push receive stated wakes it (interop 5.1), else its trierarch,
61
+ * or else the plugin watcher of a session crewed by hand. A trierarch stated
62
+ * by a session no trierarch crewed names none to show, so it reads as the
63
+ * lease shows. A pull lease has none: its agent receives itself.
60
64
  */
61
- export declare function computerSideOf(lease: Pick<WayLease, 'isPushed' | 'trierarch'>): ComputerSide | null;
65
+ export declare function computerSideOf(lease: Pick<WayLease, 'isPushed' | 'trierarch' | 'waker'>): ComputerSide | null;
62
66
  /**
63
67
  * One step of a delivery's way from its event: the ship it names, where a
64
68
  * hand-over's session ran, the computer side that received it or handed it
@@ -1,15 +1,26 @@
1
1
  import { OVERDUE_CLOCKS, } from '@aeolus-fleet/common';
2
2
  import { isDeliveryChangeType } from './history.js';
3
3
  /**
4
- * The part that receives and hands over for a pushed lease's session: its
5
- * trierarch, or else the plugin watcher of a session crewed by hand. A pull
6
- * lease has none: its agent receives itself.
4
+ * The part that receives and hands over for a pushed lease's session: what
5
+ * its first push receive stated wakes it (interop 5.1), else its trierarch,
6
+ * or else the plugin watcher of a session crewed by hand. A trierarch stated
7
+ * by a session no trierarch crewed names none to show, so it reads as the
8
+ * lease shows. A pull lease has none: its agent receives itself.
7
9
  */
8
10
  export function computerSideOf(lease) {
9
11
  if (!lease.isPushed) {
10
12
  return null;
11
13
  }
12
- return lease.trierarch ? { kind: 'trierarch', trierarch: lease.trierarch } : { kind: 'pluginWatcher' };
14
+ switch (lease.waker) {
15
+ case 'personApp':
16
+ case 'gateway':
17
+ case 'adapter':
18
+ case 'pluginWatcher':
19
+ return { kind: lease.waker };
20
+ case 'trierarch':
21
+ case null:
22
+ return lease.trierarch ? { kind: 'trierarch', trierarch: lease.trierarch } : { kind: 'pluginWatcher' };
23
+ }
13
24
  }
14
25
  function isOverdueClock(value) {
15
26
  return OVERDUE_CLOCKS.some((clock) => clock === value);
@@ -27,7 +38,7 @@ export function deliveryStepOf(event, read) {
27
38
  }
28
39
  const lease = typeof details.leaseId === 'string' ? read.leases.get(details.leaseId) : undefined;
29
40
  const isTakenBySession = type === 'DeliveryReceived' || type === 'DeliveryHanded';
30
- const { attempts, handOverNumber, clock, minutes } = details;
41
+ const { attempts, handOverNumber, channel, clock, minutes } = details;
31
42
  return [
32
43
  {
33
44
  seq: event.seq,
@@ -39,6 +50,7 @@ export function deliveryStepOf(event, read) {
39
50
  attempts: typeof attempts === 'number' ? attempts : null,
40
51
  by: isTakenBySession && lease ? computerSideOf(lease) : null,
41
52
  handOverNumber: typeof handOverNumber === 'number' ? handOverNumber : null,
53
+ channel: typeof channel === 'string' ? channel : null,
42
54
  isAgain: details.again === true,
43
55
  isOnceMore: details.onceMore === true,
44
56
  overdue: type === 'DeliveryOverdue' && isOverdueClock(clock) && typeof minutes === 'number' ? { clock, minutes } : null,
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-way.js","sourceRoot":"","sources":["../../../src/domain/shared/delivery-way.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-way.js","sourceRoot":"","sources":["../../../src/domain/shared/delivery-way.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAUf,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,oBAAoB,EAA0C,MAAM,cAAc,CAAC;AAqD5F;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyD;IACtF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,WAAW,CAAC;QACjB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,eAAe;YAClB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAC3G,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAqB,EACrB,IAAoF;IAEpF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,gBAAgB,GAAG,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,gBAAgB,CAAC;IAClF,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtE,OAAO;QACL;YACE,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI;YACJ,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAChG,QAAQ,EAAE,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACpE,OAAO,EAAE,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YAClE,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;YACxD,EAAE,EAAE,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YAC5D,cAAc,EAAE,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;YAC1E,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YACrD,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;YAC/B,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,IAAI;YACrC,OAAO,EAAE,IAAI,KAAK,iBAAiB,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;YACvH,QAAQ,EAAE,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SAC1E;KACF,CAAC;AACJ,CAAC;AAED,2HAA2H;AAC3H,SAAS,QAAQ,CAAC,KAAoB,EAAE,KAAsB;IAC5D,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,KAAK,QAAQ,CAAC;QACd,KAAK,cAAc;YACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,SAAS,aAAa,CAAC,IAAoB;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAM7B;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;IAC5E,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B,KAAK,EAAE,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QACvE,QAAQ,EAAE,YAAY,EAAE,cAAc,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU;QAC3E,OAAO;QACP,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;QACvF,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;KACrC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type Err } from './result.js';
2
2
  /** Every reason the domain refuses a request. */
3
- export type DomainErrorKind = 'ASSIGNEE_NOT_ACTIVE' | 'CLEAR_REQUEST_LIMIT_REACHED' | 'CLEAR_REQUEST_NOT_FOUND' | 'CREW_REQUEST_ALREADY_ASSIGNED' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_RELEASING' | 'CREW_REQUEST_RELEASING' | 'CREW_REQUEST_FINAL' | 'CREW_REQUEST_SETTINGS_CHANGED' | 'CREW_REQUEST_SETTINGS_INVALID' | 'CREW_REQUEST_SETTINGS_TOO_LARGE' | 'DELIVERY_HANDED_ONCE_MORE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | 'DELIVERY_NOT_ACKNOWLEDGED' | 'DELIVERY_NOT_HANDED_ONCE_MORE' | 'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_NOT_UNDELIVERABLE' | 'FLEET_ALREADY_EXISTS' | 'FLEET_LIMIT_REACHED' | 'FLEET_NOT_FOUND' | 'FLEET_HAS_NO_VIEWER' | 'NOTICE_NOT_FOUND' | 'NOTICE_NOT_DISMISSIBLE' | 'GUIDE_NOT_FOUND' | 'GUIDE_STEP_NOT_FOUND' | 'IDEMPOTENCY_KEY_REUSED' | 'IN_REPLY_TO_NOT_FOUND' | 'MESSAGE_LIMIT_REACHED' | 'MODEL_REQUIRED' | 'INVALID_HARNESS' | 'MODEL_FROM_ARGO' | 'INVALID_CONTENT_TYPE' | 'INVALID_EMAIL' | 'INVALID_FLEET_NAME' | 'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT' | 'INVALID_IDEMPOTENCY_KEY' | 'INVALID_INBOX_WAIT' | 'INVALID_LABEL_KEY' | 'INVALID_LABEL_VALUE' | 'INVALID_LABEL_VALUES' | 'INVALID_LIMIT' | 'INVALID_LOCATION' | 'INVALID_NETWORK_RULES' | 'INVALID_PASSWORD' | 'INVALID_RECEIVE_MAX' | 'INVALID_CREW_REQUEST_REASON' | 'INVALID_REPORT_DETAILS' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_STATE' | 'INVALID_SHIP_NAME' | 'INVALID_SHIP_NOTE' | 'INVALID_SHIP_TYPE' | 'LABEL_CARRIED' | 'LABEL_KEY_TAKEN' | 'LABEL_NOT_FOUND' | 'LABEL_VALUE_CARRIED' | 'LABEL_VALUE_NOT_FOUND' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NETWORK_PLUGIN_REGISTERED' | 'NOT_A_TRIERARCH' | 'NOT_THE_LABEL_OWNER' | 'NOT_REACHABLE' | 'NOT_THE_NETWORK_PLUGIN' | 'NOT_THE_OPERATOR_SHIP' | 'OPERATOR_EMAIL_TAKEN' | 'OPERATOR_HAS_NO_PASSWORD' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'OPERATOR_SHIP_HAS_NO_SECRET' | 'OPERATOR_SHIP_IS_NOT_PINGED' | 'OPERATOR_SHIP_IS_PERMANENT' | 'PAYLOAD_TOO_LARGE' | 'PING_NOT_RESENT' | 'REPORT_DETAILS_TOO_LARGE' | 'RESERVED_CONTENT_TYPE' | 'SHIP_ALREADY_RETIRED' | 'SHIP_NAME_RESERVED' | 'SHIP_NAME_TAKEN' | 'SHIP_NOT_AWAITING_CREW' | 'SHIP_NOT_CREWED' | 'SHIP_LABEL_LIMIT_REACHED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'SIGN_IN_TICKET_INVALID' | 'UNKNOWN_CREW_TOKEN' | 'UNRESOLVABLE_SELECTOR' | 'WRONG_EMAIL_OR_PASSWORD' | 'WRONG_SHIP_ID_OR_SECRET';
3
+ export type DomainErrorKind = 'ASSIGNEE_NOT_ACTIVE' | 'BASE_SCOPE' | 'CLEAR_REQUEST_LIMIT_REACHED' | 'CLEAR_REQUEST_NOT_FOUND' | 'CORE_NAMESPACE' | 'CREW_REQUEST_ALREADY_ASSIGNED' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_RELEASING' | 'CREW_REQUEST_RELEASING' | 'CREW_REQUEST_FINAL' | 'CREW_REQUEST_SETTINGS_CHANGED' | 'CREW_REQUEST_SETTINGS_INVALID' | 'CREW_REQUEST_SETTINGS_TOO_LARGE' | 'DELIVERY_HANDED_ONCE_MORE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | 'DELIVERY_NOT_ACKNOWLEDGED' | 'DELIVERY_NOT_HANDED_ONCE_MORE' | 'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_NOT_UNDELIVERABLE' | 'FLEET_ALREADY_EXISTS' | 'FLEET_LIMIT_REACHED' | 'FORCE_NOT_ALLOWED' | 'FLEET_NOT_FOUND' | 'FLEET_HAS_NO_VIEWER' | 'INVALID_SCOPE' | 'INVALID_SCOPE_DESCRIPTION' | 'NAMESPACE_TAKEN' | 'NOTICE_NOT_FOUND' | 'NOTICE_NOT_DISMISSIBLE' | 'GUIDE_NOT_FOUND' | 'GUIDE_STEP_NOT_FOUND' | 'IDEMPOTENCY_KEY_REUSED' | 'OWN_SHIP_SCOPES' | 'PLUGIN_SCOPE_NOT_YOURS' | 'SCOPE_HELD' | 'SCOPE_NOT_DECLARED' | 'SCOPE_NOT_HELD' | 'SECOND_NAMESPACE' | 'SHIP_HAS_NO_OWNER' | 'KIND_COMMISSIONED_BY_ARGO_ONLY' | 'IN_REPLY_TO_NOT_FOUND' | 'MESSAGE_LIMIT_REACHED' | 'MODEL_REQUIRED' | 'INVALID_HARNESS' | 'MODEL_FROM_ARGO' | 'MODEL_FROM_PERSON_OR_APP' | 'INVALID_CONTENT_TYPE' | 'INVALID_EMAIL' | 'INVALID_FLEET_NAME' | 'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT' | 'INVALID_IDEMPOTENCY_KEY' | 'INVALID_INBOX_WAIT' | 'INVALID_LABEL_KEY' | 'INVALID_LABEL_VALUE' | 'INVALID_LABEL_VALUES' | 'INVALID_LIMIT' | 'INVALID_LOCATION' | 'INVALID_OWNER' | 'INVALID_NETWORK_RULES' | 'INVALID_PASSWORD' | 'INVALID_RECEIVE_MAX' | 'INVALID_CREW_REQUEST_REASON' | 'INVALID_REPORT_DETAILS' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_STATE' | 'INVALID_SHIP_NAME' | 'INVALID_SHIP_NOTE' | 'INVALID_SHIP_TYPE' | 'LABEL_CARRIED' | 'LABEL_KEY_TAKEN' | 'LABEL_NOT_FOUND' | 'LABEL_VALUE_CARRIED' | 'LABEL_VALUE_NOT_FOUND' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NETWORK_PLUGIN_REGISTERED' | 'NOT_A_TRIERARCH' | 'NOT_AN_AGENT_SHIP' | 'NOT_THE_LABEL_OWNER' | 'NOT_YOUR_SHIP_TO_LABEL' | 'NOT_REACHABLE' | 'NOT_THE_NETWORK_PLUGIN' | 'BUILT_IN_RULE_FIXED' | 'NOT_THE_OPERATOR_SHIP' | 'OPERATOR_EMAIL_TAKEN' | 'OPERATOR_HAS_NO_PASSWORD' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'OPERATOR_SHIP_HAS_NO_SECRET' | 'OPERATOR_SHIP_IS_NOT_PINGED' | 'OPERATOR_SHIP_IS_PERMANENT' | 'PAYLOAD_TOO_LARGE' | 'PING_NOT_RESENT' | 'REPORT_DETAILS_TOO_LARGE' | 'RESERVED_CONTENT_TYPE' | 'SHIP_ALREADY_RETIRED' | 'SHIP_NAME_RESERVED' | 'SHIP_NAME_TAKEN' | 'SHIP_NOT_AWAITING_CREW' | 'SHIP_NOT_CREWED' | 'SHIP_LABEL_LIMIT_REACHED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'SHIP_NOT_READ_ON_BEHALF' | 'SHIP_SCOPES_FIXED' | 'SIGN_IN_TICKET_INVALID' | 'TOO_MANY_SCOPES' | 'UNKNOWN_CREW_TOKEN' | 'UNRESOLVABLE_SELECTOR' | 'WRONG_EMAIL_OR_PASSWORD' | 'WRONG_SHIP_ID_OR_SECRET';
4
4
  /**
5
5
  * Why the domain refused a request. Adapters map the kind to their own error
6
6
  * shape (a tRPC code, an exit code); the message is safe to show a caller.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AA2G5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAiI5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import { type ReadReach } from '../registry/public.js';
3
+ import type { SequencedEvent } from './events.js';
4
+ import type { ShipHistory } from './history.js';
5
+ /**
6
+ * The events a read reach reads (decision 0034): a message's through its
7
+ * parties, any other through the ship it concerns, one that concerns neither
8
+ * by every reader. In their order.
9
+ */
10
+ export declare function eventsRead(deps: {
11
+ history: Pick<ShipHistory, 'messageParties'>;
12
+ }, read: {
13
+ fleetId: FleetId;
14
+ reach: ReadReach;
15
+ events: readonly SequencedEvent[];
16
+ }): Promise<SequencedEvent[]>;
@@ -0,0 +1,15 @@
1
+ import { readsEvent } from '../registry/public.js';
2
+ /**
3
+ * The events a read reach reads (decision 0034): a message's through its
4
+ * parties, any other through the ship it concerns, one that concerns neither
5
+ * by every reader. In their order.
6
+ */
7
+ export async function eventsRead(deps, read) {
8
+ const { fleetId, reach, events } = read;
9
+ if (reach.kind === 'every') {
10
+ return [...events];
11
+ }
12
+ const parties = await deps.history.messageParties(fleetId, events.flatMap((event) => (event.messageId === undefined ? [] : [event.messageId])));
13
+ return events.filter((event) => readsEvent(reach, { type: event.type, shipId: event.shipId ?? null, message: (event.messageId === undefined ? undefined : parties.get(event.messageId)) ?? null }));
14
+ }
15
+ //# sourceMappingURL=events-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-read.js","sourceRoot":"","sources":["../../../src/domain/shared/events-read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAkB,MAAM,uBAAuB,CAAC;AAInE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAsD,EACtD,IAA+E;IAE/E,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC/C,OAAO,EACP,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CACpF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CACnK,CAAC;AACJ,CAAC"}
@@ -1,13 +1,15 @@
1
+ import type { ReadReachOf } from '../registry/public.js';
1
2
  import type { Caller } from './caller.js';
2
3
  import type { Clock } from './clock.js';
3
4
  import { type DomainError } from './errors.js';
4
5
  import type { FleetEventFeed, FleetEventWakeups, SequencedEvent } from './events.js';
6
+ import type { ShipHistory } from './history.js';
5
7
  import { type Result } from './result.js';
6
8
  export type FollowFleetRefusal = DomainError<'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT'>;
7
9
  export interface FleetFollowed {
8
10
  /** The events after the position, oldest first. */
9
11
  events: SequencedEvent[];
10
- /** The number to follow from next: the last event's, the position itself when none came, or the newest without one. */
12
+ /** The number to follow from next: the last event's it went through, read or not, the position itself when none came, or the newest without one. */
11
13
  lastSeq: number;
12
14
  }
13
15
  export type FollowFleet = (caller: Caller, input: {
@@ -23,10 +25,14 @@ export type FollowFleet = (caller: Caller, input: {
23
25
  * wait, and nothing after the position, it watches its fleet's wake-ups and
24
26
  * reads again on each until an event comes or the wait has passed; it starts
25
27
  * 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.
28
+ * answered. It answers only the events the caller reads (decision 0034); one
29
+ * it does not read moves the position on and does not end a wait. The
30
+ * caller's scope is checked before this runs.
27
31
  */
28
32
  export declare function createFollowFleet(deps: {
29
33
  feed: FleetEventFeed;
30
34
  clock: Clock;
31
35
  wakeups: FleetEventWakeups;
36
+ history: Pick<ShipHistory, 'messageParties'>;
37
+ readReach: ReadReachOf;
32
38
  }): FollowFleet;
@@ -1,5 +1,6 @@
1
1
  import { FOLLOW_MAX_DEFAULT, FOLLOW_MAX_LIMIT, FOLLOW_WAIT_MAX_SECONDS } from '@aeolus-fleet/common';
2
2
  import { refuse } from './errors.js';
3
+ import { eventsRead } from './events-read.js';
3
4
  import { ok } from './result.js';
4
5
  const SECOND_MS = 1_000;
5
6
  function checkedMax(max) {
@@ -22,7 +23,9 @@ function checkedWaitMs(waitSeconds) {
22
23
  * wait, and nothing after the position, it watches its fleet's wake-ups and
23
24
  * reads again on each until an event comes or the wait has passed; it starts
24
25
  * 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
+ * answered. It answers only the events the caller reads (decision 0034); one
27
+ * it does not read moves the position on and does not end a wait. The
28
+ * caller's scope is checked before this runs.
26
29
  */
27
30
  export function createFollowFleet(deps) {
28
31
  return async (caller, input) => {
@@ -40,20 +43,27 @@ export function createFollowFleet(deps) {
40
43
  return ok({ events: [], lastSeq: await deps.feed.lastSeq(fleetId) });
41
44
  }
42
45
  const until = deps.clock.now().getTime() + waitMs.value;
46
+ const reach = await deps.readReach(caller);
47
+ let position = afterSeq;
43
48
  let watch;
44
49
  try {
45
50
  for (;;) {
46
- const events = await deps.feed.after(fleetId, { seq: afterSeq, limit: max.value });
51
+ const gone = await deps.feed.after(fleetId, { seq: position, limit: max.value });
52
+ position = gone.at(-1)?.seq ?? position;
53
+ const events = await eventsRead(deps, { fleetId, reach, events: gone });
47
54
  const remainingMs = until - deps.clock.now().getTime();
48
55
  if (events.length > 0 || remainingMs <= 0) {
49
- return ok({ events, lastSeq: events.at(-1)?.seq ?? afterSeq });
56
+ return ok({ events, lastSeq: position });
57
+ }
58
+ if (gone.length > 0) {
59
+ continue;
50
60
  }
51
61
  if (watch === undefined) {
52
62
  watch = deps.wakeups.watch(fleetId);
53
63
  continue;
54
64
  }
55
65
  if ((await watch.next(remainingMs)) === 'timedOut') {
56
- return ok({ events: [], lastSeq: afterSeq });
66
+ return ok({ events: [], lastSeq: position });
57
67
  }
58
68
  }
59
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"follow-fleet.js","sourceRoot":"","sources":["../../../src/domain/shared/follow-fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow-fleet.js","sourceRoot":"","sources":["../../../src/domain/shared/follow-fleet.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,18 @@
5
5
  * hours. Facts read from the fleet's records, never stored.
6
6
  */
7
7
  import { type FleetId, type ShipId } from '@aeolus-fleet/common';
8
+ import type { MessageParties } from '../registry/public.js';
8
9
  import type { HistoryParty } from './history.js';
9
10
  import { type FleetRecords, type StuckPlaceCount } from './stuck.js';
10
11
  /** A machine: the trierarch a ship's crew request is assigned to, and when its crew last called. */
11
12
  export interface Machine extends HistoryParty {
12
13
  lastSeenAt: Date | null;
13
14
  }
14
- /** A delivery acknowledged in the window: when its message was sent and when it was acknowledged. */
15
+ /** A delivery acknowledged in the window: when its message was sent and when it was acknowledged, and its message's parties. */
15
16
  export interface AcknowledgedDelivery {
16
17
  sentAt: Date;
17
18
  acknowledgedAt: Date;
19
+ message: MessageParties;
18
20
  }
19
21
  /** The deliveries acknowledged in the last 24 hours, the median from send to acknowledgement, and how many in each hour. */
20
22
  export interface Acknowledged {
@@ -73,10 +75,17 @@ export declare function healthSince(now: Date): Date;
73
75
  export declare function acknowledgedSince(now: Date): Date;
74
76
  /** Counts the deliveries acknowledged in the 24 hours up to `now`, with their median wait and how many in each hour. */
75
77
  export declare function acknowledgedOf(deliveries: readonly AcknowledgedDelivery[], now: Date): Acknowledged;
76
- /** Reads the fleet's health at `now`: its records over the trend's hours and its acknowledged in the last 24. */
78
+ /**
79
+ * Reads the fleet's health at `now`: its records over the trend's hours and
80
+ * its acknowledged in the last 24, counting only the deliveries whose message
81
+ * `reads` keeps, every one without it. A ship `readsShip` leaves out is shown
82
+ * by name only, without the machine behind it (decision 0034).
83
+ */
77
84
  export declare function readHealthOf(records: HealthRecords, read: {
78
85
  fleetId: FleetId;
79
86
  now: Date;
87
+ reads?: (message: MessageParties) => boolean;
88
+ readsShip?: (shipId: ShipId) => boolean;
80
89
  }): Promise<Health>;
81
90
  export declare function healthOf(facts: HealthFacts, read: {
82
91
  acknowledged: Acknowledged;
@@ -36,10 +36,18 @@ export function acknowledgedOf(deliveries, now) {
36
36
  });
37
37
  return { count: inWindow.length, medianMs: medianOf(inWindow.map((delivery) => delivery.acknowledgedAt.getTime() - delivery.sentAt.getTime())), perHour };
38
38
  }
39
- /** Reads the fleet's health at `now`: its records over the trend's hours and its acknowledged in the last 24. */
39
+ /**
40
+ * Reads the fleet's health at `now`: its records over the trend's hours and
41
+ * its acknowledged in the last 24, counting only the deliveries whose message
42
+ * `reads` keeps, every one without it. A ship `readsShip` leaves out is shown
43
+ * by name only, without the machine behind it (decision 0034).
44
+ */
40
45
  export async function readHealthOf(records, read) {
41
- const [facts, acknowledged] = await Promise.all([records.read(read.fleetId, healthSince(read.now)), records.acknowledged(read.fleetId, acknowledgedSince(read.now))]);
42
- return healthOf(facts, { acknowledged: acknowledgedOf(acknowledged, read.now), now: read.now });
46
+ const { fleetId, now, reads = () => true, readsShip = () => true } = read;
47
+ const [facts, acknowledged] = await Promise.all([records.read(fleetId, healthSince(now)), records.acknowledged(fleetId, acknowledgedSince(now))]);
48
+ const deliveries = facts.deliveries.filter(({ senderId, recipient, claimedBy }) => reads({ senderId, recipient, claimedBy }));
49
+ const machines = facts.machines.filter(({ shipId }) => readsShip(shipId));
50
+ return healthOf({ ...facts, deliveries, machines }, { acknowledged: acknowledgedOf(acknowledged.filter((delivery) => reads(delivery.message)), now), now });
43
51
  }
44
52
  export function healthOf(facts, read) {
45
53
  const shown = (place) => {
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/domain/shared/health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/domain/shared/health.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { DELIVERY_HISTORY_TYPES, type ComputerSide, type LeaseEndReason, type InboxFilter, type DeliveryId, type DeliveryState, type EventId, type EventType, type FleetId, type MessageId, type ShipId } from '@aeolus-fleet/common';
2
- import type { OverdueClock, WaitingState } from '../messaging/public.js';
3
- import type { Location } from '../registry/public.js';
2
+ import type { OverdueClock } from '../messaging/public.js';
3
+ import type { Location, MessageParties } from '../registry/public.js';
4
4
  import type { StandingOverdue, WayCrew, WayLease } from './delivery-way.js';
5
5
  import type { EventDetails } from './events.js';
6
6
  /**
@@ -41,6 +41,11 @@ export interface TimelineEntry {
41
41
  } | null;
42
42
  details: EventDetails;
43
43
  }
44
+ /** A message's parties as read reach sees them; for a type, `claimedBy` is the ship that claimed it, if one has. */
45
+ export declare function partiesOf(message: {
46
+ sender: HistoryParty;
47
+ recipient: HistoryRecipient;
48
+ }, claimedBy: HistoryParty | null): MessageParties;
44
49
  /** A message as a read shows it: whether it is a ping, told by its content type, so no reader repeats that rule. */
45
50
  export type WithPing<T extends {
46
51
  contentType: string;
@@ -54,14 +59,6 @@ export declare function withPing<T extends {
54
59
  export type ShownTimelineEntry = Omit<TimelineEntry, 'message'> & {
55
60
  message: WithPing<NonNullable<TimelineEntry['message']>> | null;
56
61
  };
57
- /** A delivery no ship can take as it is answered, its message telling whether it is a ping. */
58
- export type ShownNoShipCanTakeEntry = Omit<NoShipCanTakeEntry, 'message'> & {
59
- message: WithPing<NoShipCanTakeEntry['message']>;
60
- };
61
- /** An overdue delivery as it is answered, its message telling whether it is a ping. */
62
- export type ShownOverdueEntry = Omit<OverdueEntry, 'message'> & {
63
- message: WithPing<OverdueEntry['message']>;
64
- };
65
62
  /** A delivery in Needs attention as it is answered, its message telling whether it is a ping. */
66
63
  export type ShownNeedsAttentionEntry = Omit<NeedsAttentionEntry, 'message'> & {
67
64
  message: WithPing<NeedsAttentionEntry['message']>;
@@ -106,6 +103,8 @@ export interface DeliveryChange {
106
103
  by: ComputerSide | null;
107
104
  /** The number of a pushed hand-over; none for a plain receive's. */
108
105
  handOverNumber: number | null;
106
+ /** The channel a pushed hand-over went through, as its computer side named it (interop 5.1). */
107
+ channel: string | null;
109
108
  /** A push receive of a delivery its crew already held. */
110
109
  isAgain: boolean;
111
110
  /** A confirmed message handed once more after its turn died. */
@@ -168,30 +167,6 @@ export interface NeedsAttentionEntry {
168
167
  }
169
168
  /** The delivery states Needs attention lists, each waiting for the operator to resend or dismiss it. */
170
169
  export type NeedsAttentionState = Extract<DeliveryState, 'undeliverable' | 'notHandled'>;
171
- /**
172
- * A delivery argo was told is overdue (decision 0040): the ship whose clock
173
- * ran out, the state it waits in, which clock, when argo was told, and its
174
- * whole message. Listed until it clears by itself.
175
- */
176
- export interface OverdueEntry {
177
- deliveryId: DeliveryId;
178
- ship: HistoryParty;
179
- state: WaitingState;
180
- clock: OverdueClock;
181
- minutes: number;
182
- toldAt: Date;
183
- message: Omit<HistoryMessage, 'delivery'>;
184
- }
185
- /**
186
- * A pending delivery to a type no active ship can take (decision 0041): none
187
- * of the type is left, or none of the ships its sender may reach (decision
188
- * 0034). Its type and its whole message; listed until a ship can take it.
189
- */
190
- export interface NoShipCanTakeEntry {
191
- deliveryId: DeliveryId;
192
- type: string;
193
- message: Omit<HistoryMessage, 'delivery'>;
194
- }
195
170
  /** A reply the inbox's ship sent to a message in its inbox. */
196
171
  export interface InboxReply {
197
172
  id: MessageId;
@@ -236,14 +211,6 @@ export interface ShipHistory {
236
211
  message(fleetId: FleetId, messageId: MessageId): Promise<MessageRead | undefined>;
237
212
  /** Every undeliverable or not handled delivery, oldest first by since when. */
238
213
  needsAttention(fleetId: FleetId): Promise<NeedsAttentionEntry[]>;
239
- /**
240
- * Every delivery argo was told is overdue that still stands, oldest told
241
- * first: still in the state it was told in, on the lease it was told on,
242
- * which has not ended.
243
- */
244
- overdue(fleetId: FleetId): Promise<OverdueEntry[]>;
245
- /** Every pending delivery to a type no active ship can take, oldest sent first. */
246
- noShipCanTake(fleetId: FleetId): Promise<NoShipCanTakeEntry[]>;
247
214
  /** What the ship's side of the way is read from: the open lease of the session crewing it and what waits for it. */
248
215
  shipWay(fleetId: FleetId, shipId: ShipId): Promise<ShipWayRead | undefined>;
249
216
  /** The messages addressed to the ship itself that the filter keeps, newest first. */
@@ -251,4 +218,6 @@ export interface ShipHistory {
251
218
  shipId: ShipId;
252
219
  filter: InboxFilter;
253
220
  }): Promise<InboxEntry[]>;
221
+ /** Each message's parties as read reach sees them, by id; a message the fleet does not have is left out. */
222
+ messageParties(fleetId: FleetId, messageIds: readonly MessageId[]): Promise<ReadonlyMap<MessageId, MessageParties>>;
254
223
  }
@@ -1,4 +1,13 @@
1
1
  import { DELIVERY_HISTORY_TYPES, isPingContentType, } from '@aeolus-fleet/common';
2
+ /** A message's parties as read reach sees them; for a type, `claimedBy` is the ship that claimed it, if one has. */
3
+ export function partiesOf(message, claimedBy) {
4
+ const { sender, recipient } = message;
5
+ return {
6
+ senderId: sender.id,
7
+ recipient: recipient.kind === 'ship' ? { kind: 'ship', shipId: recipient.ship.id } : recipient,
8
+ claimedBy: claimedBy?.id ?? null,
9
+ };
10
+ }
2
11
  export function withPing(message) {
3
12
  return { ...message, isPing: isPingContentType(message.contentType) };
4
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAWlB,MAAM,sBAAsB,CAAC;AAwC9B,MAAM,UAAU,QAAQ,CAAoC,OAAU;IACpE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACxE,CAAC;AAsCD,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AAqID,+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,UAAU,IAAI,KAAK,KAAK,QAAQ,CAAC;QAC3E,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAWlB,MAAM,sBAAsB,CAAC;AAqC9B,oHAAoH;AACpH,MAAM,UAAU,SAAS,CAAC,OAA8D,EAAE,SAA8B;IACtH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9F,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;KACjC,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,QAAQ,CAAoC,OAAU;IACpE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACxE,CAAC;AAgCD,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AA6GD,+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,UAAU,IAAI,KAAK,KAAK,QAAQ,CAAC;QAC3E,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -1,5 +1,7 @@
1
+ import type { ReadReachOf } from '../registry/public.js';
1
2
  import type { Caller } from './caller.js';
2
3
  import type { FleetEventFeed, SequencedEvent } from './events.js';
4
+ import type { ShipHistory } from './history.js';
3
5
  /**
4
6
  * The most missed events a browser is sent one by one. Further behind, loading
5
7
  * the fleet again is cheaper than replaying its history.
@@ -13,6 +15,7 @@ export declare const REPLAY_LIMIT = 1000;
13
15
  export type FleetEventsRead = {
14
16
  kind: 'events';
15
17
  events: SequencedEvent[];
18
+ lastSeq: number;
16
19
  } | {
17
20
  kind: 'resync';
18
21
  seq: number;
@@ -21,9 +24,12 @@ export type ReadFleetEvents = (caller: Caller, afterSeq: number | undefined) =>
21
24
  /**
22
25
  * Use case: the caller's fleet events after a position, for the live fleet
23
26
  * 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.
27
+ * told to load the fleet again. Only the events the caller reads (decision
28
+ * 0034), with the number of the last it went through, read or not, to follow
29
+ * from next. The caller's scope (fleet:read) is checked before this runs.
26
30
  */
27
31
  export declare function createReadFleetEvents(deps: {
28
32
  feed: FleetEventFeed;
33
+ history: Pick<ShipHistory, 'messageParties'>;
34
+ readReach: ReadReachOf;
29
35
  }): ReadFleetEvents;
@@ -1,3 +1,4 @@
1
+ import { eventsRead } from './events-read.js';
1
2
  /**
2
3
  * The most missed events a browser is sent one by one. Further behind, loading
3
4
  * the fleet again is cheaper than replaying its history.
@@ -6,8 +7,9 @@ export const REPLAY_LIMIT = 1000;
6
7
  /**
7
8
  * Use case: the caller's fleet events after a position, for the live fleet
8
9
  * 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.
10
+ * told to load the fleet again. Only the events the caller reads (decision
11
+ * 0034), with the number of the last it went through, read or not, to follow
12
+ * from next. The caller's scope (fleet:read) is checked before this runs.
11
13
  */
12
14
  export function createReadFleetEvents(deps) {
13
15
  const resync = async (caller) => ({
@@ -18,8 +20,12 @@ export function createReadFleetEvents(deps) {
18
20
  if (afterSeq === undefined) {
19
21
  return resync(caller);
20
22
  }
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
+ const gone = await deps.feed.after(caller.fleetId, { seq: afterSeq, limit: REPLAY_LIMIT + 1 });
24
+ if (gone.length > REPLAY_LIMIT) {
25
+ return resync(caller);
26
+ }
27
+ const events = await eventsRead(deps, { fleetId: caller.fleetId, reach: await deps.readReach(caller), events: gone });
28
+ return { kind: 'events', events, lastSeq: gone.at(-1)?.seq ?? afterSeq };
23
29
  };
24
30
  }
25
31
  //# sourceMappingURL=read-fleet-events.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"read-fleet-events.js","sourceRoot":"","sources":["../../../src/domain/shared/read-fleet-events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAWjC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAoG;IACxI,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,IAAI,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;QAC/F,IAAI,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}