@aeolus-fleet/core 0.27.1 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/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,7 +1,7 @@
|
|
|
1
1
|
import { CLEAR_REQUESTS_PER_TRIERARCH_MAX } from '@aeolus-fleet/common';
|
|
2
2
|
import { refuse } from '../shared/errors.js';
|
|
3
3
|
import { ok } from '../shared/result.js';
|
|
4
|
-
/** The type of the ship a trierarch crews (docs/trierarch.md). */
|
|
4
|
+
/** The type of the ship a trierarch crews (aeolus-fleet-trierarch's docs/trierarch.md). */
|
|
5
5
|
export const TRIERARCH_SHIP_TYPE = 'trierarch';
|
|
6
6
|
function event(trierarch, change) {
|
|
7
7
|
const { at, actor, ...what } = change;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clear-request.js","sourceRoot":"","sources":["../../../src/domain/registry/clear-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAgD,MAAM,sBAAsB,CAAC;AAEtH,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAmBtD,
|
|
1
|
+
{"version":3,"file":"clear-request.js","sourceRoot":"","sources":["../../../src/domain/registry/clear-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import type { CommissionedShipKind, IdGenerator, ShipId } from '@aeolus-fleet/common';
|
|
1
|
+
import type { AccountId, CommissionedShipKind, IdGenerator, LabelValueId, ShipId } from '@aeolus-fleet/common';
|
|
2
2
|
import type { SecretTools } 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';
|
|
7
7
|
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
8
8
|
import { type AppliedLimitsTx } from './applied-limits.js';
|
|
9
9
|
import { type NamedNamespacesTx } from './named-namespaces.js';
|
|
10
|
-
import type { ShipRepository } from './ports.js';
|
|
10
|
+
import type { LabelRepository, ShipRepository } from './ports.js';
|
|
11
11
|
import { type CommissionRefusal } from './ship.js';
|
|
12
12
|
import { type StartingPromptTx } from './starting-prompt.js';
|
|
13
13
|
export interface CommissionShipTx extends StartingPromptTx, AppliedLimitsTx, NamedNamespacesTx {
|
|
14
14
|
ships: ShipRepository;
|
|
15
|
+
labels: Pick<LabelRepository, 'findByValueForShare' | 'carriedBy' | 'findByKey' | 'assign'>;
|
|
15
16
|
}
|
|
16
17
|
export interface CommissionShipInput {
|
|
17
18
|
name: string;
|
|
18
19
|
type: string;
|
|
19
|
-
/** An agent when left out;
|
|
20
|
+
/** An agent when left out; a person ship needs fleet:person, an app ship fleet:on-behalf too (decisions 0044, 0053). */
|
|
20
21
|
kind?: CommissionedShipKind;
|
|
21
22
|
note?: string;
|
|
22
23
|
scopes?: readonly string[];
|
|
24
|
+
/** The label values it carries from the start: each of a label the caller defined, or one it carries (decision 0053). */
|
|
25
|
+
valueIds?: readonly LabelValueId[];
|
|
23
26
|
/** The ship that asked the caller, a plugin's ship holding fleet:on-behalf, for this one: the new ship gets its owner (decision 0045). */
|
|
24
27
|
ownerOf?: ShipId;
|
|
25
28
|
/** The owner argo picked for an app ship that a ship holding fleet:on-behalf, the gateway, commissions (decision 0045). */
|
|
@@ -41,20 +44,26 @@ export interface CommissionedShip {
|
|
|
41
44
|
isClaimed: boolean;
|
|
42
45
|
} | null;
|
|
43
46
|
}
|
|
44
|
-
export type CommissionShipRefusal = CommissionRefusal | DomainError<'INVALID_IDEMPOTENCY_KEY' | 'IDEMPOTENCY_KEY_REUSED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND'>;
|
|
47
|
+
export type CommissionShipRefusal = CommissionRefusal | DomainError<'INVALID_IDEMPOTENCY_KEY' | 'IDEMPOTENCY_KEY_REUSED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'LABEL_VALUE_NOT_FOUND' | 'NOT_THE_LABEL_OWNER'>;
|
|
45
48
|
export type CommissionShip = (caller: Caller, input: CommissionShipInput) => Promise<Result<CommissionedShip, CommissionShipRefusal>>;
|
|
49
|
+
/** The idempotency key the installation commissions an account's person ship under, the same from pagasae and from core (decision 0052). */
|
|
50
|
+
export declare function personShipKey(accountId: AccountId): string;
|
|
46
51
|
/**
|
|
47
|
-
* Use case:
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
52
|
+
* Use case: an actor, a ship, an account or the installation, commissions a
|
|
53
|
+
* ship in its own fleet (decision 0053), an agent unless
|
|
54
|
+
* it states another kind and holds the scope for it, read from the server
|
|
55
|
+
* (fleet:commission for an agent, with fleet:on-behalf for an app ship,
|
|
56
|
+
* fleet:person for a person ship, which owns itself). The ship
|
|
57
|
+
* awaits crew and gets its first starting prompt, all in one transaction. The ship gets
|
|
58
|
+
* the agent scopes and the scopes asked for, each one the caller may grant:
|
|
59
|
+
* a ship's read from the server (decision 0046); each plugin namespace they
|
|
60
|
+
* name is locked after the name. It carries the label values given, each of
|
|
61
|
+
* a label the caller defined or one it carries (decision 0053). Its owner is the caller's owner, the caller
|
|
62
|
+
* when it is a person ship, or an account's person ship, commissioned first
|
|
63
|
+
* when the account has none (decisions 0052, 0057); a caller
|
|
55
64
|
* holding fleet:on-behalf may name the ship that asked it instead, whose owner
|
|
56
65
|
* it gets, or for an app ship the owner argo picked (decision 0045). The
|
|
57
|
-
* caller's idempotency key makes
|
|
66
|
+
* caller's idempotency key, its own apart from every other actor's, makes
|
|
58
67
|
* a retry safe: the same key with the same request answers the ship it
|
|
59
68
|
* commissioned, with no secret, and changes nothing; the same key with another
|
|
60
69
|
* request is refused.
|
|
@@ -1,20 +1,25 @@
|
|
|
1
|
+
import { actorOf, isShipCaller } 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 { idempotencyKey } from '../shared/idempotency-key.js';
|
|
4
5
|
import { ok } from '../shared/result.js';
|
|
5
6
|
import { appliedLimits } from './applied-limits.js';
|
|
6
7
|
import { lockNamedNamespaces } from './named-namespaces.js';
|
|
8
|
+
import { GROUP_LABEL_KEY } from './check-reach.js';
|
|
9
|
+
import { labelOwnerOf, labelsAtCommission, ownerNameOf } from './label.js';
|
|
7
10
|
import { commissionShip } from './ship.js';
|
|
8
11
|
import { issueStartingPrompt } from './starting-prompt.js';
|
|
9
12
|
/** The request as one text, so a repeat is known by its hash: the scopes in a fixed order, each once. */
|
|
10
13
|
function commissionRequestText(input) {
|
|
11
14
|
const scopes = [...new Set(input.scopes)].toSorted();
|
|
15
|
+
const valueIds = [...new Set(input.valueIds)].toSorted();
|
|
12
16
|
return JSON.stringify({
|
|
13
17
|
name: input.name,
|
|
14
18
|
type: input.type,
|
|
15
19
|
kind: input.kind ?? 'agent',
|
|
16
20
|
note: input.note ?? null,
|
|
17
21
|
scopes,
|
|
22
|
+
valueIds,
|
|
18
23
|
ownerOf: input.ownerOf ?? null,
|
|
19
24
|
owner: input.owner ?? null,
|
|
20
25
|
});
|
|
@@ -39,17 +44,142 @@ async function findWithOwnerHeld(tx, ref) {
|
|
|
39
44
|
return ship;
|
|
40
45
|
}
|
|
41
46
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
* The values given, each with its label read FOR SHARE, so a change of its
|
|
48
|
+
* values waits; undefined names a value the fleet does not have.
|
|
49
|
+
*/
|
|
50
|
+
async function givenValues(tx, ref) {
|
|
51
|
+
const given = [];
|
|
52
|
+
for (const valueId of ref.valueIds) {
|
|
53
|
+
const label = await tx.labels.findByValueForShare(ref.fleetId, valueId);
|
|
54
|
+
if (!label?.values.some((value) => value.id === valueId)) {
|
|
55
|
+
return { given, missing: valueId };
|
|
56
|
+
}
|
|
57
|
+
given.push({ label, valueId, ownerName: await ownerNameOf(label.owner, async (shipId) => (await tx.ships.find(ref.fleetId, shipId))?.name) });
|
|
58
|
+
}
|
|
59
|
+
return { given, missing: undefined };
|
|
60
|
+
}
|
|
61
|
+
/** How many characters of the account's id a person ship's name keeps (decision 0052). */
|
|
62
|
+
const PERSON_SHIP_NAME_ACCOUNT_ID_LENGTH = 12;
|
|
63
|
+
/** The idempotency key the installation commissions an account's person ship under, the same from pagasae and from core (decision 0052). */
|
|
64
|
+
export function personShipKey(accountId) {
|
|
65
|
+
return `person-${accountId}`;
|
|
66
|
+
}
|
|
67
|
+
function personShipName(accountId) {
|
|
68
|
+
return `person-${accountId.slice(0, PERSON_SHIP_NAME_ACCOUNT_ID_LENGTH)}`;
|
|
69
|
+
}
|
|
70
|
+
/** Stores a commissioned ship: the ship, its label values, its events and its first starting prompt. */
|
|
71
|
+
async function storeCommissioned(context, commissioned) {
|
|
72
|
+
const { tx, deps } = context;
|
|
73
|
+
const { ship, actor, at } = commissioned;
|
|
74
|
+
await tx.ships.create(ship);
|
|
75
|
+
for (const assignment of commissioned.assignments) {
|
|
76
|
+
await tx.labels.assign(assignment);
|
|
77
|
+
}
|
|
78
|
+
for (const event of commissioned.events) {
|
|
79
|
+
await recordEvent({ events: tx.events, ids: deps.ids }, event);
|
|
80
|
+
}
|
|
81
|
+
return issueStartingPrompt({ tx, secrets: { ...deps.secrets, ids: deps.ids } }, { fleetId: ship.fleetId, shipId: ship.id, actor, at });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The person ship of an account whose token names none (decisions 0052,
|
|
85
|
+
* 0057): the one the installation commissioned under the account's key, held
|
|
86
|
+
* FOR SHARE, if there is one; else none yet, with its key locked, for core to
|
|
87
|
+
* commission with the account's first ship.
|
|
88
|
+
*/
|
|
89
|
+
async function heldPersonShipOf(tx, account) {
|
|
90
|
+
const key = { fleetId: account.fleetId, by: { kind: 'installation' }, idempotencyKey: personShipKey(account.accountId) };
|
|
91
|
+
await tx.ships.lockCommissionKey(key);
|
|
92
|
+
const commissioned = await tx.ships.findByCommissionKey(key);
|
|
93
|
+
return commissioned && (await tx.ships.findForShare(account.fleetId, commissioned.id));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Core commissions the account's person ship as the installation would (decision
|
|
97
|
+
* 0052): named for the account, owning itself, with the scopes every ship has
|
|
98
|
+
* and the values of group its token carries, kept as the installation's
|
|
99
|
+
* commission under the account's key, so the installation's own commission
|
|
100
|
+
* under that key answers it. The account is the actor of its events.
|
|
101
|
+
*/
|
|
102
|
+
async function commissionPersonShip(context, ref) {
|
|
103
|
+
const { tx, deps } = context;
|
|
104
|
+
const { account, actor, at } = ref;
|
|
105
|
+
const { fleetId } = account;
|
|
106
|
+
const name = personShipName(account.accountId);
|
|
107
|
+
const request = { name, type: 'person', kind: 'person', idempotencyKey: personShipKey(account.accountId) };
|
|
108
|
+
await tx.ships.lockName(fleetId, name);
|
|
109
|
+
const commissioned = commissionShip({
|
|
110
|
+
...request,
|
|
111
|
+
id: deps.ids('ship'),
|
|
112
|
+
fleetId,
|
|
113
|
+
// The installation's own job (decision 0052), which core does for it here: the account needs no fleet:person.
|
|
114
|
+
commissioner: { kind: 'installation', scopes: ['fleet:person'] },
|
|
115
|
+
argoShipId: ref.argoShipId,
|
|
116
|
+
at,
|
|
117
|
+
actor,
|
|
118
|
+
commission: { by: { kind: 'installation' }, idempotencyKey: request.idempotencyKey, requestHash: deps.secrets.hasher.hash(commissionRequestText(request)) },
|
|
119
|
+
}, { activeShipNamed: await tx.ships.findActiveByName(fleetId, name), namespaces: new Map() });
|
|
120
|
+
if (!commissioned.isOk) {
|
|
121
|
+
return commissioned;
|
|
122
|
+
}
|
|
123
|
+
const { ship, events } = commissioned.value;
|
|
124
|
+
const carried = await carriedBy(tx, account);
|
|
125
|
+
const { given } = await givenValues(tx, { fleetId, valueIds: carried });
|
|
126
|
+
const labelled = labelsAtCommission(given, { ship, owner: undefined, carried, at, actor });
|
|
127
|
+
if (!labelled.isOk) {
|
|
128
|
+
return labelled;
|
|
129
|
+
}
|
|
130
|
+
await storeCommissioned(context, { ship, assignments: labelled.value.assignments, events: [...events, ...labelled.value.events], actor, at });
|
|
131
|
+
return ok(ship);
|
|
132
|
+
}
|
|
133
|
+
/** The values the caller carries itself: a ship's labels, or the values of group an account's token carries. */
|
|
134
|
+
async function carriedBy(tx, caller) {
|
|
135
|
+
if (isShipCaller(caller)) {
|
|
136
|
+
return (await tx.labels.carriedBy(caller.fleetId, caller.shipId)).map((carried) => carried.valueId);
|
|
137
|
+
}
|
|
138
|
+
if (caller.kind === 'installation') {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
const group = await tx.labels.findByKey(caller.fleetId, GROUP_LABEL_KEY);
|
|
142
|
+
return (group?.values ?? []).filter((value) => caller.groupValues.includes(value.value)).map((value) => value.id);
|
|
143
|
+
}
|
|
144
|
+
/** The actor a commission is kept under, with its idempotency keys: an account by its id only. */
|
|
145
|
+
function commissionerOf(caller) {
|
|
146
|
+
if (isShipCaller(caller)) {
|
|
147
|
+
return { kind: 'ship', shipId: caller.shipId };
|
|
148
|
+
}
|
|
149
|
+
return caller.kind === 'account' ? { kind: 'account', accountId: caller.accountId } : { kind: 'installation' };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* The commissioning actor as the commission checks it: a ship read again with
|
|
153
|
+
* its owner held, its scopes from the server; an account with its person
|
|
154
|
+
* ship held FOR SHARE, so a retire of it waits; the installation as it is.
|
|
155
|
+
*/
|
|
156
|
+
async function commissioningActorOf(tx, caller) {
|
|
157
|
+
if (isShipCaller(caller)) {
|
|
158
|
+
const ship = await findWithOwnerHeld(tx, { fleetId: caller.fleetId, shipId: caller.shipId });
|
|
159
|
+
return ship && { kind: 'ship', ship };
|
|
160
|
+
}
|
|
161
|
+
if (caller.kind === 'account') {
|
|
162
|
+
const personShip = caller.personShipId === null ? undefined : await tx.ships.findForShare(caller.fleetId, caller.personShipId);
|
|
163
|
+
return { kind: 'account', scopes: caller.scopes, personShip };
|
|
164
|
+
}
|
|
165
|
+
return { kind: 'installation', scopes: caller.scopes };
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Use case: an actor, a ship, an account or the installation, commissions a
|
|
169
|
+
* ship in its own fleet (decision 0053), an agent unless
|
|
170
|
+
* it states another kind and holds the scope for it, read from the server
|
|
171
|
+
* (fleet:commission for an agent, with fleet:on-behalf for an app ship,
|
|
172
|
+
* fleet:person for a person ship, which owns itself). The ship
|
|
173
|
+
* awaits crew and gets its first starting prompt, all in one transaction. The ship gets
|
|
174
|
+
* the agent scopes and the scopes asked for, each one the caller may grant:
|
|
175
|
+
* a ship's read from the server (decision 0046); each plugin namespace they
|
|
176
|
+
* name is locked after the name. It carries the label values given, each of
|
|
177
|
+
* a label the caller defined or one it carries (decision 0053). Its owner is the caller's owner, the caller
|
|
178
|
+
* when it is a person ship, or an account's person ship, commissioned first
|
|
179
|
+
* when the account has none (decisions 0052, 0057); a caller
|
|
50
180
|
* holding fleet:on-behalf may name the ship that asked it instead, whose owner
|
|
51
181
|
* it gets, or for an app ship the owner argo picked (decision 0045). The
|
|
52
|
-
* caller's idempotency key makes
|
|
182
|
+
* caller's idempotency key, its own apart from every other actor's, makes
|
|
53
183
|
* a retry safe: the same key with the same request answers the ship it
|
|
54
184
|
* commissioned, with no secret, and changes nothing; the same key with another
|
|
55
185
|
* request is refused.
|
|
@@ -57,18 +187,20 @@ async function findWithOwnerHeld(tx, ref) {
|
|
|
57
187
|
export function createCommissionShip(deps) {
|
|
58
188
|
return (caller, input) => deps.uow.run(async (tx) => {
|
|
59
189
|
const { fleetId } = caller;
|
|
60
|
-
const actor =
|
|
190
|
+
const actor = actorOf(caller);
|
|
61
191
|
const at = deps.clock.now();
|
|
62
192
|
const key = idempotencyKey(input.idempotencyKey);
|
|
63
193
|
if (!key.isOk) {
|
|
64
194
|
return key;
|
|
65
195
|
}
|
|
66
196
|
const requestHash = deps.secrets.hasher.hash(commissionRequestText(input));
|
|
67
|
-
const commissionKey = { fleetId, by: caller
|
|
197
|
+
const commissionKey = { fleetId, by: commissionerOf(caller), idempotencyKey: key.value };
|
|
68
198
|
await tx.ships.lockCommissionKey(commissionKey);
|
|
69
199
|
const original = await tx.ships.findByCommissionKey(commissionKey);
|
|
70
200
|
if (original) {
|
|
71
|
-
|
|
201
|
+
// A person ship the installation commissioned is found by its key alone: core may have commissioned it with an account's first ship (decision 0052).
|
|
202
|
+
const isFoundByKeyAlone = commissionKey.by.kind === 'installation' && original.kind === 'person';
|
|
203
|
+
if (!isFoundByKeyAlone && original.commission?.requestHash !== requestHash) {
|
|
72
204
|
return refuse('IDEMPOTENCY_KEY_REUSED', 'This idempotency key was already used for another commission: commission with a new key');
|
|
73
205
|
}
|
|
74
206
|
const secret = await tx.credentials.findValidForShipForUpdate(fleetId, original.id);
|
|
@@ -78,18 +210,28 @@ export function createCommissionShip(deps) {
|
|
|
78
210
|
startingPrompt: secret ? { issuedAt: secret.issuedAt, isClaimed: secret.claimedAt !== null } : null,
|
|
79
211
|
});
|
|
80
212
|
}
|
|
213
|
+
const account = caller.kind === 'account' && caller.personShipId === null ? caller : undefined;
|
|
214
|
+
const heldPersonShip = account && (await heldPersonShipOf(tx, account));
|
|
215
|
+
const isPersonShipNeeded = account !== undefined && heldPersonShip === undefined;
|
|
81
216
|
const { ships: shipLimit } = await appliedLimits(tx, fleetId);
|
|
82
217
|
if (shipLimit !== null) {
|
|
83
218
|
// Counted under the fleet's lock, held until the ship is stored: commissions at the limit never overshoot it.
|
|
84
219
|
await tx.ships.lockShipCount(fleetId);
|
|
85
|
-
if ((await tx.ships.countActive(fleetId))
|
|
220
|
+
if ((await tx.ships.countActive(fleetId)) + (isPersonShipNeeded ? 2 : 1) > shipLimit) {
|
|
86
221
|
return refuse('SHIP_LIMIT_REACHED', `The fleet is at its limit of ${String(shipLimit)} ships, so it takes no new one.`);
|
|
87
222
|
}
|
|
88
223
|
}
|
|
89
|
-
const commissioner = await findWithOwnerHeld(tx, { fleetId, shipId: caller.shipId });
|
|
90
224
|
const argo = await tx.ships.findOperatorShip(fleetId);
|
|
225
|
+
let commissioner = await commissioningActorOf(tx, caller);
|
|
91
226
|
if (!commissioner || !argo) {
|
|
92
|
-
return refuse('SHIP_NOT_FOUND',
|
|
227
|
+
return refuse('SHIP_NOT_FOUND', "The commissioning ship or its fleet's argo does not exist");
|
|
228
|
+
}
|
|
229
|
+
if (account !== undefined) {
|
|
230
|
+
const personShip = heldPersonShip === undefined ? await commissionPersonShip({ tx, deps }, { account, argoShipId: argo.id, actor, at }) : ok(heldPersonShip);
|
|
231
|
+
if (!personShip.isOk) {
|
|
232
|
+
return personShip;
|
|
233
|
+
}
|
|
234
|
+
commissioner = { kind: 'account', scopes: account.scopes, personShip: personShip.value };
|
|
93
235
|
}
|
|
94
236
|
const askingShip = input.ownerOf === undefined ? undefined : await findWithOwnerHeld(tx, { fleetId, shipId: input.ownerOf });
|
|
95
237
|
if (input.ownerOf !== undefined && askingShip === undefined) {
|
|
@@ -99,16 +241,20 @@ export function createCommissionShip(deps) {
|
|
|
99
241
|
const namedOwner = input.owner === undefined ? undefined : await tx.ships.findForShare(fleetId, input.owner);
|
|
100
242
|
await tx.ships.lockName(fleetId, input.name);
|
|
101
243
|
const namespaces = await lockNamedNamespaces(tx, { fleetId, scopes: input.scopes ?? [] });
|
|
102
|
-
const commissioned = commissionShip({ ...input, id: deps.ids('ship'), fleetId, commissioner, argoShipId: argo.id, askingShip, namedOwner, at, actor, commission: { by:
|
|
244
|
+
const commissioned = commissionShip({ ...input, id: deps.ids('ship'), fleetId, commissioner, argoShipId: argo.id, askingShip, namedOwner, at, actor, commission: { by: commissionKey.by, idempotencyKey: key.value, requestHash } }, { activeShipNamed: await tx.ships.findActiveByName(fleetId, input.name), namespaces });
|
|
103
245
|
if (!commissioned.isOk) {
|
|
104
246
|
return commissioned;
|
|
105
247
|
}
|
|
106
248
|
const { ship, events } = commissioned.value;
|
|
107
|
-
await tx.
|
|
108
|
-
|
|
109
|
-
|
|
249
|
+
const { given, missing } = await givenValues(tx, { fleetId, valueIds: input.valueIds ?? [] });
|
|
250
|
+
if (missing !== undefined) {
|
|
251
|
+
return refuse('LABEL_VALUE_NOT_FOUND', `The fleet has no label value ${missing}`);
|
|
252
|
+
}
|
|
253
|
+
const labelled = labelsAtCommission(given, { ship, owner: labelOwnerOf(caller), carried: await carriedBy(tx, caller), at, actor });
|
|
254
|
+
if (!labelled.isOk) {
|
|
255
|
+
return labelled;
|
|
110
256
|
}
|
|
111
|
-
const issued = await
|
|
257
|
+
const issued = await storeCommissioned({ tx, deps }, { ship, assignments: labelled.value.assignments, events: [...events, ...labelled.value.events], actor, at });
|
|
112
258
|
return ok({ ...issued, startingPrompt: { issuedAt: at, isClaimed: false } });
|
|
113
259
|
});
|
|
114
260
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commission-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/commission-ship.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commission-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/commission-ship.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 ConfirmCrewReleaseTx {
|
|
|
12
12
|
events: EventLog;
|
|
13
13
|
}
|
|
14
14
|
export type ConfirmCrewReleaseRefusal = DomainError<'SHIP_NOT_FOUND' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_RELEASING'>;
|
|
15
|
-
export type ConfirmCrewRelease = (caller:
|
|
15
|
+
export type ConfirmCrewRelease = (caller: ShipCaller, input: {
|
|
16
16
|
shipId: ShipId;
|
|
17
17
|
}) => Promise<Result<undefined, ConfirmCrewReleaseRefusal>>;
|
|
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 { confirmCrewRelease } from './crew-request.js';
|
|
5
6
|
/**
|
|
@@ -14,7 +15,7 @@ export function createConfirmCrewRelease(deps) {
|
|
|
14
15
|
if (!ship) {
|
|
15
16
|
return refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
16
17
|
}
|
|
17
|
-
const confirmed = confirmCrewRelease({ ship, current: await tx.crewRequests.find(caller.fleetId, ship.id), trierarchShipId: caller.shipId }, { at: deps.clock.now(), actor:
|
|
18
|
+
const confirmed = confirmCrewRelease({ ship, current: await tx.crewRequests.find(caller.fleetId, ship.id), trierarchShipId: caller.shipId }, { at: deps.clock.now(), actor: actorOf(caller) });
|
|
18
19
|
if (!confirmed.isOk) {
|
|
19
20
|
return confirmed;
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-crew-release.js","sourceRoot":"","sources":["../../../src/domain/registry/confirm-crew-release.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirm-crew-release.js","sourceRoot":"","sources":["../../../src/domain/registry/confirm-crew-release.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAevD;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA+E;IACtH,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAyD,EAAE;QAC/E,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,SAAS,GAAG,kBAAkB,CAClC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,EACtG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CACjD,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,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,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ClearOutcome, 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';
|
|
@@ -13,7 +13,7 @@ export interface ConfirmWorktreeClearedTx {
|
|
|
13
13
|
events: EventLog;
|
|
14
14
|
}
|
|
15
15
|
export type ConfirmWorktreeClearedUseCaseRefusal = DomainError<'SHIP_NOT_FOUND'> | ConfirmWorktreeClearedRefusal;
|
|
16
|
-
export type ConfirmWorktreeCleared = (caller:
|
|
16
|
+
export type ConfirmWorktreeCleared = (caller: ShipCaller, input: {
|
|
17
17
|
shipId: ShipId;
|
|
18
18
|
repository: string;
|
|
19
19
|
outcome: ClearOutcome;
|
|
@@ -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 { confirmWorktreeCleared } from './clear-request.js';
|
|
5
6
|
/**
|
|
@@ -16,7 +17,7 @@ export function createConfirmWorktreeCleared(deps) {
|
|
|
16
17
|
return refuse('SHIP_NOT_FOUND', `Ship ${caller.shipId} does not exist`);
|
|
17
18
|
}
|
|
18
19
|
const key = { trierarchShipId: trierarch.id, shipId: input.shipId, repository: input.repository };
|
|
19
|
-
const confirmed = confirmWorktreeCleared({ trierarch, worktreeShipName: (await tx.ships.find(fleetId, input.shipId))?.name ?? input.shipId, current: await tx.clearRequests.find(fleetId, key) }, { repository: input.repository, outcome: input.outcome, at: deps.clock.now(), actor:
|
|
20
|
+
const confirmed = confirmWorktreeCleared({ trierarch, worktreeShipName: (await tx.ships.find(fleetId, input.shipId))?.name ?? input.shipId, current: await tx.clearRequests.find(fleetId, key) }, { repository: input.repository, outcome: input.outcome, at: deps.clock.now(), actor: actorOf(caller) });
|
|
20
21
|
if (!confirmed.isOk) {
|
|
21
22
|
return confirmed;
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirm-worktree-cleared.js","sourceRoot":"","sources":["../../../src/domain/registry/confirm-worktree-cleared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"confirm-worktree-cleared.js","sourceRoot":"","sources":["../../../src/domain/registry/confirm-worktree-cleared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAsC,MAAM,oBAAoB,CAAC;AAgBhG;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAmF;IAC9H,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAoE,EAAE;QAC1F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAClG,MAAM,SAAS,GAAG,sBAAsB,CACtC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EACvJ,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CACvG,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,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,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 Caller } 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,13 +12,14 @@ export interface ConnectPluginTx {
|
|
|
12
12
|
pluginConnections: PluginConnectionRepository;
|
|
13
13
|
events: EventLog;
|
|
14
14
|
}
|
|
15
|
-
export type ConnectPluginUseCaseRefusal = DomainError<'
|
|
15
|
+
export type ConnectPluginUseCaseRefusal = DomainError<'SHIP_NOT_FOUND'> | ConnectPluginRefusal;
|
|
16
16
|
export type ConnectPlugin = (caller: Caller, input: {
|
|
17
17
|
shipId: ShipId;
|
|
18
18
|
}) => Promise<Result<undefined, ConnectPluginUseCaseRefusal>>;
|
|
19
19
|
/**
|
|
20
|
-
* Use case:
|
|
21
|
-
* as the console's Connect does (
|
|
20
|
+
* Use case: an actor holding fleet:connect connects a ship as a plugin of its
|
|
21
|
+
* fleet, as the console's Connect does (decisions 0034, 0053), the scope
|
|
22
|
+
* checked before this runs: from then on the ship reads
|
|
22
23
|
* every ship, whatever the rules, until a release or a retire of the ship
|
|
23
24
|
* ends it. PluginConnected in the same unit of work. It holds the ship, as a
|
|
24
25
|
* release and a retire do, so neither passes it by.
|
|
@@ -1,25 +1,24 @@
|
|
|
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 { connectPlugin } from './plugin-connection.js';
|
|
5
6
|
/**
|
|
6
|
-
* Use case:
|
|
7
|
-
* as the console's Connect does (
|
|
7
|
+
* Use case: an actor holding fleet:connect connects a ship as a plugin of its
|
|
8
|
+
* fleet, as the console's Connect does (decisions 0034, 0053), the scope
|
|
9
|
+
* checked before this runs: from then on the ship reads
|
|
8
10
|
* every ship, whatever the rules, until a release or a retire of the ship
|
|
9
11
|
* ends it. PluginConnected in the same unit of work. It holds the ship, as a
|
|
10
12
|
* release and a retire do, so neither passes it by.
|
|
11
13
|
*/
|
|
12
14
|
export function createConnectPlugin(deps) {
|
|
13
15
|
return (caller, input) => deps.uow.run(async (tx) => {
|
|
14
|
-
if (caller.kind !== 'operator') {
|
|
15
|
-
return refuse('NOT_THE_OPERATOR_SHIP', 'Only argo connects a plugin');
|
|
16
|
-
}
|
|
17
16
|
const { fleetId } = caller;
|
|
18
17
|
const ship = await tx.ships.findForUpdate(fleetId, input.shipId);
|
|
19
18
|
if (!ship) {
|
|
20
19
|
return refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
21
20
|
}
|
|
22
|
-
const connected = connectPlugin(ship, { current: await tx.pluginConnections.find(fleetId, ship.id), at: deps.clock.now(), actor:
|
|
21
|
+
const connected = connectPlugin(ship, { current: await tx.pluginConnections.find(fleetId, ship.id), at: deps.clock.now(), actor: actorOf(caller) });
|
|
23
22
|
if (!connected.isOk) {
|
|
24
23
|
return connected;
|
|
25
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-plugin.js","sourceRoot":"","sources":["../../../src/domain/registry/connect-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect-plugin.js","sourceRoot":"","sources":["../../../src/domain/registry/connect-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAA6B,MAAM,wBAAwB,CAAC;AAalF;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA0E;IAC5G,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA2D,EAAE;QACjF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpJ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,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,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type CrewStatus, type FleetId, type LabelValueId, type Scope, 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 { Actor, NewEvent } from '../shared/events.js';
|
|
5
5
|
import { type Result } from '../shared/result.js';
|
|
@@ -190,7 +190,7 @@ export declare function giveBackCrewRequest({ ship, current, trierarchShipId }:
|
|
|
190
190
|
* of the broad scopes, or with crew:run: crew:run reaches only the ships
|
|
191
191
|
* whose requests are assigned to the caller's ship (decision 0029).
|
|
192
192
|
*/
|
|
193
|
-
export declare function checkReaches(caller:
|
|
193
|
+
export declare function checkReaches(caller: ShipCaller, { ship, current, broadScopes }: {
|
|
194
194
|
ship: Ship;
|
|
195
195
|
current: CrewRequest | null | undefined;
|
|
196
196
|
broadScopes: readonly Scope[];
|