@aeolus-fleet/core 0.20.2 → 0.20.4
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.
- package/README.md +1 -1
- package/dist/adapters/http/server.d.ts +0 -2
- package/dist/adapters/http/server.js +4 -12
- package/dist/adapters/http/server.js.map +1 -1
- package/dist/adapters/prisma/client.d.ts +0 -2
- package/dist/adapters/prisma/client.js +0 -9
- package/dist/adapters/prisma/client.js.map +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +23 -0
- package/dist/adapters/prisma/generated/client.d.ts +23 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +33 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +254 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +25 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +28 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +25 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +149 -0
- package/dist/adapters/prisma/generated/models/CrewRequestGiveBack.d.ts +1468 -0
- package/dist/adapters/prisma/generated/models/CrewRequestGiveBack.js +2 -0
- package/dist/adapters/prisma/generated/models/CrewRequestGiveBack.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Delivery.d.ts +68 -1
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +716 -0
- package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +1101 -0
- package/dist/adapters/prisma/generated/models/NetworkSettings.js +2 -0
- package/dist/adapters/prisma/generated/models/NetworkSettings.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +1239 -0
- package/dist/adapters/prisma/generated/models/ReachRefusal.js +2 -0
- package/dist/adapters/prisma/generated/models/ReachRefusal.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Ship.d.ts +255 -0
- package/dist/adapters/prisma/generated/models.d.ts +3 -0
- package/dist/adapters/prisma/messaging.js +16 -2
- package/dist/adapters/prisma/messaging.js.map +1 -1
- package/dist/adapters/prisma/network.d.ts +4 -0
- package/dist/adapters/prisma/network.js +69 -0
- package/dist/adapters/prisma/network.js.map +1 -0
- package/dist/adapters/prisma/registry.js +20 -5
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/rows.js +10 -1
- package/dist/adapters/prisma/rows.js.map +1 -1
- package/dist/adapters/prisma/unit-of-work.d.ts +3 -1
- package/dist/adapters/prisma/unit-of-work.js +3 -0
- package/dist/adapters/prisma/unit-of-work.js.map +1 -1
- package/dist/adapters/trpc/console.d.ts +1 -1
- package/dist/adapters/trpc/context.d.ts +6 -0
- package/dist/adapters/trpc/fleet.d.ts +96 -6
- package/dist/adapters/trpc/fleet.js +46 -3
- package/dist/adapters/trpc/fleet.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +94 -7
- package/dist/adapters/trpc/ship-contract.js +2 -0
- package/dist/adapters/trpc/ship-contract.js.map +1 -1
- package/dist/adapters/trpc/ship-protocol.js +9 -8
- package/dist/adapters/trpc/ship-protocol.js.map +1 -1
- package/dist/adapters/trpc/trpc.js +4 -0
- package/dist/adapters/trpc/trpc.js.map +1 -1
- package/dist/app.js +1 -2
- package/dist/app.js.map +1 -1
- package/dist/domain/messaging/answer.d.ts +17 -0
- package/dist/domain/messaging/answer.js +16 -0
- package/dist/domain/messaging/answer.js.map +1 -0
- package/dist/domain/messaging/message.d.ts +10 -1
- package/dist/domain/messaging/message.js +4 -2
- package/dist/domain/messaging/message.js.map +1 -1
- package/dist/domain/messaging/ports.d.ts +2 -0
- package/dist/domain/messaging/resend-delivery.d.ts +11 -4
- package/dist/domain/messaging/resend-delivery.js +87 -62
- package/dist/domain/messaging/resend-delivery.js.map +1 -1
- package/dist/domain/messaging/send-message.d.ts +11 -4
- package/dist/domain/messaging/send-message.js +32 -6
- package/dist/domain/messaging/send-message.js.map +1 -1
- package/dist/domain/registry/check-reach.d.ts +44 -0
- package/dist/domain/registry/check-reach.js +75 -0
- package/dist/domain/registry/check-reach.js.map +1 -0
- package/dist/domain/registry/crew-request.d.ts +32 -0
- package/dist/domain/registry/crew-request.js +53 -0
- package/dist/domain/registry/crew-request.js.map +1 -1
- package/dist/domain/registry/get-ship.d.ts +3 -3
- package/dist/domain/registry/get-ship.js +2 -1
- package/dist/domain/registry/get-ship.js.map +1 -1
- package/dist/domain/registry/give-back-crew-request.d.ts +35 -0
- package/dist/domain/registry/give-back-crew-request.js +44 -0
- package/dist/domain/registry/give-back-crew-request.js.map +1 -0
- package/dist/domain/registry/list-fleet.d.ts +3 -1
- package/dist/domain/registry/list-fleet.js +2 -1
- package/dist/domain/registry/list-fleet.js.map +1 -1
- package/dist/domain/registry/network-settings.d.ts +58 -0
- package/dist/domain/registry/network-settings.js +81 -0
- package/dist/domain/registry/network-settings.js.map +1 -0
- package/dist/domain/registry/ports.d.ts +32 -0
- package/dist/domain/registry/public.d.ts +1 -0
- package/dist/domain/registry/public.js +1 -0
- package/dist/domain/registry/public.js.map +1 -1
- package/dist/domain/registry/reach-refusal.d.ts +30 -0
- package/dist/domain/registry/reach-refusal.js +2 -0
- package/dist/domain/registry/reach-refusal.js.map +1 -0
- package/dist/domain/registry/read-reach-refusals.d.ts +14 -0
- package/dist/domain/registry/read-reach-refusals.js +17 -0
- package/dist/domain/registry/read-reach-refusals.js.map +1 -0
- package/dist/domain/registry/set-network-rules.d.ts +29 -0
- package/dist/domain/registry/set-network-rules.js +25 -0
- package/dist/domain/registry/set-network-rules.js.map +1 -0
- package/dist/domain/registry/ship-report.d.ts +5 -0
- package/dist/domain/registry/ship-report.js +3 -0
- package/dist/domain/registry/ship-report.js.map +1 -1
- package/dist/domain/shared/errors.d.ts +1 -1
- package/dist/domain/shared/errors.js.map +1 -1
- package/dist/domain/shared/history.d.ts +17 -0
- package/dist/domain/shared/history.js +4 -1
- package/dist/domain/shared/history.js.map +1 -1
- package/dist/domain/shared/read-needs-attention.d.ts +4 -4
- package/dist/domain/shared/read-needs-attention.js +4 -3
- package/dist/domain/shared/read-needs-attention.js.map +1 -1
- package/dist/domain/shared/read-ship-timeline.d.ts +5 -4
- package/dist/domain/shared/read-ship-timeline.js +7 -3
- package/dist/domain/shared/read-ship-timeline.js.map +1 -1
- package/dist/wiring.d.ts +6 -0
- package/dist/wiring.js +7 -0
- package/dist/wiring.js.map +1 -1
- package/package.json +2 -2
- package/src/adapters/prisma/migrations/20261009090000_crew_request_give_backs/migration.sql +26 -0
- package/src/adapters/prisma/migrations/20261009200000_network_scope/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261009210000_network_rules/migration.sql +31 -0
- package/src/adapters/prisma/migrations/20261009220000_type_delivery_reachable_ships/migration.sql +5 -0
- package/src/adapters/prisma/schema.prisma +59 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fleet's network settings (decision 0034): which ships may send to
|
|
3
|
+
* which. A rule says that the ships matching one label selector may send to
|
|
4
|
+
* the ships matching another; allow-only, no deny rules, no precedence. A
|
|
5
|
+
* fleet holds its rules, or none (all-to-all), with a version that moves on
|
|
6
|
+
* every set, so a refusal names the settings that refused it.
|
|
7
|
+
*/
|
|
8
|
+
import { NETWORK_RULES_MAX, SHIP_LABELS_MAX } from '@aeolus-fleet/common';
|
|
9
|
+
import { refuse } from '../shared/errors.js';
|
|
10
|
+
import { ok } from '../shared/result.js';
|
|
11
|
+
/** A fleet that never set rules: none, at version 0. */
|
|
12
|
+
export function noNetworkSettings(fleetId) {
|
|
13
|
+
return { fleetId, rules: null, version: 0 };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The fleet's rules from now on, replacing the ones it had, at the next
|
|
17
|
+
* version, with NetworkRulesSet. The rules are within the decision's limits:
|
|
18
|
+
* at most 200, each selector at most 20 label values, as a ship carries no
|
|
19
|
+
* more, each once. A value id need not exist: an unknown one matches no ship,
|
|
20
|
+
* as in label selection.
|
|
21
|
+
*/
|
|
22
|
+
export function setNetworkRules(current, change) {
|
|
23
|
+
const { rules } = change;
|
|
24
|
+
if (rules !== null) {
|
|
25
|
+
const invalid = invalidRules(rules);
|
|
26
|
+
if (invalid !== undefined) {
|
|
27
|
+
return refuse('INVALID_NETWORK_RULES', `${invalid} (decision 0034)`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const settings = { fleetId: current.fleetId, rules: rules?.map(copyOfRule) ?? null, version: current.version + 1 };
|
|
31
|
+
return ok({
|
|
32
|
+
settings,
|
|
33
|
+
events: [
|
|
34
|
+
{
|
|
35
|
+
type: 'NetworkRulesSet',
|
|
36
|
+
fleetId: current.fleetId,
|
|
37
|
+
occurredAt: change.at,
|
|
38
|
+
actor: change.actor,
|
|
39
|
+
details: { version: settings.version, rules: rules?.length ?? null },
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** What breaks the limits, said for the caller, or undefined when the rules keep them. */
|
|
45
|
+
function invalidRules(rules) {
|
|
46
|
+
if (rules.length > NETWORK_RULES_MAX) {
|
|
47
|
+
return `A fleet holds at most ${String(NETWORK_RULES_MAX)} network rules`;
|
|
48
|
+
}
|
|
49
|
+
for (const selector of rules.flatMap((rule) => [rule.from, rule.to])) {
|
|
50
|
+
if (selector.length > SHIP_LABELS_MAX) {
|
|
51
|
+
return `A selector holds at most ${String(SHIP_LABELS_MAX)} label values, as a ship carries no more`;
|
|
52
|
+
}
|
|
53
|
+
const twice = selector.find((valueId, index) => selector.indexOf(valueId) !== index);
|
|
54
|
+
if (twice !== undefined) {
|
|
55
|
+
return `A selector names each label value once: ${twice} twice`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
function copyOfRule(rule) {
|
|
61
|
+
return { from: [...rule.from], to: [...rule.to] };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Whether the settings let the sender reach the recipient. With no rules,
|
|
65
|
+
* every ship reaches every ship. The fixed exceptions hold whatever the
|
|
66
|
+
* rules: argo reaches every ship and every ship reaches argo, and a ship
|
|
67
|
+
* answers the sender of a message it received. Otherwise a rule must match
|
|
68
|
+
* the sender with its `from` and the recipient with its `to`.
|
|
69
|
+
*/
|
|
70
|
+
export function allowsReach(settings, send) {
|
|
71
|
+
const { sender, recipient, isAnswerToSender } = send;
|
|
72
|
+
if (settings.rules === null || sender.kind === 'operator' || recipient.kind === 'operator' || isAnswerToSender) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return settings.rules.some((rule) => matches(rule.from, sender) && matches(rule.to, recipient));
|
|
76
|
+
}
|
|
77
|
+
/** A ship matches a selector when it carries every value in it: exact matches, combined with AND. */
|
|
78
|
+
function matches(selector, ship) {
|
|
79
|
+
return selector.every((valueId) => ship.labels.includes(valueId));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=network-settings.js.map
|
|
@@ -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;
|
|
@@ -202,6 +206,24 @@ export interface ClearRequestRepository {
|
|
|
202
206
|
/** One trierarch's, oldest first. */
|
|
203
207
|
listFor(fleetId: FleetId, trierarchShipId: ShipId): Promise<ClearRequest[]>;
|
|
204
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Outbound port: the fleet's network settings, one per fleet (decision 0034).
|
|
211
|
+
* A send holds them shared and a set holds them exclusively, so every send is
|
|
212
|
+
* checked against exactly one version.
|
|
213
|
+
*/
|
|
214
|
+
export interface NetworkSettingsRepository {
|
|
215
|
+
/** The fleet's settings, held shared until the unit of work ends; none at version 0 when it never set rules. */
|
|
216
|
+
findForShare(fleetId: FleetId): Promise<NetworkSettings>;
|
|
217
|
+
/** The fleet's settings, held exclusively until the unit of work ends, even before the fleet first set rules. */
|
|
218
|
+
findForUpdate(fleetId: FleetId): Promise<NetworkSettings>;
|
|
219
|
+
save(settings: NetworkSettings): Promise<void>;
|
|
220
|
+
}
|
|
221
|
+
/** Outbound port: the records of the sends the fleet's network rules refused (decision 0034). */
|
|
222
|
+
export interface ReachRefusalRepository {
|
|
223
|
+
record(refusal: ReachRefusal): Promise<void>;
|
|
224
|
+
/** The fleet's latest refusals, newest first, at most `limit`. Read outside a unit of work. */
|
|
225
|
+
latest(fleetId: FleetId, limit: number): Promise<ReachRefusal[]>;
|
|
226
|
+
}
|
|
205
227
|
/**
|
|
206
228
|
* Outbound port: the fleet's labels, their values and the values its ships
|
|
207
229
|
* carry, always within one fleet (decision 0031). A retired or deleted label
|
|
@@ -290,6 +312,16 @@ export interface ShipFacts {
|
|
|
290
312
|
id: ShipId;
|
|
291
313
|
name: string;
|
|
292
314
|
} | null;
|
|
315
|
+
/** The trierarchs that gave its crew request back, by id and name, oldest first (#382); none without a request. */
|
|
316
|
+
crewRequestGivenBack: {
|
|
317
|
+
trierarch: {
|
|
318
|
+
id: ShipId;
|
|
319
|
+
name: string;
|
|
320
|
+
};
|
|
321
|
+
settingsVersion: number;
|
|
322
|
+
reason: string;
|
|
323
|
+
givenBackAt: Date;
|
|
324
|
+
}[];
|
|
293
325
|
/** The label values the ship carries, by key then value (decision 0031). */
|
|
294
326
|
labels: readonly CarriedLabel[];
|
|
295
327
|
/**
|
|
@@ -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,30 @@
|
|
|
1
|
+
import type { FleetId, ReachRefusalId, ShipId } 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
|
+
}
|
|
@@ -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,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, 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,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpH,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":"AAAA,OAAO,EACL,SAAS,EACT,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ship-report.js","sourceRoot":"","sources":["../../../src/domain/registry/ship-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -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_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' | 'NOT_A_TRIERARCH' | 'NOT_THE_LABEL_OWNER' | 'NOT_REACHABLE' | '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;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAsG5C,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,
|
|
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
|
|
3
|
-
export type ReadNeedsAttention = (caller: Caller) => Promise<
|
|
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,
|
|
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,
|
|
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":"
|
|
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"}
|
|
@@ -1,17 +1,18 @@
|
|
|
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
|
|
4
|
+
import { type ShipHistory, type ShownTimelineEntry } from './history.js';
|
|
5
5
|
import { type Result } from './result.js';
|
|
6
6
|
/** The most events a timeline shows: the newest ones. */
|
|
7
7
|
export declare const TIMELINE_LIMIT = 200;
|
|
8
8
|
export type ReadShipTimeline = (caller: Caller, input: {
|
|
9
9
|
shipId: ShipId;
|
|
10
|
-
}) => Promise<Result<
|
|
10
|
+
}) => Promise<Result<ShownTimelineEntry[], DomainError<'SHIP_NOT_FOUND'>>>;
|
|
11
11
|
/**
|
|
12
12
|
* Use case: every change to a ship, newest first: the events naming it and
|
|
13
|
-
* the ones it caused, such as the messages it sent
|
|
14
|
-
* (fleet:read) is checked before this
|
|
13
|
+
* 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
16
|
*/
|
|
16
17
|
export declare function createReadShipTimeline(deps: {
|
|
17
18
|
history: ShipHistory;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { refuse } from './errors.js';
|
|
2
|
+
import { withPing } from './history.js';
|
|
2
3
|
import { ok } from './result.js';
|
|
3
4
|
/** The most events a timeline shows: the newest ones. */
|
|
4
5
|
export const TIMELINE_LIMIT = 200;
|
|
5
6
|
/**
|
|
6
7
|
* Use case: every change to a ship, newest first: the events naming it and
|
|
7
|
-
* the ones it caused, such as the messages it sent
|
|
8
|
-
* (fleet:read) is checked before this
|
|
8
|
+
* 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.
|
|
9
11
|
*/
|
|
10
12
|
export function createReadShipTimeline(deps) {
|
|
11
13
|
return async (caller, { shipId }) => {
|
|
12
14
|
const timeline = await deps.history.timeline(caller.fleetId, { shipId, limit: TIMELINE_LIMIT });
|
|
13
|
-
return timeline
|
|
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`);
|
|
14
18
|
};
|
|
15
19
|
}
|
|
16
20
|
//# 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;
|
|
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"}
|
package/dist/wiring.d.ts
CHANGED
|
@@ -46,12 +46,15 @@ import { type RemoveCrewRequest } from './domain/registry/remove-crew-request.js
|
|
|
46
46
|
import { type AssignCrew } from './domain/registry/assign-crew.js';
|
|
47
47
|
import { type ReportCrewStatus } from './domain/registry/report-crew-status.js';
|
|
48
48
|
import { type ConfirmCrewRelease } from './domain/registry/confirm-crew-release.js';
|
|
49
|
+
import { type GiveBack } from './domain/registry/give-back-crew-request.js';
|
|
49
50
|
import { type ReadAssignedCrewRequests } from './domain/registry/read-assigned-crew-requests.js';
|
|
50
51
|
import { type ConfirmWorktreeCleared } from './domain/registry/confirm-worktree-cleared.js';
|
|
51
52
|
import { type ReadClearRequests } from './domain/registry/read-clear-requests.js';
|
|
52
53
|
import { type RequestWorktreeClear } from './domain/registry/request-worktree-clear.js';
|
|
53
54
|
import { type ExplainCrewRequest } from './domain/registry/explain-crew-request.js';
|
|
54
55
|
import { type DefineLabel } from './domain/registry/define-label.js';
|
|
56
|
+
import { type ReadReachRefusals } from './domain/registry/read-reach-refusals.js';
|
|
57
|
+
import { type SetNetworkRules } from './domain/registry/set-network-rules.js';
|
|
55
58
|
import { type ChangeLabelValues } from './domain/registry/change-label-values.js';
|
|
56
59
|
import { type AssignLabel } from './domain/registry/assign-label.js';
|
|
57
60
|
import { type UnassignLabel } from './domain/registry/unassign-label.js';
|
|
@@ -99,12 +102,15 @@ export interface UseCases {
|
|
|
99
102
|
assignCrew: AssignCrew;
|
|
100
103
|
reportCrewStatus: ReportCrewStatus;
|
|
101
104
|
confirmCrewRelease: ConfirmCrewRelease;
|
|
105
|
+
giveBackCrewRequest: GiveBack;
|
|
102
106
|
readAssignedCrewRequests: ReadAssignedCrewRequests;
|
|
103
107
|
requestWorktreeClear: RequestWorktreeClear;
|
|
104
108
|
readClearRequests: ReadClearRequests;
|
|
105
109
|
confirmWorktreeCleared: ConfirmWorktreeCleared;
|
|
106
110
|
explainCrewRequest: ExplainCrewRequest;
|
|
107
111
|
defineLabel: DefineLabel;
|
|
112
|
+
setNetworkRules: SetNetworkRules;
|
|
113
|
+
readReachRefusals: ReadReachRefusals;
|
|
108
114
|
changeLabelValues: ChangeLabelValues;
|
|
109
115
|
assignLabel: AssignLabel;
|
|
110
116
|
unassignLabel: UnassignLabel;
|
package/dist/wiring.js
CHANGED
|
@@ -8,6 +8,7 @@ import { createPrismaFleetListing, createPrismaFleetRepository, createPrismaClea
|
|
|
8
8
|
import { createPrismaGuideProgress, createPrismaNoticeDismissals, createPrismaOperatorAccountLookup } from './adapters/prisma/identity.js';
|
|
9
9
|
import { createReceiverWakeups } from './adapters/prisma/receiver-wakeups.js';
|
|
10
10
|
import { createPrismaFleetLimitReads, createPrismaGuideRepository, createPrismaInstallationFleets, createPrismaInstallationSettings, createPrismaNoticeRepository, } from './adapters/prisma/installation.js';
|
|
11
|
+
import { createPrismaReachRefusalRepository } from './adapters/prisma/network.js';
|
|
11
12
|
import { createPrismaCallers, createPrismaUnitOfWork } from './adapters/prisma/unit-of-work.js';
|
|
12
13
|
import { createAuthenticate } from './domain/identity/authenticate.js';
|
|
13
14
|
import { createDismissNotice } from './domain/identity/dismiss-notice.js';
|
|
@@ -54,12 +55,15 @@ import { createRemoveCrewRequest } from './domain/registry/remove-crew-request.j
|
|
|
54
55
|
import { createAssignCrew } from './domain/registry/assign-crew.js';
|
|
55
56
|
import { createReportCrewStatus } from './domain/registry/report-crew-status.js';
|
|
56
57
|
import { createConfirmCrewRelease } from './domain/registry/confirm-crew-release.js';
|
|
58
|
+
import { createGiveBackCrewRequest } from './domain/registry/give-back-crew-request.js';
|
|
57
59
|
import { createReadAssignedCrewRequests } from './domain/registry/read-assigned-crew-requests.js';
|
|
58
60
|
import { createConfirmWorktreeCleared } from './domain/registry/confirm-worktree-cleared.js';
|
|
59
61
|
import { createReadClearRequests } from './domain/registry/read-clear-requests.js';
|
|
60
62
|
import { createRequestWorktreeClear } from './domain/registry/request-worktree-clear.js';
|
|
61
63
|
import { createExplainCrewRequest } from './domain/registry/explain-crew-request.js';
|
|
62
64
|
import { createDefineLabel } from './domain/registry/define-label.js';
|
|
65
|
+
import { createReadReachRefusals } from './domain/registry/read-reach-refusals.js';
|
|
66
|
+
import { createSetNetworkRules } from './domain/registry/set-network-rules.js';
|
|
63
67
|
import { createChangeLabelValues } from './domain/registry/change-label-values.js';
|
|
64
68
|
import { createAssignLabel } from './domain/registry/assign-label.js';
|
|
65
69
|
import { createUnassignLabel } from './domain/registry/unassign-label.js';
|
|
@@ -145,12 +149,15 @@ export function createUseCases(options) {
|
|
|
145
149
|
assignCrew: createAssignCrew({ uow, clock, ids }),
|
|
146
150
|
reportCrewStatus: createReportCrewStatus({ uow, clock, ids }),
|
|
147
151
|
confirmCrewRelease: createConfirmCrewRelease({ uow, clock, ids }),
|
|
152
|
+
giveBackCrewRequest: createGiveBackCrewRequest({ uow, clock, ids }),
|
|
148
153
|
readAssignedCrewRequests: createReadAssignedCrewRequests({ crewRequests: createPrismaCrewRequestRepository(prisma) }),
|
|
149
154
|
explainCrewRequest: createExplainCrewRequest({ uow, clock, ids }),
|
|
150
155
|
requestWorktreeClear: createRequestWorktreeClear({ uow, clock, ids }),
|
|
151
156
|
readClearRequests: createReadClearRequests({ clearRequests: createPrismaClearRequestRepository(prisma) }),
|
|
152
157
|
confirmWorktreeCleared: createConfirmWorktreeCleared({ uow, clock, ids }),
|
|
153
158
|
defineLabel: createDefineLabel({ uow, clock, ids }),
|
|
159
|
+
setNetworkRules: createSetNetworkRules({ uow, clock, ids }),
|
|
160
|
+
readReachRefusals: createReadReachRefusals({ reachRefusals: createPrismaReachRefusalRepository(prisma) }),
|
|
154
161
|
changeLabelValues: createChangeLabelValues({ uow, clock, ids }),
|
|
155
162
|
assignLabel: createAssignLabel({ uow, clock, ids }),
|
|
156
163
|
unassignLabel: createUnassignLabel({ uow, clock, ids }),
|