@aeolus-fleet/core 0.20.3 → 0.20.5

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 (126) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/http/server.d.ts +0 -2
  3. package/dist/adapters/http/server.js +4 -12
  4. package/dist/adapters/http/server.js.map +1 -1
  5. package/dist/adapters/prisma/client.d.ts +0 -2
  6. package/dist/adapters/prisma/client.js +0 -9
  7. package/dist/adapters/prisma/client.js.map +1 -1
  8. package/dist/adapters/prisma/generated/browser.d.ts +18 -0
  9. package/dist/adapters/prisma/generated/client.d.ts +18 -0
  10. package/dist/adapters/prisma/generated/internal/class.d.ts +22 -0
  11. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  12. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  13. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +174 -1
  14. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +22 -1
  15. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  16. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +23 -0
  17. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +22 -1
  18. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  19. package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +53 -1
  20. package/dist/adapters/prisma/generated/models/Delivery.d.ts +68 -1
  21. package/dist/adapters/prisma/generated/models/Fleet.d.ts +481 -0
  22. package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +1207 -0
  23. package/dist/adapters/prisma/generated/models/NetworkSettings.js +2 -0
  24. package/dist/adapters/prisma/generated/models/NetworkSettings.js.map +1 -0
  25. package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +1278 -0
  26. package/dist/adapters/prisma/generated/models/ReachRefusal.js +2 -0
  27. package/dist/adapters/prisma/generated/models/ReachRefusal.js.map +1 -0
  28. package/dist/adapters/prisma/generated/models.d.ts +2 -0
  29. package/dist/adapters/prisma/messaging.js +16 -2
  30. package/dist/adapters/prisma/messaging.js.map +1 -1
  31. package/dist/adapters/prisma/network.d.ts +4 -0
  32. package/dist/adapters/prisma/network.js +89 -0
  33. package/dist/adapters/prisma/network.js.map +1 -0
  34. package/dist/adapters/prisma/registry.js +16 -6
  35. package/dist/adapters/prisma/registry.js.map +1 -1
  36. package/dist/adapters/prisma/rows.d.ts +2 -0
  37. package/dist/adapters/prisma/rows.js +8 -1
  38. package/dist/adapters/prisma/rows.js.map +1 -1
  39. package/dist/adapters/prisma/unit-of-work.d.ts +3 -1
  40. package/dist/adapters/prisma/unit-of-work.js +3 -0
  41. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  42. package/dist/adapters/trpc/console.d.ts +1 -1
  43. package/dist/adapters/trpc/context.d.ts +8 -0
  44. package/dist/adapters/trpc/fleet.d.ts +88 -6
  45. package/dist/adapters/trpc/fleet.js +49 -1
  46. package/dist/adapters/trpc/fleet.js.map +1 -1
  47. package/dist/adapters/trpc/router.d.ts +85 -7
  48. package/dist/adapters/trpc/ship-contract.js +3 -0
  49. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  50. package/dist/adapters/trpc/ship-protocol.js +9 -8
  51. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  52. package/dist/adapters/trpc/trpc.js +4 -0
  53. package/dist/adapters/trpc/trpc.js.map +1 -1
  54. package/dist/app.js +1 -2
  55. package/dist/app.js.map +1 -1
  56. package/dist/domain/messaging/answer.d.ts +17 -0
  57. package/dist/domain/messaging/answer.js +16 -0
  58. package/dist/domain/messaging/answer.js.map +1 -0
  59. package/dist/domain/messaging/message.d.ts +10 -1
  60. package/dist/domain/messaging/message.js +4 -2
  61. package/dist/domain/messaging/message.js.map +1 -1
  62. package/dist/domain/messaging/ports.d.ts +2 -0
  63. package/dist/domain/messaging/resend-delivery.d.ts +11 -4
  64. package/dist/domain/messaging/resend-delivery.js +87 -62
  65. package/dist/domain/messaging/resend-delivery.js.map +1 -1
  66. package/dist/domain/messaging/send-message.d.ts +11 -4
  67. package/dist/domain/messaging/send-message.js +32 -6
  68. package/dist/domain/messaging/send-message.js.map +1 -1
  69. package/dist/domain/registry/check-reach.d.ts +48 -0
  70. package/dist/domain/registry/check-reach.js +89 -0
  71. package/dist/domain/registry/check-reach.js.map +1 -0
  72. package/dist/domain/registry/crew-request.d.ts +9 -3
  73. package/dist/domain/registry/crew-request.js +18 -6
  74. package/dist/domain/registry/crew-request.js.map +1 -1
  75. package/dist/domain/registry/get-ship.d.ts +3 -3
  76. package/dist/domain/registry/get-ship.js +2 -1
  77. package/dist/domain/registry/get-ship.js.map +1 -1
  78. package/dist/domain/registry/network-settings.d.ts +122 -0
  79. package/dist/domain/registry/network-settings.js +174 -0
  80. package/dist/domain/registry/network-settings.js.map +1 -0
  81. package/dist/domain/registry/ports.d.ts +28 -0
  82. package/dist/domain/registry/public.d.ts +1 -0
  83. package/dist/domain/registry/public.js +1 -0
  84. package/dist/domain/registry/public.js.map +1 -1
  85. package/dist/domain/registry/reach-refusal.d.ts +32 -0
  86. package/dist/domain/registry/reach-refusal.js +2 -0
  87. package/dist/domain/registry/reach-refusal.js.map +1 -0
  88. package/dist/domain/registry/read-reach-refusals.d.ts +14 -0
  89. package/dist/domain/registry/read-reach-refusals.js +17 -0
  90. package/dist/domain/registry/read-reach-refusals.js.map +1 -0
  91. package/dist/domain/registry/register-network-plugin.d.ts +28 -0
  92. package/dist/domain/registry/register-network-plugin.js +26 -0
  93. package/dist/domain/registry/register-network-plugin.js.map +1 -0
  94. package/dist/domain/registry/retire-ship.d.ts +7 -4
  95. package/dist/domain/registry/retire-ship.js +14 -3
  96. package/dist/domain/registry/retire-ship.js.map +1 -1
  97. package/dist/domain/registry/set-network-rules.d.ts +29 -0
  98. package/dist/domain/registry/set-network-rules.js +25 -0
  99. package/dist/domain/registry/set-network-rules.js.map +1 -0
  100. package/dist/domain/registry/ship-report.d.ts +5 -0
  101. package/dist/domain/registry/ship-report.js +3 -0
  102. package/dist/domain/registry/ship-report.js.map +1 -1
  103. package/dist/domain/registry/unregister-network-plugin.d.ts +27 -0
  104. package/dist/domain/registry/unregister-network-plugin.js +25 -0
  105. package/dist/domain/registry/unregister-network-plugin.js.map +1 -0
  106. package/dist/domain/shared/errors.d.ts +1 -1
  107. package/dist/domain/shared/errors.js.map +1 -1
  108. package/dist/domain/shared/history.d.ts +17 -0
  109. package/dist/domain/shared/history.js +4 -1
  110. package/dist/domain/shared/history.js.map +1 -1
  111. package/dist/domain/shared/read-needs-attention.d.ts +4 -4
  112. package/dist/domain/shared/read-needs-attention.js +4 -3
  113. package/dist/domain/shared/read-needs-attention.js.map +1 -1
  114. package/dist/domain/shared/read-ship-timeline.d.ts +5 -4
  115. package/dist/domain/shared/read-ship-timeline.js +7 -3
  116. package/dist/domain/shared/read-ship-timeline.js.map +1 -1
  117. package/dist/wiring.d.ts +8 -0
  118. package/dist/wiring.js +9 -0
  119. package/dist/wiring.js.map +1 -1
  120. package/package.json +2 -2
  121. package/src/adapters/prisma/migrations/20261009200000_network_scope/migration.sql +8 -0
  122. package/src/adapters/prisma/migrations/20261009210000_network_rules/migration.sql +31 -0
  123. package/src/adapters/prisma/migrations/20261009220000_type_delivery_reachable_ships/migration.sql +5 -0
  124. package/src/adapters/prisma/migrations/20261010070000_crew_request_is_final/migration.sql +7 -0
  125. package/src/adapters/prisma/migrations/20261010080000_network_plugin/migration.sql +21 -0
  126. package/src/adapters/prisma/schema.prisma +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-settings.js","sourceRoot":"","sources":["../../../src/domain/registry/network-settings.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import type { InstallationRequest } from './installation-request.js';
7
7
  import type { CarriedLabel, Label, ListedLabel, ShipLabel } from './label.js';
8
8
  import type { FleetLimitSettings, InstallationSettings } from './limits.js';
9
9
  import type { Lease, Location } from './lease.js';
10
+ import type { NetworkSettings } from './network-settings.js';
11
+ import type { ReachRefusal } from './reach-refusal.js';
10
12
  import type { Ship } from './ship.js';
11
13
  import type { ShipReport } from './ship-report.js';
12
14
  /** The crew a report speaks for: its ship and lease, in its fleet. */
@@ -108,6 +110,8 @@ export interface ShipRepository {
108
110
  findActiveByNameForShare(fleetId: FleetId, name: string): Promise<Ship | undefined>;
109
111
  /** Whether at least one ship of the fleet with this type is not retired and receives: the viewer ship receives nothing (decision 0022). */
110
112
  hasActiveShipOfType(fleetId: FleetId, type: string): Promise<boolean>;
113
+ /** The fleet's ships of the type that may take a type delivery: not retired, never the viewer ship. By id. */
114
+ listActiveOfType(fleetId: FleetId, type: string): Promise<Ship[]>;
111
115
  /** Gives the ship a new name. */
112
116
  rename(change: {
113
117
  fleetId: FleetId;
@@ -144,6 +148,12 @@ export interface LeaseRepository {
144
148
  leaseId: LeaseId;
145
149
  at: Date;
146
150
  }): Promise<void>;
151
+ /**
152
+ * When the crew of the ship's open lease last called the fleet (when it
153
+ * claimed the ship, before any call), read without a lock; undefined when
154
+ * the ship holds no lease.
155
+ */
156
+ findLastSeen(fleetId: FleetId, shipId: ShipId): Promise<Date | undefined>;
147
157
  /** The lease's report, the lease locked until the unit of work ends; undefined once it has ended. */
148
158
  findReportForUpdate(fleetId: FleetId, leaseId: LeaseId): Promise<{
149
159
  report: ShipReport | null;
@@ -202,6 +212,24 @@ export interface ClearRequestRepository {
202
212
  /** One trierarch's, oldest first. */
203
213
  listFor(fleetId: FleetId, trierarchShipId: ShipId): Promise<ClearRequest[]>;
204
214
  }
215
+ /**
216
+ * Outbound port: the fleet's network settings, one per fleet (decision 0034).
217
+ * A send holds them shared and a set holds them exclusively, so every send is
218
+ * checked against exactly one version.
219
+ */
220
+ export interface NetworkSettingsRepository {
221
+ /** The fleet's settings, held shared until the unit of work ends; none at version 0 when it never set rules. */
222
+ findForShare(fleetId: FleetId): Promise<NetworkSettings>;
223
+ /** The fleet's settings, held exclusively until the unit of work ends, even before the fleet first set rules. */
224
+ findForUpdate(fleetId: FleetId): Promise<NetworkSettings>;
225
+ save(settings: NetworkSettings): Promise<void>;
226
+ }
227
+ /** Outbound port: the records of the sends the fleet's network rules refused (decision 0034). */
228
+ export interface ReachRefusalRepository {
229
+ record(refusal: ReachRefusal): Promise<void>;
230
+ /** The fleet's latest refusals, newest first, at most `limit`. Read outside a unit of work. */
231
+ latest(fleetId: FleetId, limit: number): Promise<ReachRefusal[]>;
232
+ }
205
233
  /**
206
234
  * Outbound port: the fleet's labels, their values and the values its ships
207
235
  * carry, always within one fleet (decision 0031). A retired or deleted label
@@ -2,6 +2,7 @@ export { location, refuseEndedLease, type Lease, type LeaseEnded, type LeaseEndR
2
2
  export { endLease, holdLease, takeOverOperatorLease, type HoldLeaseTx, type LeaseTx } from './leases.js';
3
3
  export type { InFlightDeliveries, LeaseRepository, ShipRepository } from './ports.js';
4
4
  export { findPingableShip, type PingableShipTx, type UnpingableShip } from './pingable-ship.js';
5
+ export { checkReach, type CheckReachTx, type NotReachable } from './check-reach.js';
5
6
  export { resolveSelector, type ResolveSelectorTx, type UnresolvableSelector } from './resolve-selector.js';
6
7
  export { findOperatorShip, findShip, findViewerShip, type FindShipTx, type ShipTx } from './ships.js';
7
8
  export { OPERATOR_SHIP_NAME, type Ship } from './ship.js';
@@ -3,6 +3,7 @@
3
3
  export { location, refuseEndedLease } from './lease.js';
4
4
  export { endLease, holdLease, takeOverOperatorLease } from './leases.js';
5
5
  export { findPingableShip } from './pingable-ship.js';
6
+ export { checkReach } from './check-reach.js';
6
7
  export { resolveSelector } from './resolve-selector.js';
7
8
  export { findOperatorShip, findShip, findViewerShip } from './ships.js';
8
9
  export { OPERATOR_SHIP_NAME } from './ship.js';
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/domain/registry/public.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAmE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAkC,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,gBAAgB,EAA4C,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAqD,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/domain/registry/public.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAmE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAkC,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,gBAAgB,EAA4C,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAwC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAqD,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { FleetId, ReachRefusalId, ShipId, WhileUnavailable } from '@aeolus-fleet/common';
2
+ import type { CarriedLabel } from './label.js';
3
+ /** A ship as a refusal saw it: its id, its name and the label values it carried then, by key. */
4
+ export interface RefusedShip {
5
+ id: ShipId;
6
+ name: string;
7
+ labels: readonly CarriedLabel[];
8
+ }
9
+ /**
10
+ * The record of a send the network rules refused (decision 0034): who tried
11
+ * to reach whom, both ships as they were at that moment, so a later rename or
12
+ * relabelling keeps it true, and the version of the settings that refused it.
13
+ * Not an event: only argo reads it.
14
+ */
15
+ export interface ReachRefusal {
16
+ fleetId: FleetId;
17
+ id: ReachRefusalId;
18
+ at: Date;
19
+ sender: RefusedShip;
20
+ /** The ship it was for, or the type and each ship of it, none of which the sender may reach. */
21
+ recipient: {
22
+ kind: 'ship';
23
+ ship: RefusedShip;
24
+ } | {
25
+ kind: 'type';
26
+ type: string;
27
+ ships: readonly RefusedShip[];
28
+ };
29
+ settingsVersion: number;
30
+ /** What the networking plugin declared, when it refused while the plugin was not responding (decision 0035); null otherwise. */
31
+ whilePluginUnavailable: Exclude<WhileUnavailable, 'open-all'> | null;
32
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reach-refusal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach-refusal.js","sourceRoot":"","sources":["../../../src/domain/registry/reach-refusal.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { Caller } from '../shared/caller.js';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { ReachRefusalRepository } from './ports.js';
5
+ import type { ReachRefusal } from './reach-refusal.js';
6
+ export type ReadReachRefusals = (caller: Caller) => Promise<Result<ReachRefusal[], DomainError<'NOT_THE_OPERATOR_SHIP'>>>;
7
+ /**
8
+ * Use case: argo reads the sends the fleet's network rules refused, the
9
+ * latest first (decision 0034). Only argo: a ship that sets the rules does
10
+ * not read who tried to reach whom.
11
+ */
12
+ export declare function createReadReachRefusals(deps: {
13
+ reachRefusals: Pick<ReachRefusalRepository, 'latest'>;
14
+ }): ReadReachRefusals;
@@ -0,0 +1,17 @@
1
+ import { REACH_REFUSALS_READ_MAX } from '@aeolus-fleet/common';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ /**
5
+ * Use case: argo reads the sends the fleet's network rules refused, the
6
+ * latest first (decision 0034). Only argo: a ship that sets the rules does
7
+ * not read who tried to reach whom.
8
+ */
9
+ export function createReadReachRefusals(deps) {
10
+ return async (caller) => {
11
+ if (caller.kind !== 'operator') {
12
+ return refuse('NOT_THE_OPERATOR_SHIP', 'Only argo reads the reach refusals');
13
+ }
14
+ return ok(await deps.reachRefusals.latest(caller.fleetId, REACH_REFUSALS_READ_MAX));
15
+ };
16
+ }
17
+ //# sourceMappingURL=read-reach-refusals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-reach-refusals.js","sourceRoot":"","sources":["../../../src/domain/registry/read-reach-refusals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAMtD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAA+D;IACrG,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IdGenerator, NetworkPluginDeclaration } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type EventLog } from '../shared/events.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
7
+ import { type RegisterNetworkPluginRefusal } from './network-settings.js';
8
+ import type { NetworkSettingsRepository } from './ports.js';
9
+ export interface RegisterNetworkPluginTx {
10
+ networkSettings: Pick<NetworkSettingsRepository, 'findForUpdate' | 'save'>;
11
+ events: EventLog;
12
+ }
13
+ export type RegisterNetworkPlugin = (caller: Caller, input: NetworkPluginDeclaration) => Promise<Result<{
14
+ version: number;
15
+ }, RegisterNetworkPluginRefusal>>;
16
+ /**
17
+ * Use case: the caller's ship becomes the fleet's networking plugin, saying
18
+ * what happens to sends while it is unavailable and after how long without a
19
+ * call it is not responding (decision 0035). Its scope (fleet:network) is
20
+ * checked before this runs. In one unit of work, holding the settings
21
+ * exclusively as a set of rules does: the settings at their next version,
22
+ * and NetworkPluginRegistered.
23
+ */
24
+ export declare function createRegisterNetworkPlugin(deps: {
25
+ uow: UnitOfWork<RegisterNetworkPluginTx>;
26
+ clock: Clock;
27
+ ids: IdGenerator;
28
+ }): RegisterNetworkPlugin;
@@ -0,0 +1,26 @@
1
+ import { recordEvent, shipActor } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { registerNetworkPlugin } from './network-settings.js';
4
+ /**
5
+ * Use case: the caller's ship becomes the fleet's networking plugin, saying
6
+ * what happens to sends while it is unavailable and after how long without a
7
+ * call it is not responding (decision 0035). Its scope (fleet:network) is
8
+ * checked before this runs. In one unit of work, holding the settings
9
+ * exclusively as a set of rules does: the settings at their next version,
10
+ * and NetworkPluginRegistered.
11
+ */
12
+ export function createRegisterNetworkPlugin(deps) {
13
+ return (caller, declaration) => deps.uow.run(async (tx) => {
14
+ const current = await tx.networkSettings.findForUpdate(caller.fleetId);
15
+ const registered = registerNetworkPlugin(current, { shipId: caller.shipId, declaration, at: deps.clock.now(), actor: shipActor(caller.shipId) });
16
+ if (!registered.isOk) {
17
+ return registered;
18
+ }
19
+ await tx.networkSettings.save(registered.value.settings);
20
+ for (const event of registered.value.events) {
21
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
22
+ }
23
+ return ok({ version: registered.value.settings.version });
24
+ });
25
+ }
26
+ //# sourceMappingURL=register-network-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-network-plugin.js","sourceRoot":"","sources":["../../../src/domain/registry/register-network-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAqC,MAAM,uBAAuB,CAAC;AAUjG;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAkF;IAC5H,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAsE,EAAE;QAC5F,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACjJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5C,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -6,13 +6,14 @@ import { type DomainError } from '../shared/errors.js';
6
6
  import { type Result } from '../shared/result.js';
7
7
  import type { UnitOfWork } from '../shared/unit-of-work.js';
8
8
  import { type LeaseTx } from './leases.js';
9
- import type { ClearRequestRepository, CrewRequestRepository, LabelRepository, ShipRepository } from './ports.js';
9
+ import type { ClearRequestRepository, CrewRequestRepository, LabelRepository, NetworkSettingsRepository, ShipRepository } from './ports.js';
10
10
  import { type RetireRefusal } from './ship.js';
11
11
  export interface RetireShipTx extends LeaseTx, CredentialTx {
12
12
  ships: ShipRepository;
13
13
  crewRequests: CrewRequestRepository;
14
14
  clearRequests: ClearRequestRepository;
15
15
  labels: LabelRepository;
16
+ networkSettings: Pick<NetworkSettingsRepository, 'findForUpdate' | 'save'>;
16
17
  }
17
18
  export type RetireShipRefusal = DomainError<'SHIP_NOT_FOUND'> | RetireRefusal;
18
19
  export type RetireShip = (caller: Caller, input: {
@@ -33,13 +34,15 @@ export type RetireShip = (caller: Caller, input: {
33
34
  * and the labels it owns retire with it, each locked first and every
34
35
  * assignment of it gone first (decision 0031). A retired trierarch clears
35
36
  * nothing: its pending clear requests go, one WorktreeClearRemoved each
36
- * (decision 0032). The caller's scope
37
- * (fleet:manage) is checked before this runs.
37
+ * (decision 0032). A retired networking plugin unregisters, its rules going
38
+ * with it: all-to-all (decision 0035). The caller's scope (fleet:manage) is
39
+ * checked before this runs.
38
40
  *
39
41
  * It locks the ship first, as a release does (FOR NO KEY UPDATE). A send to
40
42
  * the ship holds it FOR SHARE while it resolves the selector, so the two
41
43
  * serialise: a send that commits first has its delivery abandoned here, and a
42
- * send after finds the ship retired and is refused.
44
+ * send after finds the ship retired and is refused. Then it holds the
45
+ * network settings exclusively, after the ship as every send takes them.
43
46
  */
44
47
  export declare function createRetireShip(deps: {
45
48
  uow: UnitOfWork<RetireShipTx>;
@@ -6,6 +6,7 @@ import { removeClearRequestsOf } from './clear-request.js';
6
6
  import { removeCrewRequest } from './crew-request.js';
7
7
  import { retireLabelsWith } from './label.js';
8
8
  import { endLease } from './leases.js';
9
+ import { unregisterNetworkPlugin } from './network-settings.js';
9
10
  import { checkCanRetire } from './ship.js';
10
11
  /**
11
12
  * Use case: the caller retires a ship of its fleet for good (Retire): any ship
@@ -20,13 +21,15 @@ import { checkCanRetire } from './ship.js';
20
21
  * and the labels it owns retire with it, each locked first and every
21
22
  * assignment of it gone first (decision 0031). A retired trierarch clears
22
23
  * nothing: its pending clear requests go, one WorktreeClearRemoved each
23
- * (decision 0032). The caller's scope
24
- * (fleet:manage) is checked before this runs.
24
+ * (decision 0032). A retired networking plugin unregisters, its rules going
25
+ * with it: all-to-all (decision 0035). The caller's scope (fleet:manage) is
26
+ * checked before this runs.
25
27
  *
26
28
  * It locks the ship first, as a release does (FOR NO KEY UPDATE). A send to
27
29
  * the ship holds it FOR SHARE while it resolves the selector, so the two
28
30
  * serialise: a send that commits first has its delivery abandoned here, and a
29
- * send after finds the ship retired and is refused.
31
+ * send after finds the ship retired and is refused. Then it holds the
32
+ * network settings exclusively, after the ship as every send takes them.
30
33
  */
31
34
  export function createRetireShip(deps) {
32
35
  return (caller, { shipId }) => deps.uow.run(async (tx) => {
@@ -87,6 +90,14 @@ export function createRetireShip(deps) {
87
90
  for (const event of labels.events) {
88
91
  await recordEvent(recorded, event);
89
92
  }
93
+ // Any ship but the fleet's networking plugin leaves the settings as they are.
94
+ const unregistered = unregisterNetworkPlugin(await tx.networkSettings.findForUpdate(fleetId), { shipId, at, actor });
95
+ if (unregistered.isOk) {
96
+ await tx.networkSettings.save(unregistered.value.settings);
97
+ for (const event of unregistered.value.events) {
98
+ await recordEvent(recorded, event);
99
+ }
100
+ }
90
101
  return ok({ abandonedDeliveries: abandoned.length });
91
102
  });
92
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"retire-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/retire-ship.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAgB,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,cAAc,EAAsB,MAAM,WAAW,CAAC;AAgB/D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAIhC;IACC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAuE,EAAE;QAC7F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,iBAAiB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtD,MAAM,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChF,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/C,MAAM,WAAW,CAAC,QAAQ,EAAE;YAC1B,OAAO;YACP,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,EAAE;YACd,KAAK;YACL,MAAM;YACN,OAAO,EAAE,EAAE,mBAAmB,EAAE,SAAS,CAAC,MAAM,EAAE;SACnD,CAAC,CAAC;QACH,KAAK,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,SAAS,EAAE,CAAC;YAClD,MAAM,WAAW,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5H,CAAC;QACD,mEAAmE;QACnE,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzC,MAAM,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvG,MAAM,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CACnJ,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CACnJ,CAAC;QACF,MAAM,MAAM,GAAG,gBAAgB,CAC7B,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EACtG,EAAE,EAAE,EAAE,KAAK,EAAE,CACd,CAAC;QACF,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,mBAAmB,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"retire-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/retire-ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { IdGenerator } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type EventLog } from '../shared/events.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
7
+ import { type NetworkRule, type SetNetworkRulesRefusal } from './network-settings.js';
8
+ import type { NetworkSettingsRepository } from './ports.js';
9
+ export interface SetNetworkRulesTx {
10
+ networkSettings: Pick<NetworkSettingsRepository, 'findForUpdate' | 'save'>;
11
+ events: EventLog;
12
+ }
13
+ export type SetNetworkRules = (caller: Caller, input: {
14
+ rules: readonly NetworkRule[] | null;
15
+ }) => Promise<Result<{
16
+ version: number;
17
+ }, SetNetworkRulesRefusal>>;
18
+ /**
19
+ * Use case: the caller sets the fleet's network rules, the whole list, or
20
+ * none for all-to-all (decision 0034). Its scope (fleet:network, which argo
21
+ * holds) is checked before this runs. In one unit of work, holding the
22
+ * settings exclusively so no send is checked halfway: the settings at their
23
+ * next version, and NetworkRulesSet.
24
+ */
25
+ export declare function createSetNetworkRules(deps: {
26
+ uow: UnitOfWork<SetNetworkRulesTx>;
27
+ clock: Clock;
28
+ ids: IdGenerator;
29
+ }): SetNetworkRules;
@@ -0,0 +1,25 @@
1
+ import { recordEvent, shipActor } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { setNetworkRules } from './network-settings.js';
4
+ /**
5
+ * Use case: the caller sets the fleet's network rules, the whole list, or
6
+ * none for all-to-all (decision 0034). Its scope (fleet:network, which argo
7
+ * holds) is checked before this runs. In one unit of work, holding the
8
+ * settings exclusively so no send is checked halfway: the settings at their
9
+ * next version, and NetworkRulesSet.
10
+ */
11
+ export function createSetNetworkRules(deps) {
12
+ return (caller, input) => deps.uow.run(async (tx) => {
13
+ const current = await tx.networkSettings.findForUpdate(caller.fleetId);
14
+ const set = setNetworkRules(current, { rules: input.rules, shipId: caller.shipId, at: deps.clock.now(), actor: shipActor(caller.shipId) });
15
+ if (!set.isOk) {
16
+ return set;
17
+ }
18
+ await tx.networkSettings.save(set.value.settings);
19
+ for (const event of set.value.events) {
20
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
21
+ }
22
+ return ok({ version: set.value.settings.version });
23
+ });
24
+ }
25
+ //# sourceMappingURL=set-network-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/set-network-rules.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAiD,MAAM,uBAAuB,CAAC;AAUvG;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA4E;IAChH,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAgE,EAAE;QACtF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3I,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -19,6 +19,11 @@ export interface ShipReport {
19
19
  /** Moves by one each time the details change, clearing included; 0 before any. */
20
20
  detailsVersion: number;
21
21
  }
22
+ /** A report as one ship's page reads it: with the size of its details, counted as their limit counts them; null without details. */
23
+ export type ShownReport = ShipReport & {
24
+ detailsBytes: number | null;
25
+ };
26
+ export declare function shownReportOf(report: ShipReport): ShownReport;
22
27
  export type ReportRefusal = DomainError<'INVALID_REPORT_STATE' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_DETAILS' | 'REPORT_DETAILS_TOO_LARGE'>;
23
28
  /** What a report does to the details: sets them whole (null clears them), or applies a JSON Merge Patch to them. Left out, they stay. */
24
29
  export interface DetailsInput {
@@ -3,6 +3,9 @@ import { refuse } from '../shared/errors.js';
3
3
  import { shipActor } from '../shared/events.js';
4
4
  import { ok } from '../shared/result.js';
5
5
  import { isSameJson, mergePatch } from './report-details.js';
6
+ export function shownReportOf(report) {
7
+ return { ...report, detailsBytes: report.details === null ? null : reportDetailsBytes(report.details) };
8
+ }
6
9
  /** The details after a report: set whole, merge-patched or kept, and at most 16 KB (decision 0028). */
7
10
  function detailsAfter(current, input) {
8
11
  if (input.details !== undefined && input.detailsPatch !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"ship-report.js","sourceRoot":"","sources":["../../../src/domain/registry/ship-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship-report.js","sourceRoot":"","sources":["../../../src/domain/registry/ship-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { IdGenerator } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type EventLog } from '../shared/events.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
7
+ import { type NotTheNetworkPlugin } from './network-settings.js';
8
+ import type { NetworkSettingsRepository } from './ports.js';
9
+ export interface UnregisterNetworkPluginTx {
10
+ networkSettings: Pick<NetworkSettingsRepository, 'findForUpdate' | 'save'>;
11
+ events: EventLog;
12
+ }
13
+ export type UnregisterNetworkPlugin = (caller: Caller) => Promise<Result<{
14
+ version: number;
15
+ }, NotTheNetworkPlugin>>;
16
+ /**
17
+ * Use case: the fleet's networking plugin unregisters, as it does when it is
18
+ * switched off or deleted for the fleet (decision 0035): no plugin and no
19
+ * rules, all-to-all. Its scope (fleet:network) is checked before this runs.
20
+ * In one unit of work, holding the settings exclusively: the settings at
21
+ * their next version, and NetworkPluginUnregistered.
22
+ */
23
+ export declare function createUnregisterNetworkPlugin(deps: {
24
+ uow: UnitOfWork<UnregisterNetworkPluginTx>;
25
+ clock: Clock;
26
+ ids: IdGenerator;
27
+ }): UnregisterNetworkPlugin;
@@ -0,0 +1,25 @@
1
+ import { recordEvent, shipActor } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { unregisterNetworkPlugin } from './network-settings.js';
4
+ /**
5
+ * Use case: the fleet's networking plugin unregisters, as it does when it is
6
+ * switched off or deleted for the fleet (decision 0035): no plugin and no
7
+ * rules, all-to-all. Its scope (fleet:network) is checked before this runs.
8
+ * In one unit of work, holding the settings exclusively: the settings at
9
+ * their next version, and NetworkPluginUnregistered.
10
+ */
11
+ export function createUnregisterNetworkPlugin(deps) {
12
+ return (caller) => deps.uow.run(async (tx) => {
13
+ const current = await tx.networkSettings.findForUpdate(caller.fleetId);
14
+ const unregistered = unregisterNetworkPlugin(current, { shipId: caller.shipId, at: deps.clock.now(), actor: shipActor(caller.shipId) });
15
+ if (!unregistered.isOk) {
16
+ return unregistered;
17
+ }
18
+ await tx.networkSettings.save(unregistered.value.settings);
19
+ for (const event of unregistered.value.events) {
20
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
21
+ }
22
+ return ok({ version: unregistered.value.settings.version });
23
+ });
24
+ }
25
+ //# sourceMappingURL=unregister-network-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregister-network-plugin.js","sourceRoot":"","sources":["../../../src/domain/registry/unregister-network-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAA4B,MAAM,uBAAuB,CAAC;AAU1F;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAoF;IAChI,OAAO,CAAC,MAAM,EAAE,EAAE,CAChB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA6D,EAAE;QACnF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,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_TOO_LARGE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | '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_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_ON_OWN_SHIP' | 'LABEL_VALUE_CARRIED' | 'LABEL_VALUE_NOT_FOUND' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NOT_A_TRIERARCH' | 'NOT_THE_LABEL_OWNER' | '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' | '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_TOO_LARGE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | '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_ON_OWN_SHIP' | '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';
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;AAoG5C,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;AAwG5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -39,6 +39,23 @@ export interface TimelineEntry {
39
39
  } | null;
40
40
  details: EventDetails;
41
41
  }
42
+ /** A message as a read shows it: whether it is a ping, told by its content type, so no reader repeats that rule. */
43
+ export type WithPing<T extends {
44
+ contentType: string;
45
+ }> = T & {
46
+ isPing: boolean;
47
+ };
48
+ export declare function withPing<T extends {
49
+ contentType: string;
50
+ }>(message: T): WithPing<T>;
51
+ /** A timeline entry as the read answers it, its message telling whether it is a ping. */
52
+ export type ShownTimelineEntry = Omit<TimelineEntry, 'message'> & {
53
+ message: WithPing<NonNullable<TimelineEntry['message']>> | null;
54
+ };
55
+ /** An undeliverable delivery as Needs attention answers it, its message telling whether it is a ping. */
56
+ export type ShownUndeliverableEntry = Omit<UndeliverableEntry, 'message'> & {
57
+ message: WithPing<UndeliverableEntry['message']>;
58
+ };
42
59
  /** One message with its delivery as it stands. */
43
60
  export interface HistoryMessage {
44
61
  id: MessageId;
@@ -1,4 +1,7 @@
1
- import { DELIVERY_HISTORY_TYPES, } from '@aeolus-fleet/common';
1
+ import { DELIVERY_HISTORY_TYPES, isPingContentType, } from '@aeolus-fleet/common';
2
+ export function withPing(message) {
3
+ return { ...message, isPing: isPingContentType(message.contentType) };
4
+ }
2
5
  export function isDeliveryChangeType(type) {
3
6
  return DELIVERY_HISTORY_TYPES.some((change) => change === type);
4
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GASvB,MAAM,sBAAsB,CAAC;AAoD9B,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AAoCD,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,KAAoB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC;QACtD,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/domain/shared/history.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GASlB,MAAM,sBAAsB,CAAC;AAsC9B,MAAM,UAAU,QAAQ,CAAoC,OAAU;IACpE,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;AACxE,CAAC;AAyBD,MAAM,UAAU,oBAAoB,CAAC,IAAe;IAClD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;AAClE,CAAC;AAoCD,+FAA+F;AAC/F,MAAM,UAAU,QAAQ,CAAC,MAAmB,EAAE,KAAoB;IAChE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC;QACtD,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,cAAc,CAAC;QAClC,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import type { Caller } from './caller.js';
2
- import type { ShipHistory, UndeliverableEntry } from './history.js';
3
- export type ReadNeedsAttention = (caller: Caller) => Promise<UndeliverableEntry[]>;
2
+ import { type ShipHistory, type ShownUndeliverableEntry } from './history.js';
3
+ export type ReadNeedsAttention = (caller: Caller) => Promise<ShownUndeliverableEntry[]>;
4
4
  /**
5
5
  * Use case: Needs attention, every undeliverable delivery of the caller's
6
- * fleet, oldest first, each with its whole message, for the operator to
7
- * resend or dismiss. Abandoned deliveries are never listed: they stay in the
6
+ * fleet, oldest first, each with its whole message, telling whether it is a
7
+ * ping, for the operator to resend or dismiss. Abandoned deliveries are never listed: they stay in the
8
8
  * timelines only. The caller's scope (fleet:read) is checked before this runs.
9
9
  */
10
10
  export declare function createReadNeedsAttention(deps: {
@@ -1,10 +1,11 @@
1
+ import { withPing } from './history.js';
1
2
  /**
2
3
  * Use case: Needs attention, every undeliverable delivery of the caller's
3
- * fleet, oldest first, each with its whole message, for the operator to
4
- * resend or dismiss. Abandoned deliveries are never listed: they stay in the
4
+ * fleet, oldest first, each with its whole message, telling whether it is a
5
+ * ping, for the operator to resend or dismiss. Abandoned deliveries are never listed: they stay in the
5
6
  * timelines only. The caller's scope (fleet:read) is checked before this runs.
6
7
  */
7
8
  export function createReadNeedsAttention(deps) {
8
- return (caller) => deps.history.undeliverable(caller.fleetId);
9
+ return async (caller) => (await deps.history.undeliverable(caller.fleetId)).map((entry) => ({ ...entry, message: withPing(entry.message) }));
9
10
  }
10
11
  //# 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":"AAKA;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"read-needs-attention.js","sourceRoot":"","sources":["../../../src/domain/shared/read-needs-attention.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;AAIxF;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA8B;IACrE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,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;AAC/I,CAAC"}