@aeolus-fleet/core 0.20.5 → 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.
Files changed (99) hide show
  1. package/dist/adapters/http/server.d.ts +2 -0
  2. package/dist/adapters/http/server.js +11 -0
  3. package/dist/adapters/http/server.js.map +1 -1
  4. package/dist/adapters/prisma/client.d.ts +2 -0
  5. package/dist/adapters/prisma/client.js +19 -1
  6. package/dist/adapters/prisma/client.js.map +1 -1
  7. package/dist/adapters/prisma/fleet-busy.d.ts +2 -0
  8. package/dist/adapters/prisma/fleet-busy.js +26 -0
  9. package/dist/adapters/prisma/fleet-busy.js.map +1 -0
  10. package/dist/adapters/prisma/generated/browser.d.ts +7 -0
  11. package/dist/adapters/prisma/generated/client.d.ts +7 -0
  12. package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
  13. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  14. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  15. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +83 -1
  16. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +6 -0
  17. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  18. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +7 -0
  19. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +6 -0
  20. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  21. package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.d.ts +1195 -0
  22. package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.js +2 -0
  23. package/dist/adapters/prisma/generated/models/DeclaredNetworkRules.js.map +1 -0
  24. package/dist/adapters/prisma/generated/models/Fleet.d.ts +259 -0
  25. package/dist/adapters/prisma/generated/models/Ship.d.ts +263 -0
  26. package/dist/adapters/prisma/generated/models.d.ts +1 -0
  27. package/dist/adapters/prisma/migrate.js +17 -4
  28. package/dist/adapters/prisma/migrate.js.map +1 -1
  29. package/dist/adapters/prisma/network.d.ts +3 -1
  30. package/dist/adapters/prisma/network.js +23 -0
  31. package/dist/adapters/prisma/network.js.map +1 -1
  32. package/dist/adapters/prisma/registry.js +2 -0
  33. package/dist/adapters/prisma/registry.js.map +1 -1
  34. package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
  35. package/dist/adapters/prisma/unit-of-work.js +2 -1
  36. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  37. package/dist/adapters/trpc/console.d.ts +2 -1
  38. package/dist/adapters/trpc/console.js +6 -2
  39. package/dist/adapters/trpc/console.js.map +1 -1
  40. package/dist/adapters/trpc/context.d.ts +9 -1
  41. package/dist/adapters/trpc/fleet.d.ts +46 -3
  42. package/dist/adapters/trpc/fleet.js +34 -6
  43. package/dist/adapters/trpc/fleet.js.map +1 -1
  44. package/dist/adapters/trpc/router.d.ts +52 -3
  45. package/dist/adapters/trpc/ship-contract.js +2 -0
  46. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  47. package/dist/adapters/trpc/ship-protocol.js +2 -2
  48. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  49. package/dist/adapters/trpc/system.d.ts +15 -0
  50. package/dist/adapters/trpc/system.js +10 -1
  51. package/dist/adapters/trpc/system.js.map +1 -1
  52. package/dist/adapters/trpc/trpc.d.ts +11 -0
  53. package/dist/adapters/trpc/trpc.js +26 -10
  54. package/dist/adapters/trpc/trpc.js.map +1 -1
  55. package/dist/app.js +2 -1
  56. package/dist/app.js.map +1 -1
  57. package/dist/domain/registry/check-reach.d.ts +15 -0
  58. package/dist/domain/registry/check-reach.js +4 -4
  59. package/dist/domain/registry/check-reach.js.map +1 -1
  60. package/dist/domain/registry/declare-network-rules.d.ts +33 -0
  61. package/dist/domain/registry/declare-network-rules.js +30 -0
  62. package/dist/domain/registry/declare-network-rules.js.map +1 -0
  63. package/dist/domain/registry/declared-network-rules.d.ts +60 -0
  64. package/dist/domain/registry/declared-network-rules.js +70 -0
  65. package/dist/domain/registry/declared-network-rules.js.map +1 -0
  66. package/dist/domain/registry/explain-reach.d.ts +34 -0
  67. package/dist/domain/registry/explain-reach.js +42 -0
  68. package/dist/domain/registry/explain-reach.js.map +1 -0
  69. package/dist/domain/registry/label.d.ts +8 -10
  70. package/dist/domain/registry/label.js +4 -16
  71. package/dist/domain/registry/label.js.map +1 -1
  72. package/dist/domain/registry/network-settings.d.ts +26 -13
  73. package/dist/domain/registry/network-settings.js +68 -31
  74. package/dist/domain/registry/network-settings.js.map +1 -1
  75. package/dist/domain/registry/ports.d.ts +12 -0
  76. package/dist/domain/registry/read-assigned-crew-requests.d.ts +2 -2
  77. package/dist/domain/registry/read-assigned-crew-requests.js +2 -1
  78. package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -1
  79. package/dist/domain/registry/read-declared-network-rules.d.ts +16 -0
  80. package/dist/domain/registry/read-declared-network-rules.js +9 -0
  81. package/dist/domain/registry/read-declared-network-rules.js.map +1 -0
  82. package/dist/domain/registry/retire-ship.d.ts +4 -2
  83. package/dist/domain/registry/retire-ship.js +10 -1
  84. package/dist/domain/registry/retire-ship.js.map +1 -1
  85. package/dist/domain/registry/set-network-rules.d.ts +4 -2
  86. package/dist/domain/registry/set-network-rules.js +4 -2
  87. package/dist/domain/registry/set-network-rules.js.map +1 -1
  88. package/dist/domain/registry/unassign-label.js +1 -1
  89. package/dist/domain/registry/unassign-label.js.map +1 -1
  90. package/dist/domain/shared/errors.d.ts +1 -1
  91. package/dist/domain/shared/errors.js.map +1 -1
  92. package/dist/wiring.d.ts +6 -0
  93. package/dist/wiring.js +7 -1
  94. package/dist/wiring.js.map +1 -1
  95. package/package.json +3 -2
  96. package/src/adapters/prisma/migrations/20261010110000_network_rules_through_plugin/migration.sql +4 -0
  97. package/src/adapters/prisma/migrations/20261010130000_cleared_network_rules_on_record/migration.sql +57 -0
  98. package/src/adapters/prisma/migrations/20261010210000_declared_network_rules/migration.sql +16 -0
  99. package/src/adapters/prisma/schema.prisma +17 -0
@@ -0,0 +1,33 @@
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 DeclareNetworkRulesRefusal } from './declared-network-rules.js';
8
+ import type { NetworkRule } from './network-settings.js';
9
+ import type { DeclaredNetworkRulesRepository, LabelRepository, ShipRepository } from './ports.js';
10
+ export interface DeclareNetworkRulesTx {
11
+ labels: Pick<LabelRepository, 'find' | 'findByValueForShare'>;
12
+ ships: Pick<ShipRepository, 'find'>;
13
+ declaredNetworkRules: Pick<DeclaredNetworkRulesRepository, 'save'>;
14
+ events: EventLog;
15
+ }
16
+ export type DeclareNetworkRules = (caller: Caller, input: {
17
+ rules: readonly NetworkRule[];
18
+ }) => Promise<Result<{
19
+ rules: number;
20
+ }, DeclareNetworkRulesRefusal>>;
21
+ /**
22
+ * Use case: a ship declares the network rules it needs on the labels it owns,
23
+ * its whole list, or none to withdraw them (decision 0037). Its scope
24
+ * (labels:define) is checked before this runs. In one unit of work: the
25
+ * labels its terms name as the fleet has them now, its list in place of the
26
+ * one before, and NetworkRulesDeclared. Nothing comes in force here: the
27
+ * networking plugin adds them to argo's rules when it supplies the list.
28
+ */
29
+ export declare function createDeclareNetworkRules(deps: {
30
+ uow: UnitOfWork<DeclareNetworkRulesTx>;
31
+ clock: Clock;
32
+ ids: IdGenerator;
33
+ }): DeclareNetworkRules;
@@ -0,0 +1,30 @@
1
+ import { recordEvent, shipActor } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { declareNetworkRules, namedInRules } from './declared-network-rules.js';
4
+ /**
5
+ * Use case: a ship declares the network rules it needs on the labels it owns,
6
+ * its whole list, or none to withdraw them (decision 0037). Its scope
7
+ * (labels:define) is checked before this runs. In one unit of work: the
8
+ * labels its terms name as the fleet has them now, its list in place of the
9
+ * one before, and NetworkRulesDeclared. Nothing comes in force here: the
10
+ * networking plugin adds them to argo's rules when it supplies the list.
11
+ */
12
+ export function createDeclareNetworkRules(deps) {
13
+ return (caller, input) => deps.uow.run(async (tx) => {
14
+ const { fleetId, shipId } = caller;
15
+ const { labelIds, valueIds } = namedInRules(input.rules);
16
+ const found = await Promise.all([...labelIds.map((labelId) => tx.labels.find(fleetId, labelId)), ...valueIds.map((valueId) => tx.labels.findByValueForShare(fleetId, valueId))]);
17
+ const labels = found.filter((label) => label !== undefined);
18
+ const ownerNames = new Map(await Promise.all(labels.map(async (label) => [label.ownerShipId, (await tx.ships.find(fleetId, label.ownerShipId))?.name ?? label.ownerShipId])));
19
+ const declared = declareNetworkRules({ labels, ownerNameOf: (ownerShipId) => ownerNames.get(ownerShipId) ?? ownerShipId }, { fleetId, shipId, rules: input.rules, at: deps.clock.now(), actor: shipActor(shipId) });
20
+ if (!declared.isOk) {
21
+ return declared;
22
+ }
23
+ await tx.declaredNetworkRules.save(declared.value.declared);
24
+ for (const event of declared.value.events) {
25
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
26
+ }
27
+ return ok({ rules: declared.value.declared.rules.length });
28
+ });
29
+ }
30
+ //# sourceMappingURL=declare-network-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declare-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/declare-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,mBAAmB,EAAE,YAAY,EAAmC,MAAM,6BAA6B,CAAC;AAcjH;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAgF;IACxH,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAkE,EAAE;QACxF,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACnC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjL,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,WAAW,CAAU,CAAC,CAAC,CAAC,CAAC;QACvL,MAAM,QAAQ,GAAG,mBAAmB,CAClC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,EAAE,EACpF,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CACxF,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,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,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,60 @@
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 { type FleetId, type LabelId, type LabelValueId, type ShipId } from '@aeolus-fleet/common';
9
+ import { type DomainError } from '../shared/errors.js';
10
+ import type { Actor, NewEvent } from '../shared/events.js';
11
+ import { type Result } from '../shared/result.js';
12
+ import type { Label } from './label.js';
13
+ import { type NetworkRule } from './network-settings.js';
14
+ /** One ship's declared rules, its whole list; a ship that declares none holds none. */
15
+ export interface DeclaredNetworkRules {
16
+ fleetId: FleetId;
17
+ shipId: ShipId;
18
+ rules: readonly NetworkRule[];
19
+ }
20
+ export type DeclareNetworkRulesRefusal = DomainError<'INVALID_NETWORK_RULES' | 'NOT_THE_LABEL_OWNER' | 'LABEL_NOT_FOUND' | 'LABEL_VALUE_NOT_FOUND'>;
21
+ /** The labels a declaration's terms name, as the fleet has them now, with each owner's name for a refusal. */
22
+ export interface NamedLabels {
23
+ labels: readonly Label[];
24
+ ownerNameOf: (shipId: ShipId) => string;
25
+ }
26
+ /** Every label and every exact value the rules' terms name, each once: what the caller looks up before declaring. */
27
+ export declare function namedInRules(rules: readonly NetworkRule[]): {
28
+ labelIds: LabelId[];
29
+ valueIds: LabelValueId[];
30
+ };
31
+ /**
32
+ * The ship declares its whole list from now on, replacing what it declared
33
+ * before; an empty list withdraws them. At most 20, each rule within
34
+ * decision 0034's own limits, and every term on a label the ship owns: an
35
+ * exact value's label, and the label of a term of any or the same value. An
36
+ * id the fleet does not have is refused, as its owner cannot be checked.
37
+ * NetworkRulesDeclared names the ship and the number of rules, never them.
38
+ */
39
+ export declare function declareNetworkRules(named: NamedLabels, change: {
40
+ fleetId: FleetId;
41
+ shipId: ShipId;
42
+ rules: readonly NetworkRule[];
43
+ at: Date;
44
+ actor: Actor;
45
+ }): Result<{
46
+ declared: DeclaredNetworkRules;
47
+ events: NewEvent[];
48
+ }, DeclareNetworkRulesRefusal>;
49
+ /**
50
+ * The retired ship's declared rules go with it, as its labels do (decision
51
+ * 0031): none from now on, with NetworkRulesDeclared of none. A ship that
52
+ * declared none changes nothing.
53
+ */
54
+ export declare function withdrawWithRetiredShip(current: DeclaredNetworkRules | undefined, change: {
55
+ at: Date;
56
+ actor: Actor;
57
+ }): {
58
+ declared: DeclaredNetworkRules;
59
+ events: NewEvent[];
60
+ } | undefined;
@@ -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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"}
@@ -0,0 +1,34 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { Caller } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
7
+ import { type CheckReachTx } from './check-reach.js';
8
+ import type { ShipRepository } from './ports.js';
9
+ export interface ExplainReachTx {
10
+ networkSettings: CheckReachTx['networkSettings'];
11
+ ships: Pick<ShipRepository, 'find' | 'listActive'>;
12
+ labels: CheckReachTx['labels'];
13
+ leases: CheckReachTx['leases'];
14
+ }
15
+ export type ExplainReachFailure = DomainError<'NOT_THE_OPERATOR_SHIP' | 'SHIP_NOT_FOUND'>;
16
+ export type ExplainReach = (caller: Caller, input: {
17
+ fromShipId: ShipId;
18
+ toShipId?: ShipId;
19
+ }) => Promise<Result<{
20
+ reachableShipIds: ShipId[];
21
+ }, ExplainReachFailure>>;
22
+ /**
23
+ * Use case: argo asks which ships a ship reaches now, or whether it reaches
24
+ * one ship (design points 11 and 12 on #260). It answers as a send would be
25
+ * checked at this moment: the rules in force, what the networking plugin
26
+ * declared while it does not respond, argo both ways. There is no message, so
27
+ * no answer to a sender. It answers the ships, never the rules or the reasons,
28
+ * and records nothing: an explain is not a send. Only argo; the viewer ship
29
+ * receives nothing, so it is never reached.
30
+ */
31
+ export declare function createExplainReach(deps: {
32
+ uow: UnitOfWork<ExplainReachTx>;
33
+ clock: Clock;
34
+ }): ExplainReach;
@@ -0,0 +1,42 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { reaching, rulesInForceAt, shipAsItIs } from './check-reach.js';
4
+ import { allowsReach } from './network-settings.js';
5
+ /**
6
+ * Use case: argo asks which ships a ship reaches now, or whether it reaches
7
+ * one ship (design points 11 and 12 on #260). It answers as a send would be
8
+ * checked at this moment: the rules in force, what the networking plugin
9
+ * declared while it does not respond, argo both ways. There is no message, so
10
+ * no answer to a sender. It answers the ships, never the rules or the reasons,
11
+ * and records nothing: an explain is not a send. Only argo; the viewer ship
12
+ * receives nothing, so it is never reached.
13
+ */
14
+ export function createExplainReach(deps) {
15
+ return (caller, input) => deps.uow.run(async (tx) => {
16
+ if (caller.kind !== 'operator') {
17
+ return refuse('NOT_THE_OPERATOR_SHIP', 'Only argo explains reach');
18
+ }
19
+ const { fleetId } = caller;
20
+ const from = await tx.ships.find(fleetId, input.fromShipId);
21
+ if (from?.retiredAt !== null) {
22
+ return refuse('SHIP_NOT_FOUND', 'The fleet has no active ship with this id to explain from');
23
+ }
24
+ const active = await tx.ships.listActive(fleetId);
25
+ const others = active.filter((ship) => ship.id !== from.id && (input.toShipId === undefined || ship.id === input.toShipId));
26
+ if (input.toShipId !== undefined && others.length === 0 && input.toShipId !== from.id) {
27
+ return refuse('SHIP_NOT_FOUND', 'The fleet has no active ship with this id to explain reach to');
28
+ }
29
+ const settings = await tx.networkSettings.findForShare(fleetId);
30
+ const inForce = await rulesInForceAt(tx, { settings, now: deps.clock.now() });
31
+ const sender = reaching(await shipAsItIs(tx, from));
32
+ const reachableShipIds = [];
33
+ for (const ship of others) {
34
+ const recipient = reaching(await shipAsItIs(tx, ship));
35
+ if (allowsReach(inForce, { sender, recipient, isAnswerToSender: false })) {
36
+ reachableShipIds.push(ship.id);
37
+ }
38
+ }
39
+ return ok({ reachableShipIds });
40
+ });
41
+ }
42
+ //# sourceMappingURL=explain-reach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-reach.js","sourceRoot":"","sources":["../../../src/domain/registry/explain-reach.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAiBpD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAuD;IACxF,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAwE,EAAE;QAC9F,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,gBAAgB,EAAE,2DAA2D,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5H,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YACtF,OAAO,MAAM,CAAC,gBAAgB,EAAE,+DAA+D,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACvD,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACzE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -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, never to itself. It retires with its
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 OwnShip = DomainError<'LABEL_ON_OWN_SHIP'>;
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. Never the owner's own ship or a retired ship;
137
- * argo and the viewer ship as any other (decision 0016). A ship carries at
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 | OwnShip;
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, ship, carried, }: {
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. Never the owner's own ship or a retired ship;
184
- * argo and the viewer ship as any other (decision 0016). A ship carries at
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, ship, carried, }, input) {
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":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAKhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAwDtD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC,EAAE,QAA6C;IAC1G,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;AACjG,CAAC;AAMD,MAAM,MAAM,GAAG,qCAAqC,MAAM,CAAC,uBAAuB,CAAC,6BAA6B,CAAC;AAEjH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,MAAM,IAAI,uBAAuB,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,kBAAkB,MAAM,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,oGAAoG;AACpG,SAAS,eAAe,CAAC,MAAyB;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,MAAM,CAAC,sBAAsB,EAAE,uCAAuC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC;AAED,wEAAwE;AACxE,SAAS,OAAO,CAAC,MAAgC,EAAE,IAA2B;IAC5E,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,EAAE,IAAI,KAAK;QAC1D,KAAK;KACN,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CACjB,KAAY,EACZ,MAIC;IAED,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,MAAM,CAAC,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,KAAK,CAAC,WAAW;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,+HAA+H;AAC/H,SAAS,aAAa,CAAC,MAA6B;IAClD,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACpD,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACpD,CAAC;AACJ,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,EACE,KAAK,EACL,QAAQ,GAIT,EACD,KAMC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,GAAG,CAAC,KAAK,sBAAsB,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,KAAK,GAAU;QACnB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,GAAG,EAAE,GAAG,CAAC,KAAK;QACd,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,WAAW,EAAE,KAAK,CAAC,EAAE;KACtB,CAAC;IACF,OAAO,EAAE,CAAC;QACR,KAAK;QACL,MAAM,EAAE;YACN,UAAU,CAAC,KAAK,EAAE;gBAChB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;aACrC,CAAC;SACH;KACF,CAAC,CAAC;AACL,CAAC;AAID,qDAAqD;AACrD,SAAS,UAAU,CACjB,EAAE,KAAK,EAAE,SAAS,EAAuC,EACzD,MAGC;IAED,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,MAAM;QACxC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,aAAa,KAAK,CAAC,GAAG,gBAAgB,SAAS,oBAAoB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;AACxH,CAAC;AAID;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EACE,KAAK,EACL,SAAS,EACT,QAAQ,GAKT,EACD,KAKC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO;SACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,KAAK;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KACrG,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/G,OAAO,MAAM,CAAC,qBAAqB,EAAE,eAAe,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,OAAO,GAAU;QACrB,GAAG,KAAK;QACR,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;KAC5C,CAAC;IACF,OAAO,EAAE,CAAC;QACR,KAAK,EAAE,OAAO;QACd,MAAM,EAAE;YACN,UAAU,CAAC,OAAO,EAAE;gBAClB,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;aACvC,CAAC;SACH;KACF,CAAC,CAAC;AACL,CAAC;AAID;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAwE,EACxG,KAAuD;IAEvD,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,eAAe,EAAE,yBAAyB,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,SAAS,eAAe,CACtB,EAAE,KAAK,EAAE,UAAU,EAA2C,EAC9D,MAA6E;IAE7E,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,UAAU,EAAE,MAAM,CAAC,EAAE;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE;YACP,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE;SAClF;KACF,CAAC;AACJ,CAAC;AAID,qGAAqG;AACrG,SAAS,eAAe,CAAC,KAAY,EAAE,IAAU;IAC/C,OAAO,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,KAAK,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACrJ,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,EACE,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,GAMR,EACD,KAKC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/F,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,0BAA0B,EAAE,GAAG,IAAI,CAAC,IAAI,YAAY,MAAM,CAAC,eAAe,CAAC,kDAAkD,CAAC,CAAC;IAC/I,CAAC;IACD,MAAM,UAAU,GAAc;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,OAAO,EAAE,CAAC;QACR,UAAU;QACV,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KAC9G,CAAC,CAAC;AACL,CAAC;AAID;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,EACE,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,GAMR,EACD,KAKC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,CAAC;QACR,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;KAChI,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EACE,KAAK,EACL,OAAO,GAIR,EACD,KAAiC;IAEjC,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,UAAqB,EAAE,EAAE;QACvD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACxC,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;YAClC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;QAC5C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1E,CAAC"}
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 carrying every one of these label values may send to the ships carrying every one of those. */
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 LabelValueId[];
15
- to: readonly LabelValueId[];
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
@@ -27,7 +27,7 @@ export interface NetworkSettings {
27
27
  rules: readonly NetworkRule[] | null;
28
28
  /** 0 until the fleet first changes its settings; one more on every change. */
29
29
  version: number;
30
- /** The fleet's networking plugin, or none: then anyone with fleet:network sets the rules. */
30
+ /** The fleet's networking plugin, or none: then the fleet has no rules, and nobody sets them. */
31
31
  plugin: NetworkPlugin | null;
32
32
  }
33
33
  /** A fleet that never set rules: none, at version 0, without a plugin. */
@@ -37,8 +37,8 @@ export type SetNetworkRulesRefusal = DomainError<'INVALID_NETWORK_RULES'> | NotT
37
37
  export type RegisterNetworkPluginRefusal = DomainError<'NETWORK_PLUGIN_REGISTERED'>;
38
38
  /**
39
39
  * The ship becomes the fleet's networking plugin, with what it declared, at
40
- * the next version, with NetworkPluginRegistered. The rules stay until it
41
- * supplies its own. The plugin may register again, replacing what it
40
+ * the next version, with NetworkPluginRegistered. A fleet without a plugin
41
+ * has no rules, so the plugin starts from none until it supplies its own. The plugin may register again, replacing what it
42
42
  * declared; another ship is refused until it unregisters: one owner of the
43
43
  * rules, as a label has one.
44
44
  */
@@ -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 decision's limits:
70
- * at most 200, each selector at most 20 label values, as a ship carries no
71
- * more, each once. A value id need not exist: an unknown one matches no ship,
72
- * as in label selection. While a networking plugin is registered, only its
73
- * ship sets them (decision 0035).
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 LabelValueId[];
122
+ labels: readonly ReachingLabel[];
110
123
  }
111
124
  /**
112
125
  * Whether the settings let the sender reach the recipient. With no rules,