@aeolus-fleet/core 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/http/server.d.ts +2 -0
- package/dist/adapters/http/server.js +11 -0
- package/dist/adapters/http/server.js.map +1 -1
- package/dist/adapters/prisma/client.d.ts +2 -0
- package/dist/adapters/prisma/client.js +19 -1
- package/dist/adapters/prisma/client.js.map +1 -1
- package/dist/adapters/prisma/fleet-busy.d.ts +2 -0
- package/dist/adapters/prisma/fleet-busy.js +26 -0
- package/dist/adapters/prisma/fleet-busy.js.map +1 -0
- package/dist/adapters/prisma/generated/browser.d.ts +7 -0
- package/dist/adapters/prisma/generated/client.d.ts +7 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +11 -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 +83 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +6 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +7 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +6 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.d.ts +1195 -0
- package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.js +2 -0
- package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +259 -0
- package/dist/adapters/prisma/generated/models/Ship.d.ts +263 -0
- package/dist/adapters/prisma/generated/models.d.ts +1 -0
- package/dist/adapters/prisma/network.d.ts +3 -1
- package/dist/adapters/prisma/network.js +23 -0
- package/dist/adapters/prisma/network.js.map +1 -1
- package/dist/adapters/prisma/registry.js +1 -0
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
- package/dist/adapters/prisma/unit-of-work.js +2 -1
- package/dist/adapters/prisma/unit-of-work.js.map +1 -1
- package/dist/adapters/trpc/console.d.ts +2 -1
- package/dist/adapters/trpc/console.js +6 -2
- package/dist/adapters/trpc/console.js.map +1 -1
- package/dist/adapters/trpc/context.d.ts +7 -1
- package/dist/adapters/trpc/fleet.d.ts +34 -3
- package/dist/adapters/trpc/fleet.js +27 -4
- package/dist/adapters/trpc/fleet.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +41 -3
- 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 +2 -2
- package/dist/adapters/trpc/ship-protocol.js.map +1 -1
- package/dist/adapters/trpc/system.d.ts +15 -0
- package/dist/adapters/trpc/system.js +10 -1
- package/dist/adapters/trpc/system.js.map +1 -1
- package/dist/adapters/trpc/trpc.d.ts +11 -0
- package/dist/adapters/trpc/trpc.js +26 -10
- package/dist/adapters/trpc/trpc.js.map +1 -1
- package/dist/app.js +2 -1
- package/dist/app.js.map +1 -1
- package/dist/domain/registry/check-reach.js +1 -1
- package/dist/domain/registry/check-reach.js.map +1 -1
- package/dist/domain/registry/declare-network-rules.d.ts +33 -0
- package/dist/domain/registry/declare-network-rules.js +30 -0
- package/dist/domain/registry/declare-network-rules.js.map +1 -0
- package/dist/domain/registry/declared-network-rules.d.ts +60 -0
- package/dist/domain/registry/declared-network-rules.js +70 -0
- package/dist/domain/registry/declared-network-rules.js.map +1 -0
- package/dist/domain/registry/label.d.ts +8 -10
- package/dist/domain/registry/label.js +4 -16
- package/dist/domain/registry/label.js.map +1 -1
- package/dist/domain/registry/network-settings.d.ts +23 -10
- package/dist/domain/registry/network-settings.js +65 -28
- package/dist/domain/registry/network-settings.js.map +1 -1
- package/dist/domain/registry/ports.d.ts +10 -0
- package/dist/domain/registry/read-declared-network-rules.d.ts +16 -0
- package/dist/domain/registry/read-declared-network-rules.js +9 -0
- package/dist/domain/registry/read-declared-network-rules.js.map +1 -0
- package/dist/domain/registry/retire-ship.d.ts +4 -2
- package/dist/domain/registry/retire-ship.js +10 -1
- package/dist/domain/registry/retire-ship.js.map +1 -1
- package/dist/domain/registry/set-network-rules.d.ts +4 -2
- package/dist/domain/registry/set-network-rules.js +4 -2
- package/dist/domain/registry/set-network-rules.js.map +1 -1
- package/dist/domain/registry/unassign-label.js +1 -1
- package/dist/domain/registry/unassign-label.js.map +1 -1
- package/dist/domain/shared/errors.d.ts +1 -1
- package/dist/domain/shared/errors.js.map +1 -1
- package/dist/wiring.d.ts +4 -0
- package/dist/wiring.js +5 -1
- package/dist/wiring.js.map +1 -1
- package/package.json +3 -2
- package/src/adapters/prisma/migrations/20261010130000_cleared_network_rules_on_record/migration.sql +57 -0
- package/src/adapters/prisma/migrations/20261010210000_declared_network_rules/migration.sql +16 -0
- package/src/adapters/prisma/schema.prisma +17 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The network rules a ship declares on the labels it owns (decision 0037),
|
|
3
|
+
* such as a plugin's for the ships it labels. Declared, they are not in
|
|
4
|
+
* force: the fleet's networking plugin adds them to argo's rules when it
|
|
5
|
+
* supplies the list. Only rules on labels the ship owns keep them safe: only
|
|
6
|
+
* it assigns those labels, so its rules reach no ship it did not label.
|
|
7
|
+
*/
|
|
8
|
+
import { DECLARED_NETWORK_RULES_MAX } from '@aeolus-fleet/common';
|
|
9
|
+
import { refuse } from '../shared/errors.js';
|
|
10
|
+
import { ok } from '../shared/result.js';
|
|
11
|
+
import { copyOfRule, invalidRule } from './network-settings.js';
|
|
12
|
+
/** Every label and every exact value the rules' terms name, each once: what the caller looks up before declaring. */
|
|
13
|
+
export function namedInRules(rules) {
|
|
14
|
+
const terms = rules.flatMap((rule) => [...rule.from, ...rule.to]);
|
|
15
|
+
return {
|
|
16
|
+
labelIds: [...new Set(terms.flatMap((term) => (typeof term === 'string' ? [] : [term.labelId])))],
|
|
17
|
+
valueIds: [...new Set(terms.flatMap((term) => (typeof term === 'string' ? [term] : [])))],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The ship declares its whole list from now on, replacing what it declared
|
|
22
|
+
* before; an empty list withdraws them. At most 20, each rule within
|
|
23
|
+
* decision 0034's own limits, and every term on a label the ship owns: an
|
|
24
|
+
* exact value's label, and the label of a term of any or the same value. An
|
|
25
|
+
* id the fleet does not have is refused, as its owner cannot be checked.
|
|
26
|
+
* NetworkRulesDeclared names the ship and the number of rules, never them.
|
|
27
|
+
*/
|
|
28
|
+
export function declareNetworkRules(named, change) {
|
|
29
|
+
const { fleetId, shipId, rules } = change;
|
|
30
|
+
if (rules.length > DECLARED_NETWORK_RULES_MAX) {
|
|
31
|
+
return refuse('INVALID_NETWORK_RULES', `A ship declares at most ${String(DECLARED_NETWORK_RULES_MAX)} network rules (decision 0037)`);
|
|
32
|
+
}
|
|
33
|
+
const invalid = rules.map(invalidRule).find((broken) => broken !== undefined);
|
|
34
|
+
if (invalid !== undefined) {
|
|
35
|
+
return refuse('INVALID_NETWORK_RULES', `${invalid} (decision 0034)`);
|
|
36
|
+
}
|
|
37
|
+
for (const term of rules.flatMap((rule) => [...rule.from, ...rule.to])) {
|
|
38
|
+
const owned = checkOwnedTerm(named, { term, shipId });
|
|
39
|
+
if (!owned.isOk) {
|
|
40
|
+
return owned;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return ok({ declared: { fleetId, shipId, rules: rules.map(copyOfRule) }, events: [declaredEvent({ fleetId, shipId, rules: rules.length, at: change.at, actor: change.actor })] });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The retired ship's declared rules go with it, as its labels do (decision
|
|
47
|
+
* 0031): none from now on, with NetworkRulesDeclared of none. A ship that
|
|
48
|
+
* declared none changes nothing.
|
|
49
|
+
*/
|
|
50
|
+
export function withdrawWithRetiredShip(current, change) {
|
|
51
|
+
if (current === undefined) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
const { fleetId, shipId } = current;
|
|
55
|
+
return { declared: { fleetId, shipId, rules: [] }, events: [declaredEvent({ fleetId, shipId, rules: 0, ...change })] };
|
|
56
|
+
}
|
|
57
|
+
function declaredEvent(declared) {
|
|
58
|
+
return { type: 'NetworkRulesDeclared', fleetId: declared.fleetId, occurredAt: declared.at, actor: declared.actor, shipId: declared.shipId, details: { rules: declared.rules } };
|
|
59
|
+
}
|
|
60
|
+
function checkOwnedTerm(named, declaring) {
|
|
61
|
+
const { term, shipId } = declaring;
|
|
62
|
+
const label = typeof term === 'string' ? named.labels.find((each) => each.values.some((value) => value.id === term)) : named.labels.find((each) => each.id === term.labelId);
|
|
63
|
+
if (label === undefined) {
|
|
64
|
+
return typeof term === 'string' ? refuse('LABEL_VALUE_NOT_FOUND', `The fleet has no label value ${term}`) : refuse('LABEL_NOT_FOUND', `The fleet has no label ${term.labelId}`);
|
|
65
|
+
}
|
|
66
|
+
return label.ownerShipId === shipId
|
|
67
|
+
? ok(undefined)
|
|
68
|
+
: refuse('NOT_THE_LABEL_OWNER', `The label ${label.key} is owned by ${named.ownerNameOf(label.ownerShipId)}: only its owner declares rules on it (decision 0037)`);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=declared-network-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/declared-network-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,8 @@ export interface LabelValue {
|
|
|
12
12
|
* A label (docs/blueprint.md, "Label"; decision 0031): a key with a defined
|
|
13
13
|
* set of values, each with its own id, owned by the ship that defined it.
|
|
14
14
|
* Ids are for machines, key and value texts for people. Only its owner
|
|
15
|
-
* changes its values and assigns them,
|
|
16
|
-
* owner.
|
|
15
|
+
* changes its values and assigns them, to any ship, its own included. It
|
|
16
|
+
* retires with its owner.
|
|
17
17
|
*/
|
|
18
18
|
export interface Label {
|
|
19
19
|
fleetId: FleetId;
|
|
@@ -128,14 +128,13 @@ export declare function deleteLabel({ label, ownerName, carrierNames }: {
|
|
|
128
128
|
}): Result<{
|
|
129
129
|
events: NewEvent[];
|
|
130
130
|
}, DeleteLabelRefusal>;
|
|
131
|
-
type
|
|
132
|
-
export type AssignLabelRefusal = NotTheOwner | OwnShip | DomainError<'SHIP_ALREADY_RETIRED' | 'SHIP_LABEL_LIMIT_REACHED'>;
|
|
131
|
+
export type AssignLabelRefusal = NotTheOwner | DomainError<'SHIP_ALREADY_RETIRED' | 'SHIP_LABEL_LIMIT_REACHED'>;
|
|
133
132
|
/**
|
|
134
133
|
* The owner gives a ship one of its label's values, by its id: the ship
|
|
135
134
|
* holds a set of values, so it may carry several of one label. A value it
|
|
136
|
-
* carries changes nothing.
|
|
137
|
-
* argo and the viewer ship as any other (decision 0016). A ship
|
|
138
|
-
* most 20 values. LabelAssigned names the ship, with the label and the value.
|
|
135
|
+
* carries changes nothing. Any ship, the owner's own included, but never a
|
|
136
|
+
* retired ship; argo and the viewer ship as any other (decision 0016). A ship
|
|
137
|
+
* carries at most 20 values. LabelAssigned names the ship, with the label and the value.
|
|
139
138
|
*/
|
|
140
139
|
export declare function assignLabel({ label, ownerName, ship, carried, }: {
|
|
141
140
|
label: Label;
|
|
@@ -151,16 +150,15 @@ export declare function assignLabel({ label, ownerName, ship, carried, }: {
|
|
|
151
150
|
assignment: ShipLabel | undefined;
|
|
152
151
|
events: NewEvent[];
|
|
153
152
|
}, AssignLabelRefusal>;
|
|
154
|
-
export type UnassignLabelRefusal = NotTheOwner
|
|
153
|
+
export type UnassignLabelRefusal = NotTheOwner;
|
|
155
154
|
/**
|
|
156
155
|
* The owner takes one value of its label off a ship. A ship that does not
|
|
157
156
|
* carry it changes nothing. LabelUnassigned names the ship, with the label
|
|
158
157
|
* and the value it carried.
|
|
159
158
|
*/
|
|
160
|
-
export declare function unassignLabel({ label, ownerName,
|
|
159
|
+
export declare function unassignLabel({ label, ownerName, carried, }: {
|
|
161
160
|
label: Label;
|
|
162
161
|
ownerName: string;
|
|
163
|
-
ship: Ship;
|
|
164
162
|
carried: readonly ShipLabel[];
|
|
165
163
|
}, input: {
|
|
166
164
|
callerShipId: ShipId;
|
|
@@ -173,26 +173,18 @@ function assignmentEvent({ label, assignment }, change) {
|
|
|
173
173
|
},
|
|
174
174
|
};
|
|
175
175
|
}
|
|
176
|
-
/** No ship labels itself: that would let it enforce a plugin's policy on its own (decision 0031). */
|
|
177
|
-
function checkNotOwnShip(label, ship) {
|
|
178
|
-
return ship.id === label.ownerShipId ? refuse('LABEL_ON_OWN_SHIP', `No ship labels itself: ${label.key} is your own ship's label`) : ok(undefined);
|
|
179
|
-
}
|
|
180
176
|
/**
|
|
181
177
|
* The owner gives a ship one of its label's values, by its id: the ship
|
|
182
178
|
* holds a set of values, so it may carry several of one label. A value it
|
|
183
|
-
* carries changes nothing.
|
|
184
|
-
* argo and the viewer ship as any other (decision 0016). A ship
|
|
185
|
-
* most 20 values. LabelAssigned names the ship, with the label and the value.
|
|
179
|
+
* carries changes nothing. Any ship, the owner's own included, but never a
|
|
180
|
+
* retired ship; argo and the viewer ship as any other (decision 0016). A ship
|
|
181
|
+
* carries at most 20 values. LabelAssigned names the ship, with the label and the value.
|
|
186
182
|
*/
|
|
187
183
|
export function assignLabel({ label, ownerName, ship, carried, }, input) {
|
|
188
184
|
const owned = checkOwner({ label, ownerName }, { shipId: input.callerShipId, act: 'assigns' });
|
|
189
185
|
if (!owned.isOk) {
|
|
190
186
|
return owned;
|
|
191
187
|
}
|
|
192
|
-
const notOwn = checkNotOwnShip(label, ship);
|
|
193
|
-
if (!notOwn.isOk) {
|
|
194
|
-
return notOwn;
|
|
195
|
-
}
|
|
196
188
|
if (ship.retiredAt !== null) {
|
|
197
189
|
return refuse('SHIP_ALREADY_RETIRED', `${ship.name} is retired`);
|
|
198
190
|
}
|
|
@@ -218,15 +210,11 @@ export function assignLabel({ label, ownerName, ship, carried, }, input) {
|
|
|
218
210
|
* carry it changes nothing. LabelUnassigned names the ship, with the label
|
|
219
211
|
* and the value it carried.
|
|
220
212
|
*/
|
|
221
|
-
export function unassignLabel({ label, ownerName,
|
|
213
|
+
export function unassignLabel({ label, ownerName, carried, }, input) {
|
|
222
214
|
const owned = checkOwner({ label, ownerName }, { shipId: input.callerShipId, act: 'unassigns' });
|
|
223
215
|
if (!owned.isOk) {
|
|
224
216
|
return owned;
|
|
225
217
|
}
|
|
226
|
-
const notOwn = checkNotOwnShip(label, ship);
|
|
227
|
-
if (!notOwn.isOk) {
|
|
228
|
-
return notOwn;
|
|
229
|
-
}
|
|
230
218
|
const current = carried.find((each) => each.valueId === input.valueId);
|
|
231
219
|
if (!current) {
|
|
232
220
|
return ok({ unassigned: undefined, events: [] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/domain/registry/label.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/domain/registry/label.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* fleet holds its rules, or none (all-to-all), with a version that moves on
|
|
6
6
|
* every set, so a refusal names the settings that refused it.
|
|
7
7
|
*/
|
|
8
|
-
import { type FleetId, type LabelValueId, type NetworkPluginDeclaration, type ShipId, type ShipKind, type WhileUnavailable } from '@aeolus-fleet/common';
|
|
8
|
+
import { type FleetId, type LabelId, type LabelValueId, type NetworkPluginDeclaration, type SelectorTerm, type ShipId, type ShipKind, type WhileUnavailable } from '@aeolus-fleet/common';
|
|
9
9
|
import { type DomainError } from '../shared/errors.js';
|
|
10
10
|
import type { Actor, NewEvent } from '../shared/events.js';
|
|
11
11
|
import { type Result } from '../shared/result.js';
|
|
12
|
-
/** The ships
|
|
12
|
+
/** The ships for which every term of `from` holds may send to the ships for which every term of `to` holds. */
|
|
13
13
|
export interface NetworkRule {
|
|
14
|
-
from: readonly
|
|
15
|
-
to: readonly
|
|
14
|
+
from: readonly SelectorTerm[];
|
|
15
|
+
to: readonly SelectorTerm[];
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* The fleet's networking plugin (decision 0035): the ship that alone sets the
|
|
@@ -66,14 +66,18 @@ export declare function unregisterNetworkPlugin(current: NetworkSettings, change
|
|
|
66
66
|
}, NotTheNetworkPlugin>;
|
|
67
67
|
/**
|
|
68
68
|
* The fleet's rules from now on, replacing the ones it had, at the next
|
|
69
|
-
* version, with NetworkRulesSet. The rules are within the
|
|
70
|
-
* at most 200
|
|
71
|
-
*
|
|
72
|
-
* as
|
|
73
|
-
*
|
|
69
|
+
* version, with NetworkRulesSet. The rules are within the decisions' limits:
|
|
70
|
+
* at most 200 of argo's plus every rule the fleet's ships declared, which the
|
|
71
|
+
* plugin adds to argo's when it supplies them (decision 0037); each selector
|
|
72
|
+
* at most 20 terms, as a ship carries no more label values, each term once, and a term of the same value on a label on
|
|
73
|
+
* both sides of its rule, as it binds that label there. An id need not
|
|
74
|
+
* exist: an unknown one matches no ship, as in label selection. Only the
|
|
75
|
+
* fleet's registered networking plugin sets them, argo included: rules exist
|
|
76
|
+
* only through a plugin (decision 0035).
|
|
74
77
|
*/
|
|
75
78
|
export declare function setNetworkRules(current: NetworkSettings, change: {
|
|
76
79
|
rules: readonly NetworkRule[] | null;
|
|
80
|
+
declaredRules: number;
|
|
77
81
|
shipId: ShipId;
|
|
78
82
|
at: Date;
|
|
79
83
|
actor: Actor;
|
|
@@ -81,6 +85,10 @@ export declare function setNetworkRules(current: NetworkSettings, change: {
|
|
|
81
85
|
settings: NetworkSettings;
|
|
82
86
|
events: NewEvent[];
|
|
83
87
|
}, SetNetworkRulesRefusal>;
|
|
88
|
+
/** What breaks a rule's own limits, said for the caller, or undefined when it keeps them (decision 0034). */
|
|
89
|
+
export declare function invalidRule(rule: NetworkRule): string | undefined;
|
|
90
|
+
/** A copy of the rule, so what is kept never changes with what was given. */
|
|
91
|
+
export declare function copyOfRule(rule: NetworkRule): NetworkRule;
|
|
84
92
|
/**
|
|
85
93
|
* Whether the plugin responds at `now` (decision 0035): its ship holds a
|
|
86
94
|
* lease whose crew called the fleet no longer ago than it declared. Its last
|
|
@@ -103,10 +111,15 @@ export interface RulesInForce {
|
|
|
103
111
|
* supplied last.
|
|
104
112
|
*/
|
|
105
113
|
export declare function rulesInForce(settings: NetworkSettings, isPluginResponding: boolean): RulesInForce;
|
|
114
|
+
/** A label value a ship carries, with the label it is of, so a term of any or the same value finds it. */
|
|
115
|
+
export interface ReachingLabel {
|
|
116
|
+
labelId: LabelId;
|
|
117
|
+
valueId: LabelValueId;
|
|
118
|
+
}
|
|
106
119
|
/** A ship as a send's check sees it: its kind, for the argo exception, and the label values it carries. */
|
|
107
120
|
export interface ReachingShip {
|
|
108
121
|
kind: ShipKind;
|
|
109
|
-
labels: readonly
|
|
122
|
+
labels: readonly ReachingLabel[];
|
|
110
123
|
}
|
|
111
124
|
/**
|
|
112
125
|
* Whether the settings let the sender reach the recipient. With no rules,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* fleet holds its rules, or none (all-to-all), with a version that moves on
|
|
6
6
|
* every set, so a refusal names the settings that refused it.
|
|
7
7
|
*/
|
|
8
|
-
import { NETWORK_RULES_MAX, SHIP_LABELS_MAX } from '@aeolus-fleet/common';
|
|
8
|
+
import { ANY_LABEL_VALUE, NETWORK_RULES_MAX, SAME_LABEL_VALUE, SHIP_LABELS_MAX, } from '@aeolus-fleet/common';
|
|
9
9
|
import { refuse } from '../shared/errors.js';
|
|
10
10
|
import { ok } from '../shared/result.js';
|
|
11
11
|
/** A fleet that never set rules: none, at version 0, without a plugin. */
|
|
@@ -72,19 +72,25 @@ export function unregisterNetworkPlugin(current, change) {
|
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* The fleet's rules from now on, replacing the ones it had, at the next
|
|
75
|
-
* version, with NetworkRulesSet. The rules are within the
|
|
76
|
-
* at most 200
|
|
77
|
-
*
|
|
78
|
-
* as
|
|
79
|
-
*
|
|
75
|
+
* version, with NetworkRulesSet. The rules are within the decisions' limits:
|
|
76
|
+
* at most 200 of argo's plus every rule the fleet's ships declared, which the
|
|
77
|
+
* plugin adds to argo's when it supplies them (decision 0037); each selector
|
|
78
|
+
* at most 20 terms, as a ship carries no more label values, each term once, and a term of the same value on a label on
|
|
79
|
+
* both sides of its rule, as it binds that label there. An id need not
|
|
80
|
+
* exist: an unknown one matches no ship, as in label selection. Only the
|
|
81
|
+
* fleet's registered networking plugin sets them, argo included: rules exist
|
|
82
|
+
* only through a plugin (decision 0035).
|
|
80
83
|
*/
|
|
81
84
|
export function setNetworkRules(current, change) {
|
|
82
|
-
const { rules } = change;
|
|
85
|
+
const { rules, declaredRules } = change;
|
|
83
86
|
if (current.plugin?.shipId !== change.shipId) {
|
|
84
87
|
return refuseNotThePlugin();
|
|
85
88
|
}
|
|
86
89
|
if (rules !== null) {
|
|
87
|
-
|
|
90
|
+
if (rules.length > NETWORK_RULES_MAX + declaredRules) {
|
|
91
|
+
return refuse('INVALID_NETWORK_RULES', `A fleet holds at most ${String(NETWORK_RULES_MAX)} network rules of argo's plus the ${String(declaredRules)} its ships declared (decision 0037)`);
|
|
92
|
+
}
|
|
93
|
+
const invalid = rules.map(invalidRule).find((broken) => broken !== undefined);
|
|
88
94
|
if (invalid !== undefined) {
|
|
89
95
|
return refuse('INVALID_NETWORK_RULES', `${invalid} (decision 0034)`);
|
|
90
96
|
}
|
|
@@ -103,24 +109,36 @@ export function setNetworkRules(current, change) {
|
|
|
103
109
|
],
|
|
104
110
|
});
|
|
105
111
|
}
|
|
106
|
-
/** What breaks
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return `A selector holds at most ${String(SHIP_LABELS_MAX)} label values, as a ship carries no more`;
|
|
114
|
-
}
|
|
115
|
-
const twice = selector.find((valueId, index) => selector.indexOf(valueId) !== index);
|
|
116
|
-
if (twice !== undefined) {
|
|
117
|
-
return `A selector names each label value once: ${twice} twice`;
|
|
118
|
-
}
|
|
112
|
+
/** What breaks a rule's own limits, said for the caller, or undefined when it keeps them (decision 0034). */
|
|
113
|
+
export function invalidRule(rule) {
|
|
114
|
+
return invalidSelector(rule.from) ?? invalidSelector(rule.to) ?? sameValueOnOneSide(rule);
|
|
115
|
+
}
|
|
116
|
+
function invalidSelector(selector) {
|
|
117
|
+
if (selector.length > SHIP_LABELS_MAX) {
|
|
118
|
+
return `A selector holds at most ${String(SHIP_LABELS_MAX)} terms, as a ship carries no more label values`;
|
|
119
119
|
}
|
|
120
|
-
|
|
120
|
+
const texts = selector.map(termText);
|
|
121
|
+
const twice = texts.find((text, index) => texts.indexOf(text) !== index);
|
|
122
|
+
return twice === undefined ? undefined : `A selector holds each term once: ${twice} twice`;
|
|
123
|
+
}
|
|
124
|
+
function sameValueOnOneSide(rule) {
|
|
125
|
+
const [from, to] = [sameValueLabels(rule.from), sameValueLabels(rule.to)];
|
|
126
|
+
const alone = [...from.filter((labelId) => !to.includes(labelId)), ...to.filter((labelId) => !from.includes(labelId))][0];
|
|
127
|
+
return alone === undefined ? undefined : `A term of the same value binds its label on both sides: ${termText({ labelId: alone, value: SAME_LABEL_VALUE })} is on one side only`;
|
|
128
|
+
}
|
|
129
|
+
/** A term as a refusal names it: an exact value by its id, any other by its label id and symbol. */
|
|
130
|
+
function termText(term) {
|
|
131
|
+
return typeof term === 'string' ? term : `${term.labelId}=${term.value}`;
|
|
121
132
|
}
|
|
122
|
-
function
|
|
123
|
-
return
|
|
133
|
+
function sameValueLabels(selector) {
|
|
134
|
+
return selector.flatMap((term) => (typeof term !== 'string' && term.value === SAME_LABEL_VALUE ? [term.labelId] : []));
|
|
135
|
+
}
|
|
136
|
+
/** A copy of the rule, so what is kept never changes with what was given. */
|
|
137
|
+
export function copyOfRule(rule) {
|
|
138
|
+
return { from: rule.from.map(copyOfTerm), to: rule.to.map(copyOfTerm) };
|
|
139
|
+
}
|
|
140
|
+
function copyOfTerm(term) {
|
|
141
|
+
return typeof term === 'string' ? term : { ...term };
|
|
124
142
|
}
|
|
125
143
|
const MILLISECONDS_PER_SECOND = 1000;
|
|
126
144
|
/**
|
|
@@ -165,10 +183,29 @@ export function allowsReach(settings, send) {
|
|
|
165
183
|
if (settings.rules === null || sender.kind === 'operator' || recipient.kind === 'operator' || isAnswerToSender) {
|
|
166
184
|
return true;
|
|
167
185
|
}
|
|
168
|
-
return settings.rules.some((rule) => matches(rule.from, sender) && matches(rule.to, recipient));
|
|
186
|
+
return settings.rules.some((rule) => matches(rule.from, { ship: sender, otherSide: recipient }) && matches(rule.to, { ship: recipient, otherSide: sender }));
|
|
169
187
|
}
|
|
170
|
-
/** A ship matches a selector when
|
|
171
|
-
function matches(selector,
|
|
172
|
-
return selector.every((
|
|
188
|
+
/** A ship matches a selector when every term of it holds, combined with AND. */
|
|
189
|
+
function matches(selector, sides) {
|
|
190
|
+
return selector.every((term) => holds(term, sides));
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* An exact value holds for a ship carrying it; any value for a ship carrying
|
|
194
|
+
* a value of the label; the same value when the ship and the other side carry
|
|
195
|
+
* one value of the label both, each such term on its own (a ship may carry
|
|
196
|
+
* several values of one label, decision 0031).
|
|
197
|
+
*/
|
|
198
|
+
function holds(term, sides) {
|
|
199
|
+
const { ship, otherSide } = sides;
|
|
200
|
+
if (typeof term === 'string') {
|
|
201
|
+
return ship.labels.some((label) => label.valueId === term);
|
|
202
|
+
}
|
|
203
|
+
const values = ship.labels.filter((label) => label.labelId === term.labelId);
|
|
204
|
+
switch (term.value) {
|
|
205
|
+
case ANY_LABEL_VALUE:
|
|
206
|
+
return values.length > 0;
|
|
207
|
+
case SAME_LABEL_VALUE:
|
|
208
|
+
return values.some((value) => otherSide.labels.some((other) => other.labelId === term.labelId && other.valueId === value.valueId));
|
|
209
|
+
}
|
|
173
210
|
}
|
|
174
211
|
//# sourceMappingURL=network-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-settings.js","sourceRoot":"","sources":["../../../src/domain/registry/network-settings.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"network-settings.js","sourceRoot":"","sources":["../../../src/domain/registry/network-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ 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 { DeclaredNetworkRules } from './declared-network-rules.js';
|
|
10
11
|
import type { NetworkSettings } from './network-settings.js';
|
|
11
12
|
import type { ReachRefusal } from './reach-refusal.js';
|
|
12
13
|
import type { Ship } from './ship.js';
|
|
@@ -226,6 +227,15 @@ export interface NetworkSettingsRepository {
|
|
|
226
227
|
findForUpdate(fleetId: FleetId): Promise<NetworkSettings>;
|
|
227
228
|
save(settings: NetworkSettings): Promise<void>;
|
|
228
229
|
}
|
|
230
|
+
/** Each ship's declared network rules (decision 0037). */
|
|
231
|
+
export interface DeclaredNetworkRulesRepository {
|
|
232
|
+
/** Every ship's declared rules in the fleet, by ship id: the order the ships were commissioned. */
|
|
233
|
+
list(fleetId: FleetId): Promise<DeclaredNetworkRules[]>;
|
|
234
|
+
/** The ship's declared rules; none while it declares none. */
|
|
235
|
+
find(fleetId: FleetId, shipId: ShipId): Promise<DeclaredNetworkRules | undefined>;
|
|
236
|
+
/** Keeps the ship's whole list from now on; an empty one keeps none. */
|
|
237
|
+
save(declared: DeclaredNetworkRules): Promise<void>;
|
|
238
|
+
}
|
|
229
239
|
/** Outbound port: the records of the sends the fleet's network rules refused (decision 0034). */
|
|
230
240
|
export interface ReachRefusalRepository {
|
|
231
241
|
record(refusal: ReachRefusal): Promise<void>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Caller } from '../shared/caller.js';
|
|
3
|
+
import type { NetworkRule } from './network-settings.js';
|
|
4
|
+
import type { DeclaredNetworkRulesRepository } from './ports.js';
|
|
5
|
+
export type ReadDeclaredNetworkRules = (caller: Caller) => Promise<{
|
|
6
|
+
shipId: ShipId;
|
|
7
|
+
rules: readonly NetworkRule[];
|
|
8
|
+
}[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Use case: the fleet's networking plugin reads every ship's declared rules,
|
|
11
|
+
* each ship with its whole list, to add them to argo's when it supplies the
|
|
12
|
+
* list (decision 0037). Its scope (fleet:network) is checked before this runs.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createReadDeclaredNetworkRules(deps: {
|
|
15
|
+
declaredNetworkRules: Pick<DeclaredNetworkRulesRepository, 'list'>;
|
|
16
|
+
}): ReadDeclaredNetworkRules;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Use case: the fleet's networking plugin reads every ship's declared rules,
|
|
3
|
+
* each ship with its whole list, to add them to argo's when it supplies the
|
|
4
|
+
* list (decision 0037). Its scope (fleet:network) is checked before this runs.
|
|
5
|
+
*/
|
|
6
|
+
export function createReadDeclaredNetworkRules(deps) {
|
|
7
|
+
return async (caller) => (await deps.declaredNetworkRules.list(caller.fleetId)).map(({ shipId, rules }) => ({ shipId, rules }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=read-declared-network-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-declared-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-declared-network-rules.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAA4E;IACzH,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAClI,CAAC"}
|
|
@@ -6,7 +6,7 @@ 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, NetworkSettingsRepository, ShipRepository } from './ports.js';
|
|
9
|
+
import type { ClearRequestRepository, CrewRequestRepository, DeclaredNetworkRulesRepository, 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;
|
|
@@ -14,6 +14,7 @@ export interface RetireShipTx extends LeaseTx, CredentialTx {
|
|
|
14
14
|
clearRequests: ClearRequestRepository;
|
|
15
15
|
labels: LabelRepository;
|
|
16
16
|
networkSettings: Pick<NetworkSettingsRepository, 'findForUpdate' | 'save'>;
|
|
17
|
+
declaredNetworkRules: Pick<DeclaredNetworkRulesRepository, 'find' | 'save'>;
|
|
17
18
|
}
|
|
18
19
|
export type RetireShipRefusal = DomainError<'SHIP_NOT_FOUND'> | RetireRefusal;
|
|
19
20
|
export type RetireShip = (caller: Caller, input: {
|
|
@@ -34,7 +35,8 @@ export type RetireShip = (caller: Caller, input: {
|
|
|
34
35
|
* and the labels it owns retire with it, each locked first and every
|
|
35
36
|
* assignment of it gone first (decision 0031). A retired trierarch clears
|
|
36
37
|
* nothing: its pending clear requests go, one WorktreeClearRemoved each
|
|
37
|
-
* (decision 0032).
|
|
38
|
+
* (decision 0032). The network rules it declared go with its labels
|
|
39
|
+
* (decision 0037). A retired networking plugin unregisters, its rules going
|
|
38
40
|
* with it: all-to-all (decision 0035). The caller's scope (fleet:manage) is
|
|
39
41
|
* checked before this runs.
|
|
40
42
|
*
|
|
@@ -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 { withdrawWithRetiredShip } from './declared-network-rules.js';
|
|
9
10
|
import { unregisterNetworkPlugin } from './network-settings.js';
|
|
10
11
|
import { checkCanRetire } from './ship.js';
|
|
11
12
|
/**
|
|
@@ -21,7 +22,8 @@ import { checkCanRetire } from './ship.js';
|
|
|
21
22
|
* and the labels it owns retire with it, each locked first and every
|
|
22
23
|
* assignment of it gone first (decision 0031). A retired trierarch clears
|
|
23
24
|
* nothing: its pending clear requests go, one WorktreeClearRemoved each
|
|
24
|
-
* (decision 0032).
|
|
25
|
+
* (decision 0032). The network rules it declared go with its labels
|
|
26
|
+
* (decision 0037). A retired networking plugin unregisters, its rules going
|
|
25
27
|
* with it: all-to-all (decision 0035). The caller's scope (fleet:manage) is
|
|
26
28
|
* checked before this runs.
|
|
27
29
|
*
|
|
@@ -90,6 +92,13 @@ export function createRetireShip(deps) {
|
|
|
90
92
|
for (const event of labels.events) {
|
|
91
93
|
await recordEvent(recorded, event);
|
|
92
94
|
}
|
|
95
|
+
const withdrawn = withdrawWithRetiredShip(await tx.declaredNetworkRules.find(fleetId, shipId), { at, actor });
|
|
96
|
+
if (withdrawn !== undefined) {
|
|
97
|
+
await tx.declaredNetworkRules.save(withdrawn.declared);
|
|
98
|
+
for (const event of withdrawn.events) {
|
|
99
|
+
await recordEvent(recorded, event);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
93
102
|
// Any ship but the fleet's networking plugin leaves the settings as they are.
|
|
94
103
|
const unregistered = unregisterNetworkPlugin(await tx.networkSettings.findForUpdate(fleetId), { shipId, at, actor });
|
|
95
104
|
if (unregistered.isOk) {
|
|
@@ -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;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAsB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"retire-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/retire-ship.ts"],"names":[],"mappings":"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"}
|