@aeolus-fleet/core 0.27.1 → 0.28.1
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/crypto/account-token-signatures.d.ts +12 -0
- package/dist/adapters/crypto/account-token-signatures.js +104 -0
- package/dist/adapters/crypto/account-token-signatures.js.map +1 -0
- package/dist/adapters/http/request-credentials.d.ts +7 -1
- package/dist/adapters/http/request-credentials.js +18 -5
- package/dist/adapters/http/request-credentials.js.map +1 -1
- package/dist/adapters/http/server.js +4 -2
- package/dist/adapters/http/server.js.map +1 -1
- package/dist/adapters/prisma/event-log.js +13 -1
- package/dist/adapters/prisma/event-log.js.map +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +30 -0
- package/dist/adapters/prisma/generated/client.d.ts +30 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +120 -0
- package/dist/adapters/prisma/generated/enums.d.ts +25 -0
- package/dist/adapters/prisma/generated/enums.js +22 -1
- package/dist/adapters/prisma/generated/enums.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/class.d.ts +44 -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 +372 -9
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +38 -11
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +39 -8
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +38 -11
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/AccountCutOff.d.ts +944 -0
- package/dist/adapters/prisma/generated/models/AccountCutOff.js +2 -0
- package/dist/adapters/prisma/generated/models/AccountCutOff.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ConsoleSession.d.ts +59 -1
- package/dist/adapters/prisma/generated/models/Event.d.ts +426 -1
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +871 -0
- package/dist/adapters/prisma/generated/models/InstallationDeclaredNetworkRules.d.ts +1031 -0
- package/dist/adapters/prisma/generated/models/InstallationDeclaredNetworkRules.js +2 -0
- package/dist/adapters/prisma/generated/models/InstallationDeclaredNetworkRules.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Label.d.ts +113 -39
- package/dist/adapters/prisma/generated/models/NetworkRulesDraft.d.ts +1133 -0
- package/dist/adapters/prisma/generated/models/NetworkRulesDraft.js +2 -0
- package/dist/adapters/prisma/generated/models/NetworkRulesDraft.js.map +1 -0
- package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +24 -255
- package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +1 -40
- package/dist/adapters/prisma/generated/models/Ship.d.ts +782 -6
- package/dist/adapters/prisma/generated/models/SignInTicket.d.ts +39 -1
- package/dist/adapters/prisma/generated/models/VerifiedFacts.d.ts +1325 -0
- package/dist/adapters/prisma/generated/models/VerifiedFacts.js +2 -0
- package/dist/adapters/prisma/generated/models/VerifiedFacts.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +4 -0
- package/dist/adapters/prisma/history.js +1 -0
- package/dist/adapters/prisma/history.js.map +1 -1
- package/dist/adapters/prisma/identity.d.ts +3 -1
- package/dist/adapters/prisma/identity.js +41 -8
- package/dist/adapters/prisma/identity.js.map +1 -1
- package/dist/adapters/prisma/network.d.ts +7 -2
- package/dist/adapters/prisma/network.js +92 -65
- package/dist/adapters/prisma/network.js.map +1 -1
- package/dist/adapters/prisma/registry.js +19 -14
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/rows.d.ts +9 -4
- package/dist/adapters/prisma/rows.js +75 -19
- package/dist/adapters/prisma/rows.js.map +1 -1
- package/dist/adapters/prisma/unit-of-work.d.ts +4 -2
- package/dist/adapters/prisma/unit-of-work.js +5 -2
- package/dist/adapters/prisma/unit-of-work.js.map +1 -1
- package/dist/adapters/prisma/verified-facts.d.ts +4 -0
- package/dist/adapters/prisma/verified-facts.js +65 -0
- package/dist/adapters/prisma/verified-facts.js.map +1 -0
- package/dist/adapters/rest/rest-api.js +2 -2
- package/dist/adapters/rest/rest-api.js.map +1 -1
- package/dist/adapters/trpc/console.d.ts +3 -1
- package/dist/adapters/trpc/context.d.ts +22 -8
- package/dist/adapters/trpc/fleet.d.ts +259 -52
- package/dist/adapters/trpc/fleet.js +121 -84
- package/dist/adapters/trpc/fleet.js.map +1 -1
- package/dist/adapters/trpc/installation-token.d.ts +7 -0
- package/dist/adapters/trpc/installation-token.js +10 -0
- package/dist/adapters/trpc/installation-token.js.map +1 -0
- package/dist/adapters/trpc/installation.d.ts +32 -2
- package/dist/adapters/trpc/installation.js +14 -10
- package/dist/adapters/trpc/installation.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +307 -43
- package/dist/adapters/trpc/ship-contract.js +6 -4
- package/dist/adapters/trpc/ship-contract.js.map +1 -1
- package/dist/adapters/trpc/ship.d.ts +32 -1
- package/dist/adapters/trpc/ship.js +4 -2
- package/dist/adapters/trpc/ship.js.map +1 -1
- package/dist/adapters/trpc/trpc.d.ts +36 -13
- package/dist/adapters/trpc/trpc.js +117 -26
- package/dist/adapters/trpc/trpc.js.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/app.js +22 -0
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/domain/identity/authenticate-account.d.ts +35 -0
- package/dist/domain/identity/authenticate-account.js +54 -0
- package/dist/domain/identity/authenticate-account.js.map +1 -0
- package/dist/domain/identity/authenticate-installation.d.ts +23 -0
- package/dist/domain/identity/authenticate-installation.js +20 -0
- package/dist/domain/identity/authenticate-installation.js.map +1 -0
- package/dist/domain/identity/authenticate.d.ts +2 -2
- package/dist/domain/identity/console-session.d.ts +6 -3
- package/dist/domain/identity/console-session.js.map +1 -1
- package/dist/domain/identity/cut-off-account.d.ts +29 -0
- package/dist/domain/identity/cut-off-account.js +37 -0
- package/dist/domain/identity/cut-off-account.js.map +1 -0
- package/dist/domain/identity/dismiss-notice.d.ts +2 -2
- package/dist/domain/identity/issue-sign-in-ticket.d.ts +9 -3
- package/dist/domain/identity/issue-sign-in-ticket.js +8 -2
- package/dist/domain/identity/issue-sign-in-ticket.js.map +1 -1
- package/dist/domain/identity/ports.d.ts +52 -5
- package/dist/domain/identity/read-account.d.ts +8 -4
- package/dist/domain/identity/read-account.js +1 -1
- package/dist/domain/identity/read-account.js.map +1 -1
- package/dist/domain/identity/read-guide.d.ts +2 -2
- package/dist/domain/identity/read-notices.d.ts +2 -2
- package/dist/domain/identity/record-guide-progress.d.ts +2 -2
- package/dist/domain/identity/redeem-sign-in-ticket.d.ts +2 -1
- package/dist/domain/identity/redeem-sign-in-ticket.js +3 -2
- package/dist/domain/identity/redeem-sign-in-ticket.js.map +1 -1
- package/dist/domain/identity/set-theme.d.ts +2 -2
- package/dist/domain/identity/sign-in-ticket.d.ts +3 -1
- package/dist/domain/identity/sign-in.d.ts +2 -2
- package/dist/domain/identity/sign-in.js +2 -0
- package/dist/domain/identity/sign-in.js.map +1 -1
- package/dist/domain/identity/sign-out.d.ts +2 -2
- package/dist/domain/identity/sign-out.js +1 -1
- package/dist/domain/identity/sign-out.js.map +1 -1
- package/dist/domain/identity/start-console-session.d.ts +4 -2
- package/dist/domain/identity/start-console-session.js +6 -4
- package/dist/domain/identity/start-console-session.js.map +1 -1
- package/dist/domain/identity/start-viewer-session.js +1 -0
- package/dist/domain/identity/start-viewer-session.js.map +1 -1
- package/dist/domain/messaging/delivery.d.ts +3 -1
- package/dist/domain/messaging/delivery.js +9 -6
- package/dist/domain/messaging/delivery.js.map +1 -1
- package/dist/domain/messaging/dismiss-delivery.d.ts +2 -2
- package/dist/domain/messaging/message.d.ts +3 -1
- package/dist/domain/messaging/message.js +1 -1
- package/dist/domain/messaging/message.js.map +1 -1
- package/dist/domain/messaging/ping-ship.d.ts +2 -2
- package/dist/domain/messaging/ping-ship.js +1 -1
- package/dist/domain/messaging/ping-ship.js.map +1 -1
- package/dist/domain/messaging/resend-delivery.d.ts +2 -2
- package/dist/domain/messaging/resend-delivery.js +1 -0
- package/dist/domain/messaging/resend-delivery.js.map +1 -1
- package/dist/domain/messaging/send-message.d.ts +3 -3
- package/dist/domain/messaging/send-message.js +1 -0
- package/dist/domain/messaging/send-message.js.map +1 -1
- package/dist/domain/registry/apply-network-rules.d.ts +32 -0
- package/dist/domain/registry/apply-network-rules.js +33 -0
- package/dist/domain/registry/apply-network-rules.js.map +1 -0
- package/dist/domain/registry/assign-crew.d.ts +2 -2
- package/dist/domain/registry/assign-crew.js +3 -2
- package/dist/domain/registry/assign-crew.js.map +1 -1
- package/dist/domain/registry/assign-label.d.ts +7 -5
- package/dist/domain/registry/assign-label.js +16 -6
- package/dist/domain/registry/assign-label.js.map +1 -1
- package/dist/domain/registry/change-label-values.d.ts +1 -1
- package/dist/domain/registry/change-label-values.js +4 -3
- package/dist/domain/registry/change-label-values.js.map +1 -1
- package/dist/domain/registry/check-reach.d.ts +45 -24
- package/dist/domain/registry/check-reach.js +76 -42
- package/dist/domain/registry/check-reach.js.map +1 -1
- package/dist/domain/registry/clear-request.d.ts +1 -1
- package/dist/domain/registry/clear-request.js +1 -1
- package/dist/domain/registry/clear-request.js.map +1 -1
- package/dist/domain/registry/commission-ship.d.ts +23 -14
- package/dist/domain/registry/commission-ship.js +167 -21
- package/dist/domain/registry/commission-ship.js.map +1 -1
- package/dist/domain/registry/confirm-crew-release.d.ts +2 -2
- package/dist/domain/registry/confirm-crew-release.js +3 -2
- package/dist/domain/registry/confirm-crew-release.js.map +1 -1
- package/dist/domain/registry/confirm-worktree-cleared.d.ts +2 -2
- package/dist/domain/registry/confirm-worktree-cleared.js +3 -2
- package/dist/domain/registry/confirm-worktree-cleared.js.map +1 -1
- package/dist/domain/registry/connect-plugin.d.ts +5 -4
- package/dist/domain/registry/connect-plugin.js +6 -7
- package/dist/domain/registry/connect-plugin.js.map +1 -1
- package/dist/domain/registry/crew-request.d.ts +2 -2
- package/dist/domain/registry/crew-request.js.map +1 -1
- package/dist/domain/registry/declare-network-rules.d.ts +9 -6
- package/dist/domain/registry/declare-network-rules.js +13 -8
- package/dist/domain/registry/declare-network-rules.js.map +1 -1
- package/dist/domain/registry/declare-scopes.d.ts +2 -2
- package/dist/domain/registry/declared-network-rules.d.ts +30 -21
- package/dist/domain/registry/declared-network-rules.js +46 -22
- package/dist/domain/registry/declared-network-rules.js.map +1 -1
- package/dist/domain/registry/define-label.d.ts +1 -1
- package/dist/domain/registry/define-label.js +5 -5
- package/dist/domain/registry/define-label.js.map +1 -1
- package/dist/domain/registry/delete-label.d.ts +1 -1
- package/dist/domain/registry/delete-label.js +4 -3
- package/dist/domain/registry/delete-label.js.map +1 -1
- package/dist/domain/registry/discard-network-rules-draft.d.ts +23 -0
- package/dist/domain/registry/discard-network-rules-draft.js +24 -0
- package/dist/domain/registry/discard-network-rules-draft.js.map +1 -0
- package/dist/domain/registry/discover.d.ts +11 -10
- package/dist/domain/registry/discover.js +11 -5
- package/dist/domain/registry/discover.js.map +1 -1
- package/dist/domain/registry/explain-crew-request.d.ts +2 -2
- package/dist/domain/registry/explain-crew-request.js +3 -2
- package/dist/domain/registry/explain-crew-request.js.map +1 -1
- package/dist/domain/registry/explain-reach.d.ts +21 -14
- package/dist/domain/registry/explain-reach.js +53 -53
- package/dist/domain/registry/explain-reach.js.map +1 -1
- package/dist/domain/registry/get-ship.d.ts +2 -2
- package/dist/domain/registry/get-starting-prompt.d.ts +4 -2
- package/dist/domain/registry/get-starting-prompt.js +7 -5
- package/dist/domain/registry/get-starting-prompt.js.map +1 -1
- package/dist/domain/registry/give-back-crew-request.d.ts +2 -2
- package/dist/domain/registry/give-back-crew-request.js +3 -2
- package/dist/domain/registry/give-back-crew-request.js.map +1 -1
- package/dist/domain/registry/grant-scopes.d.ts +8 -5
- package/dist/domain/registry/grant-scopes.js +14 -5
- package/dist/domain/registry/grant-scopes.js.map +1 -1
- package/dist/domain/registry/label.d.ts +69 -18
- package/dist/domain/registry/label.js +79 -28
- package/dist/domain/registry/label.js.map +1 -1
- package/dist/domain/registry/lease.d.ts +1 -1
- package/dist/domain/registry/list-fleet.d.ts +2 -0
- package/dist/domain/registry/list-fleet.js +1 -0
- package/dist/domain/registry/list-fleet.js.map +1 -1
- package/dist/domain/registry/list-scopes.d.ts +2 -1
- package/dist/domain/registry/list-scopes.js +2 -1
- package/dist/domain/registry/list-scopes.js.map +1 -1
- package/dist/domain/registry/managed-or-assigned.d.ts +12 -4
- package/dist/domain/registry/managed-or-assigned.js +25 -7
- package/dist/domain/registry/managed-or-assigned.js.map +1 -1
- package/dist/domain/registry/network-rules-draft.d.ts +45 -0
- package/dist/domain/registry/network-rules-draft.js +41 -0
- package/dist/domain/registry/network-rules-draft.js.map +1 -0
- package/dist/domain/registry/network-settings.d.ts +92 -122
- package/dist/domain/registry/network-settings.js +99 -159
- package/dist/domain/registry/network-settings.js.map +1 -1
- package/dist/domain/registry/ports.d.ts +47 -11
- package/dist/domain/registry/reach-refusal.d.ts +18 -4
- package/dist/domain/registry/read-assigned-crew-requests.d.ts +2 -2
- package/dist/domain/registry/read-built-in-rules.d.ts +4 -3
- package/dist/domain/registry/read-built-in-rules.js +7 -6
- package/dist/domain/registry/read-built-in-rules.js.map +1 -1
- package/dist/domain/registry/read-clear-requests.d.ts +2 -2
- package/dist/domain/registry/read-clear-requests.js.map +1 -1
- package/dist/domain/registry/read-declared-network-rules.d.ts +5 -5
- package/dist/domain/registry/read-declared-network-rules.js +4 -4
- package/dist/domain/registry/read-declared-network-rules.js.map +1 -1
- package/dist/domain/registry/read-network-rules-draft-changes.d.ts +22 -0
- package/dist/domain/registry/read-network-rules-draft-changes.js +53 -0
- package/dist/domain/registry/read-network-rules-draft-changes.js.map +1 -0
- package/dist/domain/registry/read-network-rules.d.ts +30 -0
- package/dist/domain/registry/read-network-rules.js +18 -0
- package/dist/domain/registry/read-network-rules.js.map +1 -0
- package/dist/domain/registry/read-on-behalf.d.ts +3 -3
- package/dist/domain/registry/read-on-behalf.js.map +1 -1
- package/dist/domain/registry/read-reach-refusals.d.ts +6 -5
- package/dist/domain/registry/read-reach-refusals.js +13 -8
- package/dist/domain/registry/read-reach-refusals.js.map +1 -1
- package/dist/domain/registry/read-reach.d.ts +6 -8
- package/dist/domain/registry/read-reach.js +21 -16
- package/dist/domain/registry/read-reach.js.map +1 -1
- package/dist/domain/registry/recrew-ship.d.ts +2 -2
- package/dist/domain/registry/recrew-ship.js +3 -3
- package/dist/domain/registry/recrew-ship.js.map +1 -1
- package/dist/domain/registry/release-ship.d.ts +3 -2
- package/dist/domain/registry/release-ship.js +4 -3
- package/dist/domain/registry/release-ship.js.map +1 -1
- package/dist/domain/registry/remove-crew-request.d.ts +2 -2
- package/dist/domain/registry/remove-crew-request.js +4 -3
- package/dist/domain/registry/remove-crew-request.js.map +1 -1
- package/dist/domain/registry/rename-ship.d.ts +1 -1
- package/dist/domain/registry/rename-ship.js +4 -3
- package/dist/domain/registry/rename-ship.js.map +1 -1
- package/dist/domain/registry/report-crew-status.d.ts +2 -2
- package/dist/domain/registry/report-crew-status.js +3 -2
- package/dist/domain/registry/report-crew-status.js.map +1 -1
- package/dist/domain/registry/request-crew.d.ts +3 -3
- package/dist/domain/registry/request-crew.js +4 -3
- package/dist/domain/registry/request-crew.js.map +1 -1
- package/dist/domain/registry/request-worktree-clear.d.ts +2 -2
- package/dist/domain/registry/request-worktree-clear.js +4 -3
- package/dist/domain/registry/request-worktree-clear.js.map +1 -1
- package/dist/domain/registry/retire-ship.d.ts +16 -12
- package/dist/domain/registry/retire-ship.js +28 -21
- package/dist/domain/registry/retire-ship.js.map +1 -1
- package/dist/domain/registry/save-network-rules-draft.d.ts +31 -0
- package/dist/domain/registry/save-network-rules-draft.js +27 -0
- package/dist/domain/registry/save-network-rules-draft.js.map +1 -0
- package/dist/domain/registry/scope-grant.d.ts +19 -19
- package/dist/domain/registry/scope-grant.js +8 -9
- package/dist/domain/registry/scope-grant.js.map +1 -1
- package/dist/domain/registry/set-built-in-rule.d.ts +3 -3
- package/dist/domain/registry/set-built-in-rule.js +5 -9
- package/dist/domain/registry/set-built-in-rule.js.map +1 -1
- package/dist/domain/registry/set-owner.d.ts +9 -6
- package/dist/domain/registry/set-owner.js +14 -8
- package/dist/domain/registry/set-owner.js.map +1 -1
- package/dist/domain/registry/set-verified-facts.d.ts +36 -0
- package/dist/domain/registry/set-verified-facts.js +58 -0
- package/dist/domain/registry/set-verified-facts.js.map +1 -0
- package/dist/domain/registry/ship.d.ts +52 -18
- package/dist/domain/registry/ship.js +76 -18
- package/dist/domain/registry/ship.js.map +1 -1
- package/dist/domain/registry/statement.d.ts +2 -2
- package/dist/domain/registry/statement.js +2 -2
- package/dist/domain/registry/statement.js.map +1 -1
- package/dist/domain/registry/turn.d.ts +2 -2
- package/dist/domain/registry/turn.js +2 -2
- package/dist/domain/registry/turn.js.map +1 -1
- package/dist/domain/registry/unassign-label.d.ts +8 -5
- package/dist/domain/registry/unassign-label.js +17 -6
- package/dist/domain/registry/unassign-label.js.map +1 -1
- package/dist/domain/registry/verified-facts.d.ts +75 -0
- package/dist/domain/registry/verified-facts.js +107 -0
- package/dist/domain/registry/verified-facts.js.map +1 -0
- package/dist/domain/registry/whoami.d.ts +2 -2
- package/dist/domain/shared/caller.d.ts +40 -6
- package/dist/domain/shared/caller.js +20 -0
- package/dist/domain/shared/caller.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/events.d.ts +13 -2
- package/dist/domain/shared/events.js.map +1 -1
- package/dist/domain/shared/history.d.ts +3 -1
- package/dist/domain/shared/history.js.map +1 -1
- package/dist/domain/shared/read-fleet-limits.d.ts +2 -2
- package/dist/domain/shared/read-health.d.ts +2 -2
- package/dist/domain/shared/read-inbox.d.ts +2 -2
- package/dist/domain/shared/read-message.d.ts +2 -2
- package/dist/domain/shared/read-needs-attention.d.ts +2 -2
- package/dist/domain/shared/read-sent-message.d.ts +2 -2
- package/dist/domain/shared/read-ship-messages.d.ts +2 -2
- package/dist/domain/shared/read-ship-timeline.d.ts +2 -2
- package/dist/domain/shared/read-ship-way.d.ts +2 -2
- package/dist/domain/shared/read-ship-way.js +1 -1
- package/dist/domain/shared/read-ship-way.js.map +1 -1
- package/dist/start.js +1 -0
- package/dist/start.js.map +1 -1
- package/dist/testing/account-token-issuer.d.ts +30 -0
- package/dist/testing/account-token-issuer.js +48 -0
- package/dist/testing/account-token-issuer.js.map +1 -0
- package/dist/testing/fleet.d.ts +2 -2
- package/dist/testing/index.d.ts +1 -1
- package/dist/wiring.d.ts +21 -8
- package/dist/wiring.js +32 -13
- package/dist/wiring.js.map +1 -1
- package/package.json +2 -5
- package/src/adapters/prisma/migrations/20261019200000_account_cut_offs/migration.sql +10 -0
- package/src/adapters/prisma/migrations/20261019210000_event_actors/migration.sql +32 -0
- package/src/adapters/prisma/migrations/20261020090000_argos_jobs_as_scopes/migration.sql +65 -0
- package/src/adapters/prisma/migrations/20261020100000_installation_labels/migration.sql +7 -0
- package/src/adapters/prisma/migrations/20261020110000_installation_declared_network_rules/migration.sql +10 -0
- package/src/adapters/prisma/migrations/20261020120000_commissioning_actors/migration.sql +14 -0
- package/src/adapters/prisma/migrations/20261020130000_console_sign_in_accounts/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261020140000_event_signed_in_accounts/migration.sql +4 -0
- package/src/adapters/prisma/migrations/20261020150000_account_cut_off_ends_console_sessions/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261020160000_network_in_core/migration.sql +30 -0
- package/src/adapters/prisma/migrations/20261020170000_verify_scope/migration.sql +64 -0
- package/src/adapters/prisma/migrations/20261020180000_verified_facts/migration.sql +21 -0
- package/src/adapters/prisma/migrations/20261020190000_verified_facts_by_writer/migration.sql +3 -0
- package/src/adapters/prisma/schema.prisma +132 -23
- package/dist/domain/registry/read-network-plugin.d.ts +0 -23
- package/dist/domain/registry/read-network-plugin.js +0 -15
- package/dist/domain/registry/read-network-plugin.js.map +0 -1
- package/dist/domain/registry/register-network-plugin.d.ts +0 -28
- package/dist/domain/registry/register-network-plugin.js +0 -26
- package/dist/domain/registry/register-network-plugin.js.map +0 -1
- package/dist/domain/registry/set-network-rules.d.ts +0 -31
- package/dist/domain/registry/set-network-rules.js +0 -27
- package/dist/domain/registry/set-network-rules.js.map +0 -1
- package/dist/domain/registry/unregister-network-plugin.d.ts +0 -27
- package/dist/domain/registry/unregister-network-plugin.js +0 -25
- package/dist/domain/registry/unregister-network-plugin.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-built-in-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-built-in-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-built-in-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-built-in-rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAUtD;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA6C;IAClF,OAAO,CAAC,MAAM,EAAE,EAAE,CAChB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA8C,EAAE;QACpE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxF,OAAO,EAAE,CAAC;YACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;YAC5B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;YAC7B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;YAC9B,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;YAClC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE;YAC5C,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;YACpC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ShipCaller } from '../shared/caller.js';
|
|
2
2
|
import type { ClearRequest } from './clear-request.js';
|
|
3
3
|
import type { ClearRequestRepository } from './ports.js';
|
|
4
4
|
import { type ReadReachOf } from './read-reach.js';
|
|
5
5
|
/** A pending clear request as it is read: whose, which worktree, who asked and when. */
|
|
6
6
|
export type ListedClearRequest = Omit<ClearRequest, 'fleetId'>;
|
|
7
|
-
export type ReadClearRequests = (caller:
|
|
7
|
+
export type ReadClearRequests = (caller: ShipCaller) => Promise<ListedClearRequest[]>;
|
|
8
8
|
/**
|
|
9
9
|
* Use case: the pending clear requests (decision 0032). A caller with
|
|
10
10
|
* fleet:read reads every trierarch's for the ships it reads (decision 0034),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-clear-requests.js","sourceRoot":"","sources":["../../../src/domain/registry/read-clear-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"read-clear-requests.js","sourceRoot":"","sources":["../../../src/domain/registry/read-clear-requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAO9D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAiG;IACvI,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,QAAQ,GAAG,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACvG,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACpE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAClK,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
1
|
import type { Caller } from '../shared/caller.js';
|
|
2
|
+
import type { LabelOwner } from './label.js';
|
|
3
3
|
import type { NetworkRule } from './network-settings.js';
|
|
4
4
|
import type { DeclaredNetworkRulesRepository } from './ports.js';
|
|
5
5
|
export type ReadDeclaredNetworkRules = (caller: Caller) => Promise<{
|
|
6
|
-
|
|
6
|
+
declarer: LabelOwner;
|
|
7
7
|
rules: readonly NetworkRule[];
|
|
8
8
|
}[]>;
|
|
9
9
|
/**
|
|
10
|
-
* Use case:
|
|
11
|
-
* each ship with its whole list,
|
|
12
|
-
*
|
|
10
|
+
* Use case: an actor holding fleet:network reads every declarer's declared
|
|
11
|
+
* rules, each ship or the installation with its whole list, in force beside
|
|
12
|
+
* the fleet's own (decision 0037). Its scope is checked before this runs.
|
|
13
13
|
*/
|
|
14
14
|
export declare function createReadDeclaredNetworkRules(deps: {
|
|
15
15
|
declaredNetworkRules: Pick<DeclaredNetworkRulesRepository, 'list'>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Use case:
|
|
3
|
-
* each ship with its whole list,
|
|
4
|
-
*
|
|
2
|
+
* Use case: an actor holding fleet:network reads every declarer's declared
|
|
3
|
+
* rules, each ship or the installation with its whole list, in force beside
|
|
4
|
+
* the fleet's own (decision 0037). Its scope is checked before this runs.
|
|
5
5
|
*/
|
|
6
6
|
export function createReadDeclaredNetworkRules(deps) {
|
|
7
|
-
return async (caller) => (await deps.declaredNetworkRules.list(caller.fleetId)).map(({
|
|
7
|
+
return async (caller) => (await deps.declaredNetworkRules.list(caller.fleetId)).map(({ declarer, rules }) => ({ declarer, rules }));
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=read-declared-network-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-declared-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-declared-network-rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-declared-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-declared-network-rules.ts"],"names":[],"mappings":"AAOA;;;;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,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACtI,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type NetworkRulesDraftChanges } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Caller } from '../shared/caller.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
5
|
+
import { type ExplainReachTx } from './explain-reach.js';
|
|
6
|
+
import { type NoNetworkRulesDraft } from './network-rules-draft.js';
|
|
7
|
+
import { type ReadReachOf } from './read-reach.js';
|
|
8
|
+
export type ReadNetworkRulesDraftChangesTx = ExplainReachTx;
|
|
9
|
+
export type ReadNetworkRulesDraftChanges = (caller: Caller) => Promise<Result<NetworkRulesDraftChanges, NoNetworkRulesDraft>>;
|
|
10
|
+
/**
|
|
11
|
+
* Use case: any actor holding fleet:network asks what applying the fleet's
|
|
12
|
+
* draft would change (decision 0034), checked before this runs: per verb,
|
|
13
|
+
* every pair of active ships it reads where the draft lets one reach the
|
|
14
|
+
* other and the applied rules do not, with the draft's rule, and where the
|
|
15
|
+
* applied rules do and the draft does not, with the applied rule. Both
|
|
16
|
+
* beside the declared rules as they are now; there is no message, so no
|
|
17
|
+
* answer to a sender. It records nothing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createReadNetworkRulesDraftChanges(deps: {
|
|
20
|
+
uow: UnitOfWork<ReadNetworkRulesDraftChangesTx>;
|
|
21
|
+
readReach: ReadReachOf;
|
|
22
|
+
}): ReadNetworkRulesDraftChanges;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { NETWORK_VERBS } from '@aeolus-fleet/common';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { reaching, rulesInForceOf, shipAsItIs } from './check-reach.js';
|
|
4
|
+
import { draftInForce } from './explain-reach.js';
|
|
5
|
+
import { refuseNoDraft } from './network-rules-draft.js';
|
|
6
|
+
import { reachRuleOf } from './network-settings.js';
|
|
7
|
+
import { readsShip } from './read-reach.js';
|
|
8
|
+
/**
|
|
9
|
+
* Use case: any actor holding fleet:network asks what applying the fleet's
|
|
10
|
+
* draft would change (decision 0034), checked before this runs: per verb,
|
|
11
|
+
* every pair of active ships it reads where the draft lets one reach the
|
|
12
|
+
* other and the applied rules do not, with the draft's rule, and where the
|
|
13
|
+
* applied rules do and the draft does not, with the applied rule. Both
|
|
14
|
+
* beside the declared rules as they are now; there is no message, so no
|
|
15
|
+
* answer to a sender. It records nothing.
|
|
16
|
+
*/
|
|
17
|
+
export function createReadNetworkRulesDraftChanges(deps) {
|
|
18
|
+
return async (caller) => {
|
|
19
|
+
const reads = await deps.readReach(caller);
|
|
20
|
+
return deps.uow.run(async (tx) => {
|
|
21
|
+
const { fleetId } = caller;
|
|
22
|
+
const drafted = await draftInForce(tx, fleetId);
|
|
23
|
+
if (drafted === undefined) {
|
|
24
|
+
return refuseNoDraft();
|
|
25
|
+
}
|
|
26
|
+
const applied = await rulesInForceOf(tx, await tx.networkSettings.findForShare(fleetId));
|
|
27
|
+
const ships = [];
|
|
28
|
+
for (const ship of await tx.ships.listActive(fleetId)) {
|
|
29
|
+
if (ship.kind !== 'viewer' && readsShip(reads, ship.id)) {
|
|
30
|
+
ships.push(reaching(await shipAsItIs(tx, ship)));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const changes = { send: { gained: [], lost: [] }, read: { gained: [], lost: [] }, manage: { gained: [], lost: [] } };
|
|
34
|
+
for (const sender of ships) {
|
|
35
|
+
for (const recipient of ships.filter((ship) => ship.id !== sender.id)) {
|
|
36
|
+
for (const verb of NETWORK_VERBS) {
|
|
37
|
+
const reach = { verb, sender, recipient, isAnswerToSender: false };
|
|
38
|
+
const [now, then] = [reachRuleOf(applied, reach), reachRuleOf(drafted, reach)];
|
|
39
|
+
const pair = { fromShipId: sender.id, toShipId: recipient.id };
|
|
40
|
+
if (now === undefined && then !== undefined) {
|
|
41
|
+
changes[verb].gained.push({ ...pair, rule: then });
|
|
42
|
+
}
|
|
43
|
+
if (now !== undefined && then === undefined) {
|
|
44
|
+
changes[verb].lost.push({ ...pair, rule: now });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return ok(changes);
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=read-network-rules-draft-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-network-rules-draft-changes.js","sourceRoot":"","sources":["../../../src/domain/registry/read-network-rules-draft-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Caller } from '../shared/caller.js';
|
|
2
|
+
import { type Result } from '../shared/result.js';
|
|
3
|
+
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
4
|
+
import type { NetworkRule } from './network-settings.js';
|
|
5
|
+
import type { NetworkRulesDraftRepository, NetworkSettingsRepository } from './ports.js';
|
|
6
|
+
export interface ReadNetworkRulesTx {
|
|
7
|
+
networkSettings: Pick<NetworkSettingsRepository, 'findForShare'>;
|
|
8
|
+
networkRulesDrafts: Pick<NetworkRulesDraftRepository, 'find'>;
|
|
9
|
+
}
|
|
10
|
+
export interface ReadNetworkRulesAnswer {
|
|
11
|
+
applied: {
|
|
12
|
+
rules: readonly NetworkRule[] | null;
|
|
13
|
+
version: number;
|
|
14
|
+
};
|
|
15
|
+
draft: {
|
|
16
|
+
rules: readonly NetworkRule[] | null;
|
|
17
|
+
savedAt: Date;
|
|
18
|
+
savedAgainstVersion: number;
|
|
19
|
+
} | null;
|
|
20
|
+
}
|
|
21
|
+
export type ReadNetworkRules = (caller: Caller) => Promise<Result<ReadNetworkRulesAnswer, never>>;
|
|
22
|
+
/**
|
|
23
|
+
* Use case: any actor holding fleet:network reads the fleet's own rules as
|
|
24
|
+
* applied, at the settings version, and its draft beside them (decision
|
|
25
|
+
* 0034), checked before this runs. Read under the shared settings lock, so
|
|
26
|
+
* it answers one version.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createReadNetworkRules(deps: {
|
|
29
|
+
uow: UnitOfWork<ReadNetworkRulesTx>;
|
|
30
|
+
}): ReadNetworkRules;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ok } from '../shared/result.js';
|
|
2
|
+
/**
|
|
3
|
+
* Use case: any actor holding fleet:network reads the fleet's own rules as
|
|
4
|
+
* applied, at the settings version, and its draft beside them (decision
|
|
5
|
+
* 0034), checked before this runs. Read under the shared settings lock, so
|
|
6
|
+
* it answers one version.
|
|
7
|
+
*/
|
|
8
|
+
export function createReadNetworkRules(deps) {
|
|
9
|
+
return (caller) => deps.uow.run(async (tx) => {
|
|
10
|
+
const { rules, version } = await tx.networkSettings.findForShare(caller.fleetId);
|
|
11
|
+
const draft = await tx.networkRulesDrafts.find(caller.fleetId);
|
|
12
|
+
return ok({
|
|
13
|
+
applied: { rules, version },
|
|
14
|
+
draft: draft === undefined ? null : { rules: draft.rules, savedAt: draft.savedAt, savedAgainstVersion: draft.savedAgainstVersion },
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=read-network-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-network-rules.js","sourceRoot":"","sources":["../../../src/domain/registry/read-network-rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAiBtD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA6C;IAClF,OAAO,CAAC,MAAM,EAAE,EAAE,CAChB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAkD,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,EAAE,CAAC;YACR,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAAE;SACnI,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
|
-
import { type
|
|
2
|
+
import { type ShipCaller } from '../shared/caller.js';
|
|
3
3
|
import { type DomainError } from '../shared/errors.js';
|
|
4
4
|
import { type Result } from '../shared/result.js';
|
|
5
5
|
import type { ShipRepository } from './ports.js';
|
|
6
|
-
export type ReadOnBehalf = (caller:
|
|
6
|
+
export type ReadOnBehalf = (caller: ShipCaller, input: {
|
|
7
7
|
shipId: ShipId;
|
|
8
|
-
}) => Promise<Result<
|
|
8
|
+
}) => Promise<Result<ShipCaller, DomainError<'SCOPE_NOT_HELD' | 'SHIP_NOT_FOUND' | 'SHIP_NOT_READ_ON_BEHALF'>>>;
|
|
9
9
|
/**
|
|
10
10
|
* Use case: the reader a plugin ship reads as on behalf of a named ship
|
|
11
11
|
* (decision 0034): the named ship with fleet:read only, so every fleet:read
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-on-behalf.js","sourceRoot":"","sources":["../../../src/domain/registry/read-on-behalf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"read-on-behalf.js","sourceRoot":"","sources":["../../../src/domain/registry/read-on-behalf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAQtD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA6C;IAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,MAAM,CAAC,gBAAgB,EAAE,wDAAwD,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC,gBAAgB,EAAE,6DAA6D,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,IAAI,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,yBAAyB,EAAE,kCAAkC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,+BAA+B,CAAC,CAAC;QAC1J,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3H,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { Caller } from '../shared/caller.js';
|
|
2
|
-
import { type DomainError } from '../shared/errors.js';
|
|
3
2
|
import { type Result } from '../shared/result.js';
|
|
4
3
|
import type { ReachRefusalRepository } from './ports.js';
|
|
5
4
|
import type { ReachRefusal } from './reach-refusal.js';
|
|
6
|
-
|
|
5
|
+
import { type ReadReachOf } from './read-reach.js';
|
|
6
|
+
export type ReadReachRefusals = (caller: Caller) => Promise<Result<ReachRefusal[], never>>;
|
|
7
7
|
/**
|
|
8
|
-
* Use case:
|
|
9
|
-
* latest first (
|
|
10
|
-
*
|
|
8
|
+
* Use case: an actor holding fleet:explain reads the sends the fleet's
|
|
9
|
+
* network rules refused, the latest first (decisions 0034, 0053): those whose
|
|
10
|
+
* sender or recipient ship it reads. The scope is checked before this runs.
|
|
11
11
|
*/
|
|
12
12
|
export declare function createReadReachRefusals(deps: {
|
|
13
13
|
reachRefusals: Pick<ReachRefusalRepository, 'latest'>;
|
|
14
|
+
readReach: ReadReachOf;
|
|
14
15
|
}): ReadReachRefusals;
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { REACH_REFUSALS_READ_MAX } from '@aeolus-fleet/common';
|
|
2
|
-
import { refuse } from '../shared/errors.js';
|
|
3
2
|
import { ok } from '../shared/result.js';
|
|
3
|
+
import { readsShip } from './read-reach.js';
|
|
4
|
+
/** Whether the reader reads the refusal's sender ship or a ship it was for: a sender that is no ship is no ship it reads. */
|
|
5
|
+
function readsRefusal(reach, refusal) {
|
|
6
|
+
const recipients = refusal.recipient.kind === 'ship' ? [refusal.recipient.ship] : refusal.recipient.ships;
|
|
7
|
+
const ships = refusal.sender.kind === 'ship' ? [refusal.sender, ...recipients] : recipients;
|
|
8
|
+
return ships.some((ship) => readsShip(reach, ship.id));
|
|
9
|
+
}
|
|
4
10
|
/**
|
|
5
|
-
* Use case:
|
|
6
|
-
* latest first (
|
|
7
|
-
*
|
|
11
|
+
* Use case: an actor holding fleet:explain reads the sends the fleet's
|
|
12
|
+
* network rules refused, the latest first (decisions 0034, 0053): those whose
|
|
13
|
+
* sender or recipient ship it reads. The scope is checked before this runs.
|
|
8
14
|
*/
|
|
9
15
|
export function createReadReachRefusals(deps) {
|
|
10
16
|
return async (caller) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return ok(await deps.reachRefusals.latest(caller.fleetId, REACH_REFUSALS_READ_MAX));
|
|
17
|
+
const reach = await deps.readReach(caller);
|
|
18
|
+
const latest = await deps.reachRefusals.latest(caller.fleetId, REACH_REFUSALS_READ_MAX);
|
|
19
|
+
return ok(latest.filter((refusal) => readsRefusal(reach, refusal)));
|
|
15
20
|
};
|
|
16
21
|
}
|
|
17
22
|
//# sourceMappingURL=read-reach-refusals.js.map
|
|
@@ -1 +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,
|
|
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,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAoC,MAAM,iBAAiB,CAAC;AAI9E,6HAA6H;AAC7H,SAAS,YAAY,CAAC,KAAgB,EAAE,OAAqB;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;IAC1G,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC5F,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAuF;IAC7H,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;QACxF,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { EventType, ShipId } from '@aeolus-fleet/common';
|
|
2
2
|
import type { Caller } from '../shared/caller.js';
|
|
3
|
-
import type { Clock } from '../shared/clock.js';
|
|
4
3
|
import type { Recipient } from '../shared/selector.js';
|
|
5
4
|
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
6
5
|
import { type CheckReachTx } from './check-reach.js';
|
|
@@ -22,8 +21,8 @@ export interface ReadReachTx {
|
|
|
22
21
|
networkSettings: CheckReachTx['networkSettings'];
|
|
23
22
|
ships: Pick<ShipRepository, 'find' | 'list'>;
|
|
24
23
|
pluginConnections: Pick<PluginConnectionRepository, 'find'>;
|
|
25
|
-
labels:
|
|
26
|
-
|
|
24
|
+
labels: CheckReachTx['labels'];
|
|
25
|
+
declaredNetworkRules: CheckReachTx['declaredNetworkRules'];
|
|
27
26
|
}
|
|
28
27
|
/** A message as read reach sees it: its sender, its recipient, and for a type the ship that claimed it, if one has. */
|
|
29
28
|
export interface MessageParties {
|
|
@@ -33,17 +32,16 @@ export interface MessageParties {
|
|
|
33
32
|
}
|
|
34
33
|
export type ReadReachOf = (caller: Caller) => Promise<ReadReach>;
|
|
35
34
|
/**
|
|
36
|
-
* Works out what a caller reads now, as a send is checked: the
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
35
|
+
* Works out what a caller reads now, as a send is checked: the built-in
|
|
36
|
+
* rules, the fleet's own and the declared ones, read rules only. A ship
|
|
37
|
+
* always reads itself. argo reads every ship, as does every ship while open
|
|
38
|
+
* is on and the viewer
|
|
40
39
|
* while its reading is on; a connected plugin reads every ship by its
|
|
41
40
|
* built-in rule; otherwise each ship of the fleet, retired ones
|
|
42
41
|
* too, is read when a rule lets the caller read it.
|
|
43
42
|
*/
|
|
44
43
|
export declare function createReadReachOf(deps: {
|
|
45
44
|
uow: UnitOfWork<ReadReachTx>;
|
|
46
|
-
clock: Clock;
|
|
47
45
|
}): ReadReachOf;
|
|
48
46
|
export declare function readsShip(reach: ReadReach, shipId: ShipId): boolean;
|
|
49
47
|
/**
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ok } from '../shared/result.js';
|
|
2
|
-
import {
|
|
2
|
+
import { actorAsItIs, rulesInForceOf } from './check-reach.js';
|
|
3
3
|
import { allowsReach } from './network-settings.js';
|
|
4
4
|
const EVERY = { kind: 'every' };
|
|
5
5
|
/**
|
|
6
|
-
* Works out what a caller reads now, as a send is checked: the
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Works out what a caller reads now, as a send is checked: the built-in
|
|
7
|
+
* rules, the fleet's own and the declared ones, read rules only. A ship
|
|
8
|
+
* always reads itself. argo reads every ship, as does every ship while open
|
|
9
|
+
* is on and the viewer
|
|
10
10
|
* while its reading is on; a connected plugin reads every ship by its
|
|
11
11
|
* built-in rule; otherwise each ship of the fleet, retired ones
|
|
12
12
|
* too, is read when a rule lets the caller read it.
|
|
@@ -19,18 +19,21 @@ export function createReadReachOf(deps) {
|
|
|
19
19
|
}
|
|
20
20
|
const { fleetId } = caller;
|
|
21
21
|
const settings = await tx.networkSettings.findForShare(fleetId);
|
|
22
|
-
const inForce = await
|
|
23
|
-
if (inForce.
|
|
22
|
+
const inForce = await rulesInForceOf(tx, settings);
|
|
23
|
+
if (inForce.isOpen || (caller.kind === 'viewer' && inForce.isViewerReadOn)) {
|
|
24
24
|
return ok(EVERY);
|
|
25
25
|
}
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
26
|
+
const reader = await actorAsItIs(tx, caller);
|
|
27
|
+
const readerShip = reader?.ship;
|
|
28
|
+
if (readerShip && (reader.reaching.kind !== 'account' && reader.reaching.kind !== 'installation') && reader.reaching.isConnectedPlugin) {
|
|
29
29
|
return ok(EVERY);
|
|
30
30
|
}
|
|
31
|
+
const ships = await tx.ships.list(fleetId);
|
|
32
|
+
const kinds = new Map(ships.map((ship) => [ship.id, ship.kind]));
|
|
31
33
|
const read = [];
|
|
32
|
-
for (const ship of
|
|
33
|
-
|
|
34
|
+
for (const ship of ships) {
|
|
35
|
+
const recipient = await reachingOf(tx, { ship, ownerKind: ship.owner === null ? undefined : kinds.get(ship.owner) });
|
|
36
|
+
if (ship.id === readerShip?.id || (reader && allowsReach(inForce, { verb: 'read', sender: reader.reaching, recipient, isAnswerToSender: false }))) {
|
|
34
37
|
read.push(ship);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
@@ -41,13 +44,15 @@ export function createReadReachOf(deps) {
|
|
|
41
44
|
});
|
|
42
45
|
});
|
|
43
46
|
// The work refuses nothing; were it to, the caller reads only itself.
|
|
44
|
-
return worked.isOk ? worked.value : { kind: 'some', shipIds: new Set([caller.shipId]), types: new Set() };
|
|
47
|
+
return worked.isOk ? worked.value : { kind: 'some', shipIds: new Set(caller.kind === 'account' || caller.kind === 'installation' ? [] : [caller.shipId]), types: new Set() };
|
|
45
48
|
};
|
|
46
49
|
}
|
|
47
|
-
|
|
50
|
+
/** A ship as a read check sees it, its owner's kind taken from the fleet's list rather than read again. */
|
|
51
|
+
async function reachingOf(tx, of) {
|
|
52
|
+
const { ship, ownerKind } = of;
|
|
48
53
|
const labels = (await tx.labels.carriedBy(ship.fleetId, ship.id)).map(({ labelId, valueId }) => ({ labelId, valueId }));
|
|
49
54
|
const isConnectedPlugin = (await tx.pluginConnections.find(ship.fleetId, ship.id)) !== undefined;
|
|
50
|
-
return { id: ship.id, owner: ship.owner, kind: ship.kind, isConnectedPlugin, labels };
|
|
55
|
+
return { id: ship.id, owner: ship.owner, kind: ship.kind, isConnectedPlugin, isOwnedByPerson: ownerKind === 'person', labels };
|
|
51
56
|
}
|
|
52
57
|
export function readsShip(reach, shipId) {
|
|
53
58
|
return reach.kind === 'every' || reach.shipIds.has(shipId);
|
|
@@ -68,7 +73,7 @@ export function readsMessage(reach, message) {
|
|
|
68
73
|
return claimedBy === null ? reach.types.has(recipient.type) : readsShip(reach, claimedBy);
|
|
69
74
|
}
|
|
70
75
|
/** The events about the rules: they concern no ship, whichever ship set or declared them, so every reader reads them. */
|
|
71
|
-
const RULES_EVENTS = new Set(['NetworkRulesDeclared', 'NetworkRulesSet', 'BuiltInRuleChanged']);
|
|
76
|
+
const RULES_EVENTS = new Set(['NetworkRulesDeclared', 'NetworkRulesSet', 'NetworkRulesDraftSaved', 'NetworkRulesDraftDiscarded', 'BuiltInRuleChanged']);
|
|
72
77
|
/**
|
|
73
78
|
* Whether the reach reads an event: through the message it concerns, else
|
|
74
79
|
* through the ship it concerns. One that concerns neither, such as a label's,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-reach.js","sourceRoot":"","sources":["../../../src/domain/registry/read-reach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-reach.js","sourceRoot":"","sources":["../../../src/domain/registry/read-reach.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IdGenerator, ShipId } from '@aeolus-fleet/common';
|
|
2
2
|
import { type SecretTools } from '../identity/public.js';
|
|
3
|
-
import type
|
|
3
|
+
import { type ShipCaller } from '../shared/caller.js';
|
|
4
4
|
import type { Clock } from '../shared/clock.js';
|
|
5
5
|
import { type DomainError } from '../shared/errors.js';
|
|
6
6
|
import { type Result } from '../shared/result.js';
|
|
@@ -15,7 +15,7 @@ export type RecrewShipTx = ReleaseShipTx & StartingPromptTx & LeaseTx & CheckMan
|
|
|
15
15
|
ships: ShipRepository;
|
|
16
16
|
};
|
|
17
17
|
export type RecrewShipRefusal = DomainError<'SHIP_NOT_FOUND'> | NotReachable | ReleaseRefusal;
|
|
18
|
-
export type RecrewShip = (caller:
|
|
18
|
+
export type RecrewShip = (caller: ShipCaller, input: {
|
|
19
19
|
shipId: ShipId;
|
|
20
20
|
}) => Promise<Result<IssuedStartingPrompt, RecrewShipRefusal>>;
|
|
21
21
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { revokeShipSecret } from '../identity/public.js';
|
|
2
|
+
import { actorOf } from '../shared/caller.js';
|
|
2
3
|
import { refuse } from '../shared/errors.js';
|
|
3
|
-
import { shipActor } from '../shared/events.js';
|
|
4
4
|
import { ok } from '../shared/result.js';
|
|
5
5
|
import { endLease } from './leases.js';
|
|
6
6
|
import { checkManage, keepingReachRefusal } from './check-reach.js';
|
|
@@ -22,11 +22,11 @@ export function createRecrewShip(deps) {
|
|
|
22
22
|
if (!ship) {
|
|
23
23
|
return refuse('SHIP_NOT_FOUND', `Ship ${shipId} does not exist`);
|
|
24
24
|
}
|
|
25
|
-
const managed = await checkManage({ tx, ids: deps.ids }, {
|
|
25
|
+
const managed = await checkManage({ tx, ids: deps.ids }, { manager: caller, shipId: ship.id, at: deps.clock.now() });
|
|
26
26
|
if (!managed.isOk) {
|
|
27
27
|
return managed;
|
|
28
28
|
}
|
|
29
|
-
const actor =
|
|
29
|
+
const actor = actorOf(caller);
|
|
30
30
|
const at = deps.clock.now();
|
|
31
31
|
await revokeShipSecret({ tx, ids: deps.ids }, { fleetId, shipId, actor, at });
|
|
32
32
|
const lease = checkCanRelease(ship, await tx.leases.findOpenForUpdate(fleetId, shipId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recrew-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/recrew-ship.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"recrew-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/recrew-ship.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IdGenerator, ShipId } from '@aeolus-fleet/common';
|
|
2
2
|
import { type CredentialTx } from '../identity/public.js';
|
|
3
|
-
import type
|
|
3
|
+
import { type Caller } from '../shared/caller.js';
|
|
4
4
|
import type { Clock } from '../shared/clock.js';
|
|
5
5
|
import { type DomainError } from '../shared/errors.js';
|
|
6
6
|
import { type Result } from '../shared/result.js';
|
|
@@ -29,7 +29,8 @@ export type ReleaseShip = (caller: Caller, input: {
|
|
|
29
29
|
* scope (fleet:manage or crew:run) is checked before this runs;
|
|
30
30
|
* crew:run reaches only the ships whose crew requests are assigned to the
|
|
31
31
|
* caller's ship, and fleet:manage the ships in its manage reach (decision
|
|
32
|
-
* 0034).
|
|
32
|
+
* 0034). An account releases its own person ship with no scope for it, so
|
|
33
|
+
* the app it uses can crew it again (decision 0052).
|
|
33
34
|
*
|
|
34
35
|
* Locks in the fleet's order: the ship, then its secret, then its lease. A
|
|
35
36
|
* receive holding the lease makes the release wait, then the release returns
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { revokeShipSecret } from '../identity/public.js';
|
|
2
|
+
import { actorOf } from '../shared/caller.js';
|
|
2
3
|
import { refuse } from '../shared/errors.js';
|
|
3
|
-
import { shipActor } from '../shared/events.js';
|
|
4
4
|
import { ok } from '../shared/result.js';
|
|
5
5
|
import { endLease } from './leases.js';
|
|
6
6
|
import { keepingReachRefusal } from './check-reach.js';
|
|
@@ -17,7 +17,8 @@ import { checkCanRelease } from './ship.js';
|
|
|
17
17
|
* scope (fleet:manage or crew:run) is checked before this runs;
|
|
18
18
|
* crew:run reaches only the ships whose crew requests are assigned to the
|
|
19
19
|
* caller's ship, and fleet:manage the ships in its manage reach (decision
|
|
20
|
-
* 0034).
|
|
20
|
+
* 0034). An account releases its own person ship with no scope for it, so
|
|
21
|
+
* the app it uses can crew it again (decision 0052).
|
|
21
22
|
*
|
|
22
23
|
* Locks in the fleet's order: the ship, then its secret, then its lease. A
|
|
23
24
|
* receive holding the lease makes the release wait, then the release returns
|
|
@@ -36,7 +37,7 @@ export function createReleaseShip(deps) {
|
|
|
36
37
|
if (!reaches.isOk) {
|
|
37
38
|
return reaches;
|
|
38
39
|
}
|
|
39
|
-
const actor =
|
|
40
|
+
const actor = actorOf(caller);
|
|
40
41
|
await revokeShipSecret({ tx, ids: deps.ids }, { fleetId, shipId, actor, at });
|
|
41
42
|
const lease = checkCanRelease(ship, await tx.leases.findOpenForUpdate(fleetId, shipId));
|
|
42
43
|
if (!lease.isOk) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/release-ship.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"release-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/release-ship.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAgB,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAA4B,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAuB,MAAM,WAAW,CAAC;AAejE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAIjC;IACC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAkD,EAAE;QACzF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,iBAAiB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3G,MAAM,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IdGenerator, ShipId } from '@aeolus-fleet/common';
|
|
2
|
-
import type
|
|
2
|
+
import { type ShipCaller } from '../shared/caller.js';
|
|
3
3
|
import type { Clock } from '../shared/clock.js';
|
|
4
4
|
import { type DomainError } from '../shared/errors.js';
|
|
5
5
|
import { type EventLog } from '../shared/events.js';
|
|
@@ -12,7 +12,7 @@ export interface RemoveCrewRequestTx extends Omit<CheckManageTx, 'ships'> {
|
|
|
12
12
|
crewRequests: CrewRequestRepository;
|
|
13
13
|
events: EventLog;
|
|
14
14
|
}
|
|
15
|
-
export type RemoveCrewRequest = (caller:
|
|
15
|
+
export type RemoveCrewRequest = (caller: ShipCaller, input: {
|
|
16
16
|
shipId: ShipId;
|
|
17
17
|
}) => Promise<Result<undefined, DomainError<'SHIP_NOT_FOUND' | 'CREW_REQUEST_NOT_FOUND'> | NotReachable>>;
|
|
18
18
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { actorOf } from '../shared/caller.js';
|
|
1
2
|
import { refuse } from '../shared/errors.js';
|
|
2
|
-
import { recordEvent
|
|
3
|
+
import { recordEvent } from '../shared/events.js';
|
|
3
4
|
import { ok } from '../shared/result.js';
|
|
4
5
|
import { removeCrewRequest } from './crew-request.js';
|
|
5
6
|
import { checkManage, keepingReachRefusal } from './check-reach.js';
|
|
@@ -16,12 +17,12 @@ export function createRemoveCrewRequest(deps) {
|
|
|
16
17
|
if (!ship) {
|
|
17
18
|
return refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
18
19
|
}
|
|
19
|
-
const managed = await checkManage({ tx, ids: deps.ids }, {
|
|
20
|
+
const managed = await checkManage({ tx, ids: deps.ids }, { manager: caller, shipId: ship.id, at: deps.clock.now() });
|
|
20
21
|
if (!managed.isOk) {
|
|
21
22
|
return managed;
|
|
22
23
|
}
|
|
23
24
|
const current = await tx.crewRequests.find(caller.fleetId, ship.id);
|
|
24
|
-
const removed = removeCrewRequest({ ship, current }, { at: deps.clock.now(), actor:
|
|
25
|
+
const removed = removeCrewRequest({ ship, current }, { at: deps.clock.now(), actor: actorOf(caller) });
|
|
25
26
|
if (!removed.isOk) {
|
|
26
27
|
return removed;
|
|
27
28
|
}
|