@aeolus-fleet/core 0.26.1 → 0.27.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 (286) 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 +8 -0
  10. package/dist/adapters/prisma/generated/client.d.ts +8 -0
  11. package/dist/adapters/prisma/generated/enums.d.ts +2 -0
  12. package/dist/adapters/prisma/generated/enums.js +3 -1
  13. package/dist/adapters/prisma/generated/enums.js.map +1 -1
  14. package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
  15. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  16. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  17. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +94 -1
  18. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +18 -1
  19. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  20. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +18 -0
  21. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +18 -1
  22. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  23. package/dist/adapters/prisma/generated/models/Delivery.d.ts +71 -1
  24. package/dist/adapters/prisma/generated/models/Fleet.d.ts +275 -0
  25. package/dist/adapters/prisma/generated/models/Lease.d.ts +113 -1
  26. package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +151 -19
  27. package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +71 -1
  28. package/dist/adapters/prisma/generated/models/ScopeNamespace.d.ts +1220 -0
  29. package/dist/adapters/prisma/generated/models/ScopeNamespace.js +2 -0
  30. package/dist/adapters/prisma/generated/models/ScopeNamespace.js.map +1 -0
  31. package/dist/adapters/prisma/generated/models/Ship.d.ts +983 -55
  32. package/dist/adapters/prisma/generated/models.d.ts +1 -0
  33. package/dist/adapters/prisma/health.js +27 -7
  34. package/dist/adapters/prisma/health.js.map +1 -1
  35. package/dist/adapters/prisma/history.js +14 -70
  36. package/dist/adapters/prisma/history.js.map +1 -1
  37. package/dist/adapters/prisma/messaging.js +27 -34
  38. package/dist/adapters/prisma/messaging.js.map +1 -1
  39. package/dist/adapters/prisma/network.js +39 -12
  40. package/dist/adapters/prisma/network.js.map +1 -1
  41. package/dist/adapters/prisma/registry.js +65 -11
  42. package/dist/adapters/prisma/registry.js.map +1 -1
  43. package/dist/adapters/prisma/rows.d.ts +3 -0
  44. package/dist/adapters/prisma/rows.js +20 -7
  45. package/dist/adapters/prisma/rows.js.map +1 -1
  46. package/dist/adapters/prisma/scope-namespaces.d.ts +4 -0
  47. package/dist/adapters/prisma/scope-namespaces.js +39 -0
  48. package/dist/adapters/prisma/scope-namespaces.js.map +1 -0
  49. package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
  50. package/dist/adapters/prisma/unit-of-work.js +2 -0
  51. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  52. package/dist/adapters/rest/rest-api.js +2 -2
  53. package/dist/adapters/rest/rest-api.js.map +1 -1
  54. package/dist/adapters/trpc/console.d.ts +1 -1
  55. package/dist/adapters/trpc/console.js +6 -4
  56. package/dist/adapters/trpc/console.js.map +1 -1
  57. package/dist/adapters/trpc/context.d.ts +20 -4
  58. package/dist/adapters/trpc/fleet.d.ts +179 -82
  59. package/dist/adapters/trpc/fleet.js +117 -53
  60. package/dist/adapters/trpc/fleet.js.map +1 -1
  61. package/dist/adapters/trpc/router.d.ts +231 -80
  62. package/dist/adapters/trpc/ship-contract.js +4 -0
  63. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  64. package/dist/adapters/trpc/ship-protocol.js +7 -5
  65. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  66. package/dist/adapters/trpc/ship.d.ts +71 -3
  67. package/dist/adapters/trpc/ship.js +42 -5
  68. package/dist/adapters/trpc/ship.js.map +1 -1
  69. package/dist/adapters/trpc/trpc.d.ts +6 -5
  70. package/dist/adapters/trpc/trpc.js +76 -21
  71. package/dist/adapters/trpc/trpc.js.map +1 -1
  72. package/dist/domain/messaging/check-inbox.d.ts +5 -5
  73. package/dist/domain/messaging/check-inbox.js +9 -7
  74. package/dist/domain/messaging/check-inbox.js.map +1 -1
  75. package/dist/domain/messaging/dismiss-delivery.d.ts +9 -4
  76. package/dist/domain/messaging/dismiss-delivery.js +26 -19
  77. package/dist/domain/messaging/dismiss-delivery.js.map +1 -1
  78. package/dist/domain/messaging/message.d.ts +11 -5
  79. package/dist/domain/messaging/message.js +11 -4
  80. package/dist/domain/messaging/message.js.map +1 -1
  81. package/dist/domain/messaging/ping-ship.d.ts +3 -3
  82. package/dist/domain/messaging/ping-ship.js +6 -2
  83. package/dist/domain/messaging/ping-ship.js.map +1 -1
  84. package/dist/domain/messaging/ports.d.ts +9 -3
  85. package/dist/domain/messaging/receive-deliveries.d.ts +2 -0
  86. package/dist/domain/messaging/receive-deliveries.js +1 -0
  87. package/dist/domain/messaging/receive-deliveries.js.map +1 -1
  88. package/dist/domain/messaging/resend-delivery.d.ts +5 -2
  89. package/dist/domain/messaging/resend-delivery.js +8 -4
  90. package/dist/domain/messaging/resend-delivery.js.map +1 -1
  91. package/dist/domain/messaging/send-message.d.ts +9 -2
  92. package/dist/domain/messaging/send-message.js +12 -2
  93. package/dist/domain/messaging/send-message.js.map +1 -1
  94. package/dist/domain/messaging/send-request.d.ts +3 -1
  95. package/dist/domain/messaging/send-request.js +4 -2
  96. package/dist/domain/messaging/send-request.js.map +1 -1
  97. package/dist/domain/registry/assign-label.d.ts +2 -1
  98. package/dist/domain/registry/assign-label.js +3 -2
  99. package/dist/domain/registry/assign-label.js.map +1 -1
  100. package/dist/domain/registry/check-reach.d.ts +63 -4
  101. package/dist/domain/registry/check-reach.js +107 -11
  102. package/dist/domain/registry/check-reach.js.map +1 -1
  103. package/dist/domain/registry/commission-ship.d.ts +17 -8
  104. package/dist/domain/registry/commission-ship.js +24 -10
  105. package/dist/domain/registry/commission-ship.js.map +1 -1
  106. package/dist/domain/registry/crew-request.d.ts +1 -1
  107. package/dist/domain/registry/declare-scopes.d.ts +38 -0
  108. package/dist/domain/registry/declare-scopes.js +34 -0
  109. package/dist/domain/registry/declare-scopes.js.map +1 -0
  110. package/dist/domain/registry/declared-network-rules.d.ts +2 -1
  111. package/dist/domain/registry/declared-network-rules.js +11 -5
  112. package/dist/domain/registry/declared-network-rules.js.map +1 -1
  113. package/dist/domain/registry/discover.d.ts +28 -0
  114. package/dist/domain/registry/discover.js +54 -0
  115. package/dist/domain/registry/discover.js.map +1 -0
  116. package/dist/domain/registry/explain-reach.d.ts +12 -12
  117. package/dist/domain/registry/explain-reach.js +35 -12
  118. package/dist/domain/registry/explain-reach.js.map +1 -1
  119. package/dist/domain/registry/get-ship.d.ts +11 -3
  120. package/dist/domain/registry/get-ship.js +8 -2
  121. package/dist/domain/registry/get-ship.js.map +1 -1
  122. package/dist/domain/registry/get-starting-prompt.d.ts +18 -2
  123. package/dist/domain/registry/get-starting-prompt.js +7 -7
  124. package/dist/domain/registry/get-starting-prompt.js.map +1 -1
  125. package/dist/domain/registry/grant-scopes.d.ts +34 -0
  126. package/dist/domain/registry/grant-scopes.js +35 -0
  127. package/dist/domain/registry/grant-scopes.js.map +1 -0
  128. package/dist/domain/registry/label.d.ts +12 -7
  129. package/dist/domain/registry/label.js +21 -4
  130. package/dist/domain/registry/label.js.map +1 -1
  131. package/dist/domain/registry/list-fleet.d.ts +19 -6
  132. package/dist/domain/registry/list-fleet.js +18 -3
  133. package/dist/domain/registry/list-fleet.js.map +1 -1
  134. package/dist/domain/registry/list-scopes.d.ts +24 -0
  135. package/dist/domain/registry/list-scopes.js +22 -0
  136. package/dist/domain/registry/list-scopes.js.map +1 -0
  137. package/dist/domain/registry/managed-or-assigned.d.ts +25 -0
  138. package/dist/domain/registry/managed-or-assigned.js +23 -0
  139. package/dist/domain/registry/managed-or-assigned.js.map +1 -0
  140. package/dist/domain/registry/named-namespaces.d.ts +19 -0
  141. package/dist/domain/registry/named-namespaces.js +19 -0
  142. package/dist/domain/registry/named-namespaces.js.map +1 -0
  143. package/dist/domain/registry/network-settings.d.ts +84 -24
  144. package/dist/domain/registry/network-settings.js +134 -45
  145. package/dist/domain/registry/network-settings.js.map +1 -1
  146. package/dist/domain/registry/ports.d.ts +63 -1
  147. package/dist/domain/registry/public.d.ts +3 -2
  148. package/dist/domain/registry/public.js +3 -2
  149. package/dist/domain/registry/public.js.map +1 -1
  150. package/dist/domain/registry/reach-refusal.d.ts +12 -4
  151. package/dist/domain/registry/read-assigned-crew-requests.d.ts +12 -3
  152. package/dist/domain/registry/read-assigned-crew-requests.js +8 -8
  153. package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -1
  154. package/dist/domain/registry/read-built-in-rules.d.ts +20 -0
  155. package/dist/domain/registry/read-built-in-rules.js +23 -0
  156. package/dist/domain/registry/read-built-in-rules.js.map +1 -0
  157. package/dist/domain/registry/read-clear-requests.d.ts +5 -3
  158. package/dist/domain/registry/read-clear-requests.js +7 -5
  159. package/dist/domain/registry/read-clear-requests.js.map +1 -1
  160. package/dist/domain/registry/read-on-behalf.d.ts +20 -0
  161. package/dist/domain/registry/read-on-behalf.js +31 -0
  162. package/dist/domain/registry/read-on-behalf.js.map +1 -0
  163. package/dist/domain/registry/read-reach.d.ts +62 -0
  164. package/dist/domain/registry/read-reach.js +78 -0
  165. package/dist/domain/registry/read-reach.js.map +1 -0
  166. package/dist/domain/registry/recrew-ship.d.ts +3 -2
  167. package/dist/domain/registry/recrew-ship.js +6 -1
  168. package/dist/domain/registry/recrew-ship.js.map +1 -1
  169. package/dist/domain/registry/release-ship.d.ts +6 -3
  170. package/dist/domain/registry/release-ship.js +7 -7
  171. package/dist/domain/registry/release-ship.js.map +1 -1
  172. package/dist/domain/registry/remove-crew-request.d.ts +4 -3
  173. package/dist/domain/registry/remove-crew-request.js +6 -1
  174. package/dist/domain/registry/remove-crew-request.js.map +1 -1
  175. package/dist/domain/registry/rename-ship.d.ts +7 -5
  176. package/dist/domain/registry/rename-ship.js +9 -3
  177. package/dist/domain/registry/rename-ship.js.map +1 -1
  178. package/dist/domain/registry/request-crew.d.ts +5 -4
  179. package/dist/domain/registry/request-crew.js +6 -1
  180. package/dist/domain/registry/request-crew.js.map +1 -1
  181. package/dist/domain/registry/request-worktree-clear.d.ts +3 -2
  182. package/dist/domain/registry/request-worktree-clear.js +6 -1
  183. package/dist/domain/registry/request-worktree-clear.js.map +1 -1
  184. package/dist/domain/registry/retire-ship.d.ts +16 -7
  185. package/dist/domain/registry/retire-ship.js +46 -5
  186. package/dist/domain/registry/retire-ship.js.map +1 -1
  187. package/dist/domain/registry/scope-grant.d.ts +53 -0
  188. package/dist/domain/registry/scope-grant.js +74 -0
  189. package/dist/domain/registry/scope-grant.js.map +1 -0
  190. package/dist/domain/registry/scope-namespace.d.ts +68 -0
  191. package/dist/domain/registry/scope-namespace.js +82 -0
  192. package/dist/domain/registry/scope-namespace.js.map +1 -0
  193. package/dist/domain/registry/set-built-in-rule.d.ts +28 -0
  194. package/dist/domain/registry/set-built-in-rule.js +33 -0
  195. package/dist/domain/registry/set-built-in-rule.js.map +1 -0
  196. package/dist/domain/registry/set-network-rules.d.ts +3 -3
  197. package/dist/domain/registry/set-network-rules.js +2 -2
  198. package/dist/domain/registry/set-owner.d.ts +30 -0
  199. package/dist/domain/registry/set-owner.js +37 -0
  200. package/dist/domain/registry/set-owner.js.map +1 -0
  201. package/dist/domain/registry/set-statement.d.ts +27 -0
  202. package/dist/domain/registry/set-statement.js +28 -0
  203. package/dist/domain/registry/set-statement.js.map +1 -0
  204. package/dist/domain/registry/ship.d.ts +70 -10
  205. package/dist/domain/registry/ship.js +95 -10
  206. package/dist/domain/registry/ship.js.map +1 -1
  207. package/dist/domain/registry/statement.d.ts +32 -0
  208. package/dist/domain/registry/statement.js +39 -0
  209. package/dist/domain/registry/statement.js.map +1 -0
  210. package/dist/domain/registry/unassign-label.js +1 -1
  211. package/dist/domain/registry/unassign-label.js.map +1 -1
  212. package/dist/domain/registry/whoami.d.ts +5 -1
  213. package/dist/domain/registry/whoami.js +7 -4
  214. package/dist/domain/registry/whoami.js.map +1 -1
  215. package/dist/domain/shared/caller.d.ts +5 -2
  216. package/dist/domain/shared/caller.js.map +1 -1
  217. package/dist/domain/shared/errors.d.ts +1 -1
  218. package/dist/domain/shared/errors.js.map +1 -1
  219. package/dist/domain/shared/events-read.d.ts +16 -0
  220. package/dist/domain/shared/events-read.js +15 -0
  221. package/dist/domain/shared/events-read.js.map +1 -0
  222. package/dist/domain/shared/follow-fleet.d.ts +8 -2
  223. package/dist/domain/shared/follow-fleet.js +14 -4
  224. package/dist/domain/shared/follow-fleet.js.map +1 -1
  225. package/dist/domain/shared/health.d.ts +9 -2
  226. package/dist/domain/shared/health.js +9 -3
  227. package/dist/domain/shared/health.js.map +1 -1
  228. package/dist/domain/shared/history.d.ts +9 -42
  229. package/dist/domain/shared/history.js +9 -0
  230. package/dist/domain/shared/history.js.map +1 -1
  231. package/dist/domain/shared/read-fleet-events.d.ts +8 -2
  232. package/dist/domain/shared/read-fleet-events.js +10 -4
  233. package/dist/domain/shared/read-fleet-events.js.map +1 -1
  234. package/dist/domain/shared/read-health.d.ts +4 -1
  235. package/dist/domain/shared/read-health.js +7 -2
  236. package/dist/domain/shared/read-health.js.map +1 -1
  237. package/dist/domain/shared/read-inbox.d.ts +6 -3
  238. package/dist/domain/shared/read-inbox.js +14 -4
  239. package/dist/domain/shared/read-inbox.js.map +1 -1
  240. package/dist/domain/shared/read-message.d.ts +6 -2
  241. package/dist/domain/shared/read-message.js +6 -2
  242. package/dist/domain/shared/read-message.js.map +1 -1
  243. package/dist/domain/shared/read-needs-attention.d.ts +4 -1
  244. package/dist/domain/shared/read-needs-attention.js +8 -3
  245. package/dist/domain/shared/read-needs-attention.js.map +1 -1
  246. package/dist/domain/shared/read-ship-messages.d.ts +6 -2
  247. package/dist/domain/shared/read-ship-messages.js +7 -2
  248. package/dist/domain/shared/read-ship-messages.js.map +1 -1
  249. package/dist/domain/shared/read-ship-timeline.d.ts +5 -2
  250. package/dist/domain/shared/read-ship-timeline.js +11 -6
  251. package/dist/domain/shared/read-ship-timeline.js.map +1 -1
  252. package/dist/domain/shared/read-ship-way.d.ts +11 -4
  253. package/dist/domain/shared/read-ship-way.js +9 -2
  254. package/dist/domain/shared/read-ship-way.js.map +1 -1
  255. package/dist/domain/shared/stuck.d.ts +10 -1
  256. package/dist/domain/shared/stuck.js +1 -1
  257. package/dist/domain/shared/stuck.js.map +1 -1
  258. package/dist/wiring.d.ts +18 -4
  259. package/dist/wiring.js +37 -18
  260. package/dist/wiring.js.map +1 -1
  261. package/package.json +2 -2
  262. package/src/adapters/prisma/migrations/20261018100000_force_scope/migration.sql +8 -0
  263. package/src/adapters/prisma/migrations/20261018110000_forced_delivery/migration.sql +4 -0
  264. package/src/adapters/prisma/migrations/20261018120000_person_and_app_ships/migration.sql +3 -0
  265. package/src/adapters/prisma/migrations/20261018130000_owners/migration.sql +14 -0
  266. package/src/adapters/prisma/migrations/20261018140000_owners_on_reach_refusals/migration.sql +14 -0
  267. package/src/adapters/prisma/migrations/20261018150000_network_verbs/migration.sql +9 -0
  268. package/src/adapters/prisma/migrations/20261018160000_built_in_rules/migration.sql +13 -0
  269. package/src/adapters/prisma/migrations/20261018170000_network_rules_a_list/migration.sql +5 -0
  270. package/src/adapters/prisma/migrations/20261018180000_verb_on_reach_refusals/migration.sql +4 -0
  271. package/src/adapters/prisma/migrations/20261018200000_lease_statements/migration.sql +3 -0
  272. package/src/adapters/prisma/migrations/20261018210000_declare_and_grant_scopes/migration.sql +8 -0
  273. package/src/adapters/prisma/migrations/20261018220000_plugin_scopes/migration.sql +14 -0
  274. package/src/adapters/prisma/migrations/20261018230000_scope_namespaces/migration.sql +20 -0
  275. package/src/adapters/prisma/migrations/20261018240000_trierarch_plugin_crew_run/migration.sql +44 -0
  276. package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +66 -0
  277. package/src/adapters/prisma/migrations/20261019090000_reach_refusal_asked_by/migration.sql +2 -0
  278. package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +59 -0
  279. package/src/adapters/prisma/migrations/20261019110000_events_fleet_id_occurred_at/migration.sql +2 -0
  280. package/src/adapters/prisma/schema.prisma +47 -2
  281. package/dist/domain/shared/read-no-ship-can-take.d.ts +0 -13
  282. package/dist/domain/shared/read-no-ship-can-take.js +0 -12
  283. package/dist/domain/shared/read-no-ship-can-take.js.map +0 -1
  284. package/dist/domain/shared/read-overdue.d.ts +0 -13
  285. package/dist/domain/shared/read-overdue.js +0 -12
  286. package/dist/domain/shared/read-overdue.js.map +0 -1
@@ -1,16 +1,20 @@
1
1
  import { refuse } from './errors.js';
2
2
  import { deliveryWayOf } from './delivery-way.js';
3
+ import { readsMessage } from '../registry/public.js';
4
+ import { partiesOf } from './history.js';
3
5
  import { ok } from './result.js';
4
6
  /**
5
7
  * Use case: one message of the caller's fleet: its envelope, its whole
6
8
  * payload, its replies, and its delivery's way through: who holds it, since
7
9
  * when, the clocks that speak for it and every step newest first, from the
8
- * event log. The caller's scope (fleet:read) is checked before this runs.
10
+ * event log. A message outside the caller's read reach is answered as none,
11
+ * so its existence does not show (decision 0034). The caller's scope
12
+ * (fleet:read) is checked before this runs.
9
13
  */
10
14
  export function createReadMessage(deps) {
11
15
  return async (caller, { messageId }) => {
12
16
  const found = await deps.history.message(caller.fleetId, messageId);
13
- if (!found) {
17
+ if (!found || !readsMessage(await deps.readReach(caller), partiesOf(found, found.delivery.claimedBy))) {
14
18
  return refuse('MESSAGE_NOT_FOUND', `No message ${messageId} in this fleet`);
15
19
  }
16
20
  const { history, replies, lease, overdue, crew, ...message } = found;
@@ -1 +1 @@
1
- {"version":3,"file":"read-message.js","sourceRoot":"","sources":["../../../src/domain/shared/read-message.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAY9C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8B;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,mBAAmB,EAAE,cAAc,SAAS,gBAAgB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;QACrE,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-message.js","sourceRoot":"","sources":["../../../src/domain/shared/read-message.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAiF,MAAM,cAAc,CAAC;AACxH,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAY9C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsD;IACtF,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACtG,OAAO,MAAM,CAAC,mBAAmB,EAAE,cAAc,SAAS,gBAAgB,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;QACrE,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type ReadReachOf } from '../registry/public.js';
1
2
  import type { Caller } from './caller.js';
2
3
  import { type ShipHistory, type ShownNeedsAttentionEntry } from './history.js';
3
4
  export type ReadNeedsAttention = (caller: Caller) => Promise<ShownNeedsAttentionEntry[]>;
@@ -5,8 +6,10 @@ export type ReadNeedsAttention = (caller: Caller) => Promise<ShownNeedsAttention
5
6
  * Use case: Needs attention, every undeliverable or not handled delivery of
6
7
  * the caller's fleet, oldest first, each with its state and whole message,
7
8
  * telling whether it is a ping, for the operator to resend or dismiss. Abandoned deliveries are never listed: they stay in the
8
- * timelines only. The caller's scope (fleet:read) is checked before this runs.
9
+ * timelines only. Only the deliveries whose message the caller reads
10
+ * (decision 0034). The caller's scope (fleet:read) is checked before this runs.
9
11
  */
10
12
  export declare function createReadNeedsAttention(deps: {
11
13
  history: ShipHistory;
14
+ readReach: ReadReachOf;
12
15
  }): ReadNeedsAttention;
@@ -1,11 +1,16 @@
1
- import { withPing } from './history.js';
1
+ import { readsMessage } from '../registry/public.js';
2
+ import { partiesOf, withPing } from './history.js';
2
3
  /**
3
4
  * Use case: Needs attention, every undeliverable or not handled delivery of
4
5
  * the caller's fleet, oldest first, each with its state and whole message,
5
6
  * telling whether it is a ping, for the operator to resend or dismiss. Abandoned deliveries are never listed: they stay in the
6
- * timelines only. The caller's scope (fleet:read) is checked before this runs.
7
+ * timelines only. Only the deliveries whose message the caller reads
8
+ * (decision 0034). The caller's scope (fleet:read) is checked before this runs.
7
9
  */
8
10
  export function createReadNeedsAttention(deps) {
9
- return async (caller) => (await deps.history.needsAttention(caller.fleetId)).map((entry) => ({ ...entry, message: withPing(entry.message) }));
11
+ return async (caller) => {
12
+ const reach = await deps.readReach(caller);
13
+ return (await deps.history.needsAttention(caller.fleetId)).filter((entry) => readsMessage(reach, partiesOf(entry.message, entry.ship))).map((entry) => ({ ...entry, message: withPing(entry.message) }));
14
+ };
10
15
  }
11
16
  //# sourceMappingURL=read-needs-attention.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-needs-attention.js","sourceRoot":"","sources":["../../../src/domain/shared/read-needs-attention.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAmD,MAAM,cAAc,CAAC;AAIzF;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAChJ,CAAC"}
1
+ {"version":3,"file":"read-needs-attention.js","sourceRoot":"","sources":["../../../src/domain/shared/read-needs-attention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAmD,MAAM,cAAc,CAAC;AAIpG;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAsD;IAC7F,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3M,CAAC,CAAC;AACJ,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { ShipId } from '@aeolus-fleet/common';
2
2
  import type { Caller } from './caller.js';
3
3
  import { type DomainError } from './errors.js';
4
- import type { HistoryMessage, ShipHistory } from './history.js';
4
+ import { type ReadReachOf } from '../registry/public.js';
5
+ import { type HistoryMessage, type ShipHistory } from './history.js';
5
6
  import { type Result } from './result.js';
6
7
  /** The most messages the ship page lists: the newest ones. */
7
8
  export declare const MESSAGES_LIMIT = 200;
@@ -24,8 +25,11 @@ export declare function previewOf(payload: string): string;
24
25
  * Use case: the messages a ship sent, was sent, or claimed as a ship of their
25
26
  * type, newest first, each with its delivery as it stands. A message to a type
26
27
  * shows on the page of each ship that claimed it, never on every ship of the
27
- * type. The caller's scope (fleet:read) is checked before this runs.
28
+ * type. Only the messages the caller reads, through their sender or their
29
+ * recipient (decision 0034). The caller's scope (fleet:read) is checked
30
+ * before this runs.
28
31
  */
29
32
  export declare function createReadShipMessages(deps: {
30
33
  history: ShipHistory;
34
+ readReach: ReadReachOf;
31
35
  }): ReadShipMessages;
@@ -1,4 +1,6 @@
1
1
  import { refuse } from './errors.js';
2
+ import { readsMessage } from '../registry/public.js';
3
+ import { partiesOf } from './history.js';
2
4
  import { ok } from './result.js';
3
5
  /** The most messages the ship page lists: the newest ones. */
4
6
  export const MESSAGES_LIMIT = 200;
@@ -12,7 +14,9 @@ export function previewOf(payload) {
12
14
  * Use case: the messages a ship sent, was sent, or claimed as a ship of their
13
15
  * type, newest first, each with its delivery as it stands. A message to a type
14
16
  * shows on the page of each ship that claimed it, never on every ship of the
15
- * type. The caller's scope (fleet:read) is checked before this runs.
17
+ * type. Only the messages the caller reads, through their sender or their
18
+ * recipient (decision 0034). The caller's scope (fleet:read) is checked
19
+ * before this runs.
16
20
  */
17
21
  export function createReadShipMessages(deps) {
18
22
  return async (caller, { shipId }) => {
@@ -20,7 +24,8 @@ export function createReadShipMessages(deps) {
20
24
  if (!messages) {
21
25
  return refuse('SHIP_NOT_FOUND', `No ship ${shipId} in this fleet`);
22
26
  }
23
- return ok(messages.map(({ payload, delivery, ...message }) => ({
27
+ const reach = await deps.readReach(caller);
28
+ return ok(messages.filter((message) => readsMessage(reach, partiesOf(message, message.delivery.claimedBy))).map(({ payload, delivery, ...message }) => ({
24
29
  ...message,
25
30
  preview: previewOf(payload),
26
31
  delivery: {
@@ -1 +1 @@
1
- {"version":3,"file":"read-ship-messages.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-messages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAgBlC,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA8B;IACnE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,EAAE,CACP,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,GAAG,OAAO;YACV,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,QAAQ,EAAE;gBACR,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI;aAC1E;SACF,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-ship-messages.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-messages.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAyC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAgBlC,4EAA4E;AAC5E,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAsD;IAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAE,CACP,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5I,GAAG,OAAO;YACV,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,QAAQ,EAAE;gBACR,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,QAAQ,EAAE,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI;aAC1E;SACF,CAAC,CAAC,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { ShipId } from '@aeolus-fleet/common';
2
2
  import type { Caller } from './caller.js';
3
3
  import { type DomainError } from './errors.js';
4
+ import { type ReadReachOf } from '../registry/public.js';
4
5
  import { type ShipHistory, type ShownTimelineEntry } from './history.js';
5
6
  import { type Result } from './result.js';
6
7
  /** The most events a timeline shows: the newest ones. */
@@ -11,9 +12,11 @@ export type ReadShipTimeline = (caller: Caller, input: {
11
12
  /**
12
13
  * Use case: every change to a ship, newest first: the events naming it and
13
14
  * the ones it caused, such as the messages it sent, each message telling
14
- * whether it is a ping. The caller's scope (fleet:read) is checked before this
15
- * runs.
15
+ * whether it is a ping. Only the events the caller reads (decision 0034): a
16
+ * message's through the message, its ship standing for who claimed one to a
17
+ * type. The caller's scope (fleet:read) is checked before this runs.
16
18
  */
17
19
  export declare function createReadShipTimeline(deps: {
18
20
  history: ShipHistory;
21
+ readReach: ReadReachOf;
19
22
  }): ReadShipTimeline;
@@ -1,20 +1,25 @@
1
1
  import { refuse } from './errors.js';
2
- import { withPing } from './history.js';
2
+ import { readsEvent } from '../registry/public.js';
3
+ import { partiesOf, withPing } from './history.js';
3
4
  import { ok } from './result.js';
4
5
  /** The most events a timeline shows: the newest ones. */
5
6
  export const TIMELINE_LIMIT = 200;
6
7
  /**
7
8
  * Use case: every change to a ship, newest first: the events naming it and
8
9
  * the ones it caused, such as the messages it sent, each message telling
9
- * whether it is a ping. The caller's scope (fleet:read) is checked before this
10
- * runs.
10
+ * whether it is a ping. Only the events the caller reads (decision 0034): a
11
+ * message's through the message, its ship standing for who claimed one to a
12
+ * type. The caller's scope (fleet:read) is checked before this runs.
11
13
  */
12
14
  export function createReadShipTimeline(deps) {
13
15
  return async (caller, { shipId }) => {
14
16
  const timeline = await deps.history.timeline(caller.fleetId, { shipId, limit: TIMELINE_LIMIT });
15
- return timeline
16
- ? ok(timeline.map((entry) => ({ ...entry, message: entry.message === null ? null : withPing(entry.message) })))
17
- : refuse('SHIP_NOT_FOUND', `No ship ${shipId} in this fleet`);
17
+ if (!timeline) {
18
+ return refuse('SHIP_NOT_FOUND', `No ship ${shipId} in this fleet`);
19
+ }
20
+ const reach = await deps.readReach(caller);
21
+ const read = timeline.filter((entry) => readsEvent(reach, { type: entry.type, shipId: entry.ship?.id ?? null, message: entry.message && partiesOf(entry.message, entry.ship) }));
22
+ return ok(read.map((entry) => ({ ...entry, message: entry.message === null ? null : withPing(entry.message) })));
18
23
  };
19
24
  }
20
25
  //# sourceMappingURL=read-ship-timeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-ship-timeline.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-timeline.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,QAAQ,EAA6C,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAOlC;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA8B;IACnE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAChG,OAAO,QAAQ;YACb,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/G,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-ship-timeline.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-timeline.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,UAAU,EAAoB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA6C,MAAM,cAAc,CAAC;AAC9F,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAE9C,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAOlC;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAsD;IAC3F,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjL,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,12 @@
1
- import type { ComputerSide, DeliveryId, DeliveryState, MessageId, ShipId } from '@aeolus-fleet/common';
1
+ import type { ComputerSide, DeliveryId, DeliveryState, IdGenerator, MessageId, ShipId } from '@aeolus-fleet/common';
2
+ import { type CheckReadTx, type NotReachable } from '../registry/public.js';
2
3
  import type { Caller } from './caller.js';
4
+ import type { Clock } from './clock.js';
3
5
  import { type DeliveryWay, type WayLease } from './delivery-way.js';
4
6
  import { type DomainError } from './errors.js';
5
7
  import type { ShipHistory } from './history.js';
6
8
  import { type Result } from './result.js';
9
+ import type { UnitOfWork } from './unit-of-work.js';
7
10
  /** The ship's side of the way (#756): which part serves it, its turn, and what waits for it. */
8
11
  export interface ShipWay {
9
12
  /** The open lease's computer side (none: a pull lease) and its turn; null while no session crews the ship. */
@@ -28,14 +31,18 @@ export interface ShipWay {
28
31
  }
29
32
  export type ReadShipWay = (caller: Caller, input: {
30
33
  shipId: ShipId;
31
- }) => Promise<Result<ShipWay, DomainError<'SHIP_NOT_FOUND'>>>;
34
+ }) => Promise<Result<ShipWay, DomainError<'SHIP_NOT_FOUND'> | NotReachable>>;
32
35
  /**
33
36
  * Use case: one ship's side of the way: the trierarch or plugin watcher that
34
37
  * receives and hands over for its pushed lease, or none on a pull lease, the
35
38
  * turn its hooks reported, and its oldest delivery waiting, with its way, as
36
- * the clocks count it. The caller's scope (fleet:read) is checked before this
37
- * runs.
39
+ * the clocks count it. A ship outside the caller's read reach is refused,
40
+ * and the refusal recorded (decision 0034). The caller's scope (fleet:read) is
41
+ * checked before this runs.
38
42
  */
39
43
  export declare function createReadShipWay(deps: {
40
44
  history: ShipHistory;
45
+ uow: UnitOfWork<CheckReadTx>;
46
+ clock: Clock;
47
+ ids: IdGenerator;
41
48
  }): ReadShipWay;
@@ -1,3 +1,4 @@
1
+ import { checkRead } from '../registry/public.js';
1
2
  import { computerSideOf, deliveryWayOf } from './delivery-way.js';
2
3
  import { refuse } from './errors.js';
3
4
  import { ok } from './result.js';
@@ -5,8 +6,9 @@ import { ok } from './result.js';
5
6
  * Use case: one ship's side of the way: the trierarch or plugin watcher that
6
7
  * receives and hands over for its pushed lease, or none on a pull lease, the
7
8
  * turn its hooks reported, and its oldest delivery waiting, with its way, as
8
- * the clocks count it. The caller's scope (fleet:read) is checked before this
9
- * runs.
9
+ * the clocks count it. A ship outside the caller's read reach is refused,
10
+ * and the refusal recorded (decision 0034). The caller's scope (fleet:read) is
11
+ * checked before this runs.
10
12
  */
11
13
  export function createReadShipWay(deps) {
12
14
  return async (caller, { shipId }) => {
@@ -14,6 +16,11 @@ export function createReadShipWay(deps) {
14
16
  if (!found) {
15
17
  return refuse('SHIP_NOT_FOUND', `No ship ${shipId} in this fleet`);
16
18
  }
19
+ // A refused read commits its record, then refuses.
20
+ const checked = await deps.uow.run(async (tx) => ok(await checkRead({ tx, ids: deps.ids }, { fleetId: caller.fleetId, readerShipId: caller.shipId, askedBy: caller.askedBy ?? null, shipId, at: deps.clock.now() })));
21
+ if (checked.isOk && !checked.value.isOk) {
22
+ return checked.value;
23
+ }
17
24
  const { lease, waiting } = found;
18
25
  const [oldestId] = waiting;
19
26
  const oldest = oldestId === undefined ? undefined : await deps.history.message(caller.fleetId, oldestId);
@@ -1 +1 @@
1
- {"version":3,"file":"read-ship-way.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-way.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmC,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAmB9C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8B;IAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC/D,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC;oBACE,SAAS,EAAE,MAAM,CAAC,EAAE;oBACpB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE;wBACR,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;wBACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;wBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;wBAClC,GAAG,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC/I;iBACF;gBACH,CAAC,CAAC,IAAI;SACT,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"read-ship-way.js","sourceRoot":"","sources":["../../../src/domain/shared/read-ship-way.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAuC,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAmC,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAoB9C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA4F;IAC5H,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,mDAAmD;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAC9C,EAAE,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CACpK,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;YACR,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;YAC/D,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC;oBACE,SAAS,EAAE,MAAM,CAAC,EAAE;oBACpB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,QAAQ,EAAE;wBACR,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;wBACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;wBAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;wBAClC,GAAG,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC/I;iBACF;gBACH,CAAC,CAAC,IAAI;SACT,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -25,12 +25,17 @@ export interface StuckDelivery {
25
25
  /** When it entered the state it is stuck in. */
26
26
  since: Date;
27
27
  }
28
- /** A ship as the rule reads it over time; argo and the viewer ship are always crewed. */
28
+ /**
29
+ * A ship as the rule reads it over time; argo and the viewer ship are always
30
+ * crewed. A person ship awaiting crew is its person away, never stuck
31
+ * (decision 0044).
32
+ */
29
33
  export interface ShipRecord {
30
34
  shipId: ShipId;
31
35
  name: string;
32
36
  type: string;
33
37
  isAlwaysCrewed: boolean;
38
+ isPerson: boolean;
34
39
  commissionedAt: Date;
35
40
  retiredAt: Date | null;
36
41
  }
@@ -67,7 +72,11 @@ export declare function stateStepOf(event: Pick<FleetEvent, 'type' | 'occurredAt
67
72
  export interface DeliveryRecord {
68
73
  deliveryId: DeliveryId;
69
74
  messageId: MessageId;
75
+ /** Its message's sender, by which read reach reads it (decision 0034). */
76
+ senderId: ShipId;
70
77
  recipient: Recipient;
78
+ /** The ship that holds its claim, as the delivery records it; none while none does. */
79
+ claimedBy: ShipId | null;
71
80
  /** The ships of its type its sender could reach at send time; empty is every ship of the type (decision 0034). */
72
81
  reachableShipIds: readonly ShipId[];
73
82
  sentAt: Date;
@@ -121,7 +121,7 @@ class FleetAt {
121
121
  }
122
122
  const crewed = takers.filter((ship) => this.isCrewed(ship));
123
123
  if (crewed.length === 0) {
124
- return { cause: 'waitingForCrew', place: placeOf(delivery.recipient) };
124
+ return takers.some((ship) => ship.isPerson) ? undefined : { cause: 'waitingForCrew', place: placeOf(delivery.recipient) };
125
125
  }
126
126
  const leases = crewed.flatMap((ship) => this.leaseOf(ship.shipId) ?? []);
127
127
  const overdue = this.overdueOn({ state: 'pending', since }, leases);
@@ -1 +1 @@
1
- {"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/domain/shared/stuck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/domain/shared/stuck.ts"],"names":[],"mappings":"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"}
package/dist/wiring.d.ts CHANGED
@@ -38,14 +38,18 @@ import { type CommissionShip } from './domain/registry/commission-ship.js';
38
38
  import { type Deregister } from './domain/registry/deregister.js';
39
39
  import { type GetStartingPrompt } from './domain/registry/get-starting-prompt.js';
40
40
  import { type GetShip } from './domain/registry/get-ship.js';
41
+ import { type ReadOnBehalf } from './domain/registry/read-on-behalf.js';
41
42
  import { type InitialiseFleet } from './domain/registry/initialise-fleet.js';
42
43
  import { type ListFleet } from './domain/registry/list-fleet.js';
43
44
  import { type ListFleets } from './domain/registry/list-fleets.js';
44
45
  import { type RecrewShip } from './domain/registry/recrew-ship.js';
45
46
  import { type ReleaseShip } from './domain/registry/release-ship.js';
46
47
  import { type RenameShip } from './domain/registry/rename-ship.js';
48
+ import { type SetOwner } from './domain/registry/set-owner.js';
47
49
  import { type RetireShip } from './domain/registry/retire-ship.js';
48
50
  import { type Report } from './domain/registry/report.js';
51
+ import { type SetStatement } from './domain/registry/set-statement.js';
52
+ import { type Discover } from './domain/registry/discover.js';
49
53
  import { type ReportTurn } from './domain/registry/report-turn.js';
50
54
  import { type RequestCrew } from './domain/registry/request-crew.js';
51
55
  import { type RemoveCrewRequest } from './domain/registry/remove-crew-request.js';
@@ -58,6 +62,8 @@ import { type ConfirmWorktreeCleared } from './domain/registry/confirm-worktree-
58
62
  import { type ReadClearRequests } from './domain/registry/read-clear-requests.js';
59
63
  import { type RequestWorktreeClear } from './domain/registry/request-worktree-clear.js';
60
64
  import { type ExplainCrewRequest } from './domain/registry/explain-crew-request.js';
65
+ import { type DeclareScopes } from './domain/registry/declare-scopes.js';
66
+ import { type GrantScopes } from './domain/registry/grant-scopes.js';
61
67
  import { type DefineLabel } from './domain/registry/define-label.js';
62
68
  import { type ExplainReach } from './domain/registry/explain-reach.js';
63
69
  import { type ReadReachRefusals } from './domain/registry/read-reach-refusals.js';
@@ -65,11 +71,14 @@ import { type DeclareNetworkRules } from './domain/registry/declare-network-rule
65
71
  import { type ReadDeclaredNetworkRules } from './domain/registry/read-declared-network-rules.js';
66
72
  import { type RegisterNetworkPlugin } from './domain/registry/register-network-plugin.js';
67
73
  import { type SetNetworkRules } from './domain/registry/set-network-rules.js';
74
+ import { type ReadBuiltInRules } from './domain/registry/read-built-in-rules.js';
75
+ import { type SetBuiltInRule } from './domain/registry/set-built-in-rule.js';
68
76
  import { type UnregisterNetworkPlugin } from './domain/registry/unregister-network-plugin.js';
69
77
  import { type ChangeLabelValues } from './domain/registry/change-label-values.js';
70
78
  import { type AssignLabel } from './domain/registry/assign-label.js';
71
79
  import { type UnassignLabel } from './domain/registry/unassign-label.js';
72
80
  import { type ListLabels } from './domain/registry/list-labels.js';
81
+ import { type ListScopes } from './domain/registry/list-scopes.js';
73
82
  import { type DeleteLabel } from './domain/registry/delete-label.js';
74
83
  import { type FindLabelValue } from './domain/registry/find-label-value.js';
75
84
  import { type ReadReportLog } from './domain/registry/report-log.js';
@@ -92,9 +101,7 @@ import { type ReadInbox } from './domain/shared/read-inbox.js';
92
101
  import { type ReadMessage } from './domain/shared/read-message.js';
93
102
  import { type ReadShipWay } from './domain/shared/read-ship-way.js';
94
103
  import { type ReadNeedsAttention } from './domain/shared/read-needs-attention.js';
95
- import { type ReadNoShipCanTake } from './domain/shared/read-no-ship-can-take.js';
96
104
  import { type ReadHealth } from './domain/shared/read-health.js';
97
- import { type ReadOverdue } from './domain/shared/read-overdue.js';
98
105
  import { type ReadShipMessages } from './domain/shared/read-ship-messages.js';
99
106
  import { type ReadShipTimeline } from './domain/shared/read-ship-timeline.js';
100
107
  export interface UseCases {
@@ -106,12 +113,16 @@ export interface UseCases {
106
113
  releaseShip: ReleaseShip;
107
114
  retireShip: RetireShip;
108
115
  renameShip: RenameShip;
116
+ setOwner: SetOwner;
109
117
  recrewShip: RecrewShip;
110
118
  listFleet: ListFleet;
111
119
  getShip: GetShip;
120
+ readOnBehalf: ReadOnBehalf;
112
121
  claimShip: ClaimShip;
113
122
  whoami: Whoami;
114
123
  report: Report;
124
+ setStatement: SetStatement;
125
+ discover: Discover;
115
126
  reportTurn: ReportTurn;
116
127
  requestCrew: RequestCrew;
117
128
  removeCrewRequest: RemoveCrewRequest;
@@ -125,9 +136,14 @@ export interface UseCases {
125
136
  confirmWorktreeCleared: ConfirmWorktreeCleared;
126
137
  explainCrewRequest: ExplainCrewRequest;
127
138
  defineLabel: DefineLabel;
139
+ declareScopes: DeclareScopes;
140
+ grantScopes: GrantScopes;
141
+ listScopes: ListScopes;
128
142
  setNetworkRules: SetNetworkRules;
129
143
  registerNetworkPlugin: RegisterNetworkPlugin;
130
144
  unregisterNetworkPlugin: UnregisterNetworkPlugin;
145
+ setBuiltInRule: SetBuiltInRule;
146
+ readBuiltInRules: ReadBuiltInRules;
131
147
  readReachRefusals: ReadReachRefusals;
132
148
  declareNetworkRules: DeclareNetworkRules;
133
149
  readDeclaredNetworkRules: ReadDeclaredNetworkRules;
@@ -164,8 +180,6 @@ export interface UseCases {
164
180
  readMessage: ReadMessage;
165
181
  readShipWay: ReadShipWay;
166
182
  readNeedsAttention: ReadNeedsAttention;
167
- readOverdue: ReadOverdue;
168
- readNoShipCanTake: ReadNoShipCanTake;
169
183
  readHealth: ReadHealth;
170
184
  readInbox: ReadInbox;
171
185
  signIn: SignIn;
package/dist/wiring.js CHANGED
@@ -11,6 +11,7 @@ import { createPrismaGuideProgress, createPrismaNoticeDismissals, createPrismaOp
11
11
  import { createReceiverWakeups } from './adapters/prisma/receiver-wakeups.js';
12
12
  import { createPrismaFleetLimitReads, createPrismaGuideRepository, createPrismaInstallationFleets, createPrismaInstallationSettings, createPrismaNoticeRepository, } from './adapters/prisma/installation.js';
13
13
  import { createPrismaDeclaredNetworkRulesRepository, createPrismaReachRefusalRepository } from './adapters/prisma/network.js';
14
+ import { createPrismaScopeNamespaceRepository } from './adapters/prisma/scope-namespaces.js';
14
15
  import { createPrismaBulkUnitOfWork, createPrismaCallers, createPrismaUnitOfWork } from './adapters/prisma/unit-of-work.js';
15
16
  import { createAuthenticate } from './domain/identity/authenticate.js';
16
17
  import { createDismissNotice } from './domain/identity/dismiss-notice.js';
@@ -49,14 +50,19 @@ import { createCommissionShip } from './domain/registry/commission-ship.js';
49
50
  import { createDeregister } from './domain/registry/deregister.js';
50
51
  import { createGetStartingPrompt } from './domain/registry/get-starting-prompt.js';
51
52
  import { createGetShip } from './domain/registry/get-ship.js';
53
+ import { createReadOnBehalf } from './domain/registry/read-on-behalf.js';
52
54
  import { createInitialiseFleet } from './domain/registry/initialise-fleet.js';
53
55
  import { createListFleet } from './domain/registry/list-fleet.js';
56
+ import { createReadReachOf } from './domain/registry/read-reach.js';
54
57
  import { createListFleets } from './domain/registry/list-fleets.js';
55
58
  import { createRecrewShip } from './domain/registry/recrew-ship.js';
56
59
  import { createReleaseShip } from './domain/registry/release-ship.js';
57
60
  import { createRenameShip } from './domain/registry/rename-ship.js';
61
+ import { createSetOwner } from './domain/registry/set-owner.js';
58
62
  import { createRetireShip } from './domain/registry/retire-ship.js';
59
63
  import { createReport } from './domain/registry/report.js';
64
+ import { createSetStatement } from './domain/registry/set-statement.js';
65
+ import { createDiscover } from './domain/registry/discover.js';
60
66
  import { createReportTurn } from './domain/registry/report-turn.js';
61
67
  import { createRequestCrew } from './domain/registry/request-crew.js';
62
68
  import { createRemoveCrewRequest } from './domain/registry/remove-crew-request.js';
@@ -69,6 +75,8 @@ import { createConfirmWorktreeCleared } from './domain/registry/confirm-worktree
69
75
  import { createReadClearRequests } from './domain/registry/read-clear-requests.js';
70
76
  import { createRequestWorktreeClear } from './domain/registry/request-worktree-clear.js';
71
77
  import { createExplainCrewRequest } from './domain/registry/explain-crew-request.js';
78
+ import { createDeclareScopes } from './domain/registry/declare-scopes.js';
79
+ import { createGrantScopes } from './domain/registry/grant-scopes.js';
72
80
  import { createDefineLabel } from './domain/registry/define-label.js';
73
81
  import { createExplainReach } from './domain/registry/explain-reach.js';
74
82
  import { createReadReachRefusals } from './domain/registry/read-reach-refusals.js';
@@ -76,11 +84,14 @@ import { createDeclareNetworkRules } from './domain/registry/declare-network-rul
76
84
  import { createReadDeclaredNetworkRules } from './domain/registry/read-declared-network-rules.js';
77
85
  import { createRegisterNetworkPlugin } from './domain/registry/register-network-plugin.js';
78
86
  import { createSetNetworkRules } from './domain/registry/set-network-rules.js';
87
+ import { createReadBuiltInRules } from './domain/registry/read-built-in-rules.js';
88
+ import { createSetBuiltInRule } from './domain/registry/set-built-in-rule.js';
79
89
  import { createUnregisterNetworkPlugin } from './domain/registry/unregister-network-plugin.js';
80
90
  import { createChangeLabelValues } from './domain/registry/change-label-values.js';
81
91
  import { createAssignLabel } from './domain/registry/assign-label.js';
82
92
  import { createUnassignLabel } from './domain/registry/unassign-label.js';
83
93
  import { createListLabels } from './domain/registry/list-labels.js';
94
+ import { createListScopes } from './domain/registry/list-scopes.js';
84
95
  import { createDeleteLabel } from './domain/registry/delete-label.js';
85
96
  import { createFindLabelValue } from './domain/registry/find-label-value.js';
86
97
  import { createReadReportLog } from './domain/registry/report-log.js';
@@ -102,9 +113,7 @@ import { createReadInbox } from './domain/shared/read-inbox.js';
102
113
  import { createReadMessage } from './domain/shared/read-message.js';
103
114
  import { createReadShipWay } from './domain/shared/read-ship-way.js';
104
115
  import { createReadNeedsAttention } from './domain/shared/read-needs-attention.js';
105
- import { createReadNoShipCanTake } from './domain/shared/read-no-ship-can-take.js';
106
116
  import { createReadHealth } from './domain/shared/read-health.js';
107
- import { createReadOverdue } from './domain/shared/read-overdue.js';
108
117
  import { createReadShipMessages } from './domain/shared/read-ship-messages.js';
109
118
  import { createReadShipTimeline } from './domain/shared/read-ship-timeline.js';
110
119
  export const systemClock = { now: () => new Date() };
@@ -121,6 +130,7 @@ export function createUseCases(options) {
121
130
  const clock = options.clock ?? systemClock;
122
131
  const ids = options.ids ?? createIdGenerator();
123
132
  const uow = createPrismaUnitOfWork(prisma);
133
+ const readReach = createReadReachOf({ uow, clock });
124
134
  // A fleet delete and a retire grow with the fleet's history and the ship's pending deliveries.
125
135
  const bulkUow = createPrismaBulkUnitOfWork(prisma);
126
136
  const secrets = { hasher: sha256Hasher, random: cryptoRandomTokens };
@@ -167,12 +177,16 @@ export function createUseCases(options) {
167
177
  releaseShip: createReleaseShip({ uow, clock, ids }),
168
178
  retireShip: createRetireShip({ uow: bulkUow, clock, ids }),
169
179
  renameShip: createRenameShip({ uow, clock, ids }),
180
+ setOwner: createSetOwner({ uow, clock, ids }),
170
181
  recrewShip: createRecrewShip({ uow, clock, ids, secrets }),
171
- listFleet: createListFleet({ listing: createPrismaFleetListing(prisma) }),
172
- getShip: createGetShip({ listing: createPrismaFleetListing(prisma) }),
182
+ listFleet: createListFleet({ listing: createPrismaFleetListing(prisma), readReach }),
183
+ getShip: createGetShip({ listing: createPrismaFleetListing(prisma), readReach }),
184
+ readOnBehalf: createReadOnBehalf({ ships: createPrismaShipRepository(prisma) }),
173
185
  claimShip: createClaimShip({ uow, clock, ids, secrets }),
174
186
  whoami: createWhoami({ ships: createPrismaShipRepository(prisma) }),
175
187
  report: createReport({ uow, clock, ids }),
188
+ setStatement: createSetStatement({ uow, clock, ids }),
189
+ discover: createDiscover({ uow, clock }),
176
190
  reportTurn: createReportTurn({ uow, clock, ids }),
177
191
  requestCrew: createRequestCrew({ uow, clock, ids }),
178
192
  removeCrewRequest: createRemoveCrewRequest({ uow, clock, ids }),
@@ -180,15 +194,20 @@ export function createUseCases(options) {
180
194
  reportCrewStatus: createReportCrewStatus({ uow, clock, ids }),
181
195
  confirmCrewRelease: createConfirmCrewRelease({ uow, clock, ids }),
182
196
  giveBackCrewRequest: createGiveBackCrewRequest({ uow, clock, ids }),
183
- readAssignedCrewRequests: createReadAssignedCrewRequests({ crewRequests: createPrismaCrewRequestRepository(prisma) }),
197
+ readAssignedCrewRequests: createReadAssignedCrewRequests({ crewRequests: createPrismaCrewRequestRepository(prisma), ships: createPrismaShipRepository(prisma) }),
184
198
  explainCrewRequest: createExplainCrewRequest({ uow, clock, ids }),
185
199
  requestWorktreeClear: createRequestWorktreeClear({ uow, clock, ids }),
186
- readClearRequests: createReadClearRequests({ clearRequests: createPrismaClearRequestRepository(prisma) }),
200
+ readClearRequests: createReadClearRequests({ clearRequests: createPrismaClearRequestRepository(prisma), readReach }),
187
201
  confirmWorktreeCleared: createConfirmWorktreeCleared({ uow, clock, ids }),
188
202
  defineLabel: createDefineLabel({ uow, clock, ids }),
203
+ declareScopes: createDeclareScopes({ uow, clock, ids }),
204
+ grantScopes: createGrantScopes({ uow, clock, ids }),
205
+ listScopes: createListScopes({ scopeNamespaces: createPrismaScopeNamespaceRepository(prisma), ships: createPrismaShipRepository(prisma) }),
189
206
  setNetworkRules: createSetNetworkRules({ uow, clock, ids }),
190
207
  registerNetworkPlugin: createRegisterNetworkPlugin({ uow, clock, ids }),
191
208
  unregisterNetworkPlugin: createUnregisterNetworkPlugin({ uow, clock, ids }),
209
+ setBuiltInRule: createSetBuiltInRule({ uow, clock, ids }),
210
+ readBuiltInRules: createReadBuiltInRules({ uow }),
192
211
  readReachRefusals: createReadReachRefusals({ reachRefusals: createPrismaReachRefusalRepository(prisma) }),
193
212
  declareNetworkRules: createDeclareNetworkRules({ uow, clock, ids }),
194
213
  readDeclaredNetworkRules: createReadDeclaredNetworkRules({ declaredNetworkRules: createPrismaDeclaredNetworkRulesRepository(prisma) }),
@@ -224,26 +243,26 @@ export function createUseCases(options) {
224
243
  answerPing: createAnswerPing({ uow, clock, ids }),
225
244
  pingShip: createPingShip({ uow, clock, ids, hasher: sha256Hasher }),
226
245
  checkInbox: createCheckInbox({ uow, clock, wakeups }),
227
- dismissDelivery: createDismissDelivery({ uow, clock, ids }),
228
- resendDelivery: createResendDelivery({ uow, clock, ids, hasher: sha256Hasher }),
246
+ dismissDelivery: createDismissDelivery({ uow, clock, ids, readReach }),
247
+ resendDelivery: createResendDelivery({ uow, clock, ids, hasher: sha256Hasher, readReach }),
229
248
  markRead: createMarkRead({ uow, clock }),
230
249
  markDone: createMarkDone({ uow, clock, ids }),
231
250
  replyToMessage: createReplyToMessage({ uow, clock, ids, hasher: sha256Hasher }),
232
- readFleetEvents: createReadFleetEvents({ feed: createPrismaFleetEventFeed(prisma) }),
251
+ readFleetEvents: createReadFleetEvents({ feed: createPrismaFleetEventFeed(prisma), history: createPrismaShipHistory(prisma), readReach }),
233
252
  followFleet: createFollowFleet({
234
253
  feed: createPrismaFleetEventFeed(prisma),
235
254
  clock,
255
+ history: createPrismaShipHistory(prisma),
256
+ readReach,
236
257
  wakeups: options.fleetEventWakeups ?? fleetEventWakeupsOf(createFleetEventWakeups()),
237
258
  }),
238
- readShipTimeline: createReadShipTimeline({ history: createPrismaShipHistory(prisma) }),
239
- readShipMessages: createReadShipMessages({ history: createPrismaShipHistory(prisma) }),
240
- readMessage: createReadMessage({ history: createPrismaShipHistory(prisma) }),
241
- readShipWay: createReadShipWay({ history: createPrismaShipHistory(prisma) }),
242
- readNeedsAttention: createReadNeedsAttention({ history: createPrismaShipHistory(prisma) }),
243
- readOverdue: createReadOverdue({ history: createPrismaShipHistory(prisma) }),
244
- readNoShipCanTake: createReadNoShipCanTake({ history: createPrismaShipHistory(prisma) }),
245
- readHealth: createReadHealth({ health: createPrismaHealthRecords(prisma), clock }),
246
- readInbox: createReadInbox({ history: createPrismaShipHistory(prisma), ships: createPrismaShipRepository(prisma) }),
259
+ readShipTimeline: createReadShipTimeline({ history: createPrismaShipHistory(prisma), readReach }),
260
+ readShipMessages: createReadShipMessages({ history: createPrismaShipHistory(prisma), readReach }),
261
+ readMessage: createReadMessage({ history: createPrismaShipHistory(prisma), readReach }),
262
+ readShipWay: createReadShipWay({ history: createPrismaShipHistory(prisma), uow, clock, ids }),
263
+ readNeedsAttention: createReadNeedsAttention({ history: createPrismaShipHistory(prisma), readReach }),
264
+ readHealth: createReadHealth({ health: createPrismaHealthRecords(prisma), clock, readReach }),
265
+ readInbox: createReadInbox({ history: createPrismaShipHistory(prisma), ships: createPrismaShipRepository(prisma), readReach }),
247
266
  signIn: createSignIn({
248
267
  uow,
249
268
  accounts: createPrismaOperatorAccountLookup(prisma),