@aeolus-fleet/core 0.27.0 → 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/README.md +1 -1
- 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 +36 -0
- package/dist/adapters/prisma/generated/client.d.ts +36 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +150 -0
- package/dist/adapters/prisma/generated/enums.d.ts +33 -0
- package/dist/adapters/prisma/generated/enums.js +29 -1
- package/dist/adapters/prisma/generated/enums.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/class.d.ts +55 -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 +463 -8
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +45 -10
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +47 -7
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +45 -10
- 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 +1270 -116
- 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/Lease.d.ts +60 -1
- 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 -223
- package/dist/adapters/prisma/generated/models/PluginConnection.d.ts +1180 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js +2 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ReachRefusal.d.ts +1 -40
- package/dist/adapters/prisma/generated/models/Ship.d.ts +1072 -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 +5 -0
- package/dist/adapters/prisma/history.js +5 -2
- 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/messaging.js +5 -2
- package/dist/adapters/prisma/messaging.js.map +1 -1
- package/dist/adapters/prisma/network.d.ts +7 -2
- package/dist/adapters/prisma/network.js +92 -62
- package/dist/adapters/prisma/network.js.map +1 -1
- package/dist/adapters/prisma/overdue.js +4 -3
- package/dist/adapters/prisma/overdue.js.map +1 -1
- package/dist/adapters/prisma/plugin-connections.d.ts +4 -0
- package/dist/adapters/prisma/plugin-connections.js +20 -0
- package/dist/adapters/prisma/plugin-connections.js.map +1 -0
- package/dist/adapters/prisma/registry.js +22 -16
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/rows.d.ts +9 -4
- package/dist/adapters/prisma/rows.js +77 -19
- package/dist/adapters/prisma/rows.js.map +1 -1
- package/dist/adapters/prisma/unit-of-work.d.ts +5 -2
- package/dist/adapters/prisma/unit-of-work.js +7 -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 +28 -6
- package/dist/adapters/trpc/fleet.d.ts +314 -51
- package/dist/adapters/trpc/fleet.js +137 -75
- 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 +435 -42
- package/dist/adapters/trpc/ship-contract.js +6 -3
- package/dist/adapters/trpc/ship-contract.js.map +1 -1
- package/dist/adapters/trpc/ship-protocol.js +1 -1
- package/dist/adapters/trpc/ship-protocol.js.map +1 -1
- package/dist/adapters/trpc/ship.d.ts +117 -1
- package/dist/adapters/trpc/ship.js +52 -6
- package/dist/adapters/trpc/ship.js.map +1 -1
- package/dist/adapters/trpc/trpc.d.ts +43 -17
- package/dist/adapters/trpc/trpc.js +131 -31
- 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 +11 -3
- package/dist/domain/messaging/delivery.js +23 -15
- package/dist/domain/messaging/delivery.js.map +1 -1
- package/dist/domain/messaging/dismiss-delivery.d.ts +2 -2
- package/dist/domain/messaging/hand-over-delivery.d.ts +1 -0
- package/dist/domain/messaging/hand-over-delivery.js +1 -0
- package/dist/domain/messaging/hand-over-delivery.js.map +1 -1
- 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/overdue.d.ts +2 -0
- package/dist/domain/messaging/overdue.js +3 -0
- package/dist/domain/messaging/overdue.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/ports.d.ts +2 -0
- package/dist/domain/messaging/push-receive-deliveries.d.ts +4 -1
- package/dist/domain/messaging/push-receive-deliveries.js +5 -3
- package/dist/domain/messaging/push-receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-deliveries.d.ts +21 -0
- package/dist/domain/messaging/receive-deliveries.js +5 -3
- package/dist/domain/messaging/receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-reply.d.ts +32 -0
- package/dist/domain/messaging/receive-reply.js +25 -0
- package/dist/domain/messaging/receive-reply.js.map +1 -0
- 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 +49 -24
- package/dist/domain/registry/check-reach.js +77 -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 +26 -13
- package/dist/domain/registry/commission-ship.js +199 -22
- 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 +31 -0
- package/dist/domain/registry/connect-plugin.js +34 -0
- package/dist/domain/registry/connect-plugin.js.map +1 -0
- 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 +12 -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 +22 -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/leases.d.ts +6 -3
- package/dist/domain/registry/leases.js +7 -5
- package/dist/domain/registry/leases.js.map +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 +96 -115
- package/dist/domain/registry/network-settings.js +101 -150
- package/dist/domain/registry/network-settings.js.map +1 -1
- package/dist/domain/registry/plugin-connection.d.ts +48 -0
- package/dist/domain/registry/plugin-connection.js +35 -0
- package/dist/domain/registry/plugin-connection.js.map +1 -0
- package/dist/domain/registry/ports.d.ts +60 -12
- 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 +5 -4
- package/dist/domain/registry/read-built-in-rules.js +9 -7
- 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 +10 -10
- package/dist/domain/registry/read-reach.js +26 -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 +5 -3
- package/dist/domain/registry/recrew-ship.js.map +1 -1
- package/dist/domain/registry/release-ship.d.ts +7 -4
- package/dist/domain/registry/release-ship.js +8 -4
- 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 +17 -12
- package/dist/domain/registry/retire-ship.js +30 -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 +55 -17
- package/dist/domain/registry/ship.js +107 -16
- 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/delivery-way.d.ts +9 -5
- package/dist/domain/shared/delivery-way.js +17 -5
- package/dist/domain/shared/delivery-way.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/health.d.ts +3 -1
- package/dist/domain/shared/health.js +5 -3
- package/dist/domain/shared/health.js.map +1 -1
- package/dist/domain/shared/history.d.ts +5 -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 +4 -3
- package/dist/domain/shared/read-health.js +9 -3
- package/dist/domain/shared/read-health.js.map +1 -1
- 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 +31 -0
- package/dist/domain/shared/read-sent-message.js +28 -0
- package/dist/domain/shared/read-sent-message.js.map +1 -0
- 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/domain/shared/stuck.js +4 -2
- package/dist/domain/shared/stuck.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/container-images.d.ts +14 -0
- package/dist/testing/container-images.js +18 -0
- package/dist/testing/container-images.js.map +1 -0
- package/dist/testing/database.d.ts +14 -0
- package/dist/testing/database.js +48 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/fleet.d.ts +13 -0
- package/dist/testing/fleet.js +17 -0
- package/dist/testing/fleet.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/keys.d.ts +1 -0
- package/dist/testing/keys.js +7 -0
- package/dist/testing/keys.js.map +1 -0
- package/dist/testing/migrate-lock.d.ts +12 -0
- package/dist/testing/migrate-lock.js +51 -0
- package/dist/testing/migrate-lock.js.map +1 -0
- package/dist/testing/migrated-template.d.ts +12 -0
- package/dist/testing/migrated-template.js +29 -0
- package/dist/testing/migrated-template.js.map +1 -0
- package/dist/testing/postgres-container.d.ts +16 -0
- package/dist/testing/postgres-container.js +30 -0
- package/dist/testing/postgres-container.js.map +1 -0
- package/dist/testing/postgres-global-setup.d.ts +15 -0
- package/dist/testing/postgres-global-setup.js +20 -0
- package/dist/testing/postgres-global-setup.js.map +1 -0
- package/dist/testing/prisma-cli.d.ts +5 -0
- package/dist/testing/prisma-cli.js +15 -0
- package/dist/testing/prisma-cli.js.map +1 -0
- package/dist/testing/result.d.ts +5 -0
- package/dist/testing/result.js +15 -0
- package/dist/testing/result.js.map +1 -0
- package/dist/wiring.d.ts +27 -6
- package/dist/wiring.js +44 -11
- package/dist/wiring.js.map +1 -1
- package/package.json +26 -3
- package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +8 -7
- package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +3 -1
- package/src/adapters/prisma/migrations/20261019130000_plugin_connections/migration.sql +54 -0
- package/src/adapters/prisma/migrations/20261019150000_network_plugin_registered_at/migration.sql +23 -0
- package/src/adapters/prisma/migrations/20261019160000_lease_waker/migration.sql +4 -0
- 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 +160 -22
- 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,34 +1,42 @@
|
|
|
1
1
|
import { type ExplainedReach, type 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 DomainError } from '../shared/errors.js';
|
|
5
4
|
import { type Result } from '../shared/result.js';
|
|
6
5
|
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
7
6
|
import { type CheckReachTx } from './check-reach.js';
|
|
8
|
-
import
|
|
7
|
+
import { type NoNetworkRulesDraft } from './network-rules-draft.js';
|
|
8
|
+
import { type RulesInForce } from './network-settings.js';
|
|
9
|
+
import { type ReadReachOf } from './read-reach.js';
|
|
10
|
+
import type { NetworkRulesDraftRepository, ShipRepository } from './ports.js';
|
|
9
11
|
export interface ExplainReachTx {
|
|
10
12
|
networkSettings: CheckReachTx['networkSettings'];
|
|
11
13
|
ships: Pick<ShipRepository, 'find' | 'listActive'>;
|
|
12
14
|
labels: CheckReachTx['labels'];
|
|
13
|
-
|
|
14
|
-
declaredNetworkRules:
|
|
15
|
+
pluginConnections: CheckReachTx['pluginConnections'];
|
|
16
|
+
declaredNetworkRules: CheckReachTx['declaredNetworkRules'];
|
|
17
|
+
networkRulesDrafts: Pick<NetworkRulesDraftRepository, 'find'>;
|
|
15
18
|
}
|
|
16
|
-
export type ExplainReachFailure = DomainError<'
|
|
19
|
+
export type ExplainReachFailure = DomainError<'NOT_REACHABLE' | 'SHIP_NOT_FOUND'> | NoNetworkRulesDraft;
|
|
17
20
|
export type ExplainReach = (caller: Caller, input: {
|
|
18
21
|
fromShipId: ShipId;
|
|
19
22
|
toShipId?: ShipId;
|
|
23
|
+
against?: 'applied' | 'draft';
|
|
20
24
|
}) => Promise<Result<ExplainedReach, ExplainReachFailure>>;
|
|
21
25
|
/**
|
|
22
|
-
* Use case:
|
|
23
|
-
* reaches one ship (decision 0034). It answers as a send would be
|
|
24
|
-
* this moment: the
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* There is no message, so no answer to a sender. It
|
|
29
|
-
* explain is not a send.
|
|
26
|
+
* Use case: an actor asks which ships a ship reaches now, per verb, or
|
|
27
|
+
* whether it reaches one ship (decision 0034). It answers as a send would be
|
|
28
|
+
* checked at this moment: the built-in rules, the fleet's own rules and the
|
|
29
|
+
* declared ones; or, asked of the draft, as one would be checked once the
|
|
30
|
+
* draft is applied. Each ship comes with the rule that allows it: a built-in
|
|
31
|
+
* rule, one of the fleet's own by its place, or a declared rule by its
|
|
32
|
+
* declarer and place. There is no message, so no answer to a sender. It
|
|
33
|
+
* records nothing: an explain is not a send. Any actor holding fleet:explain
|
|
34
|
+
* asks, the scope checked before this runs, about the ships it reads
|
|
35
|
+
* (decision 0053).
|
|
30
36
|
*/
|
|
31
37
|
export declare function createExplainReach(deps: {
|
|
32
38
|
uow: UnitOfWork<ExplainReachTx>;
|
|
33
|
-
|
|
39
|
+
readReach: ReadReachOf;
|
|
34
40
|
}): ExplainReach;
|
|
41
|
+
/** The rules that would be in force once the fleet's draft is applied, with the declared ones as they are now; none without a draft. */
|
|
42
|
+
export declare function draftInForce(tx: Pick<ExplainReachTx, 'networkSettings' | 'declaredNetworkRules' | 'networkRulesDrafts'>, fleetId: Caller['fleetId']): Promise<RulesInForce | undefined>;
|
|
@@ -1,65 +1,65 @@
|
|
|
1
1
|
import { NETWORK_VERBS } from '@aeolus-fleet/common';
|
|
2
2
|
import { refuse } from '../shared/errors.js';
|
|
3
3
|
import { ok } from '../shared/result.js';
|
|
4
|
-
import { reaching,
|
|
5
|
-
import {
|
|
4
|
+
import { reaching, rulesInForceOf, shipAsItIs } from './check-reach.js';
|
|
5
|
+
import { refuseNoDraft } from './network-rules-draft.js';
|
|
6
|
+
import { reachRuleOf, rulesInForce } from './network-settings.js';
|
|
7
|
+
import { readsShip } from './read-reach.js';
|
|
6
8
|
/**
|
|
7
|
-
* Use case:
|
|
8
|
-
* reaches one ship (decision 0034). It answers as a send would be
|
|
9
|
-
* this moment: the
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* There is no message, so no answer to a sender. It
|
|
14
|
-
* explain is not a send.
|
|
9
|
+
* Use case: an actor asks which ships a ship reaches now, per verb, or
|
|
10
|
+
* whether it reaches one ship (decision 0034). It answers as a send would be
|
|
11
|
+
* checked at this moment: the built-in rules, the fleet's own rules and the
|
|
12
|
+
* declared ones; or, asked of the draft, as one would be checked once the
|
|
13
|
+
* draft is applied. Each ship comes with the rule that allows it: a built-in
|
|
14
|
+
* rule, one of the fleet's own by its place, or a declared rule by its
|
|
15
|
+
* declarer and place. There is no message, so no answer to a sender. It
|
|
16
|
+
* records nothing: an explain is not a send. Any actor holding fleet:explain
|
|
17
|
+
* asks, the scope checked before this runs, about the ships it reads
|
|
18
|
+
* (decision 0053).
|
|
15
19
|
*/
|
|
16
20
|
export function createExplainReach(deps) {
|
|
17
|
-
return (caller, input) =>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
21
|
+
return async (caller, input) => {
|
|
22
|
+
const reads = await deps.readReach(caller);
|
|
23
|
+
return deps.uow.run(async (tx) => {
|
|
24
|
+
const { fleetId } = caller;
|
|
25
|
+
const from = await tx.ships.find(fleetId, input.fromShipId);
|
|
26
|
+
if (from?.retiredAt !== null) {
|
|
27
|
+
return refuse('SHIP_NOT_FOUND', 'The fleet has no active ship with this id to explain from');
|
|
28
|
+
}
|
|
29
|
+
if (!readsShip(reads, from.id)) {
|
|
30
|
+
return refuse('NOT_REACHABLE', 'The network rules do not let you read the ship to explain from');
|
|
31
|
+
}
|
|
32
|
+
const active = await tx.ships.listActive(fleetId);
|
|
33
|
+
const others = active.filter((ship) => ship.id !== from.id && readsShip(reads, ship.id) && (input.toShipId === undefined || ship.id === input.toShipId));
|
|
34
|
+
if (input.toShipId !== undefined && others.length === 0 && input.toShipId !== from.id) {
|
|
35
|
+
return refuse('SHIP_NOT_FOUND', 'The fleet has no active ship with this id to explain reach to');
|
|
36
|
+
}
|
|
37
|
+
const inForce = input.against === 'draft' ? await draftInForce(tx, fleetId) : await rulesInForceOf(tx, await tx.networkSettings.findForShare(fleetId));
|
|
38
|
+
if (inForce === undefined) {
|
|
39
|
+
return refuseNoDraft();
|
|
40
|
+
}
|
|
41
|
+
const sender = reaching(await shipAsItIs(tx, from));
|
|
42
|
+
const explained = { send: [], read: [], manage: [] };
|
|
43
|
+
for (const ship of others) {
|
|
44
|
+
const recipient = reaching(await shipAsItIs(tx, ship));
|
|
45
|
+
for (const verb of NETWORK_VERBS) {
|
|
46
|
+
const rule = reachRuleOf(inForce, { verb, sender, recipient, isAnswerToSender: false });
|
|
47
|
+
if (rule !== undefined) {
|
|
48
|
+
explained[verb].push({ shipId: ship.id, rule });
|
|
49
|
+
}
|
|
42
50
|
}
|
|
43
51
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
52
|
+
return ok(explained);
|
|
53
|
+
});
|
|
54
|
+
};
|
|
47
55
|
}
|
|
48
|
-
/**
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for (const { shipId, rules } of held.declared) {
|
|
55
|
-
const index = rules.findIndex((each) => ruleText(each) === text);
|
|
56
|
-
if (index !== -1) {
|
|
57
|
-
return { declared: shipId, index };
|
|
58
|
-
}
|
|
56
|
+
/** The rules that would be in force once the fleet's draft is applied, with the declared ones as they are now; none without a draft. */
|
|
57
|
+
export async function draftInForce(tx, fleetId) {
|
|
58
|
+
const settings = await tx.networkSettings.findForShare(fleetId);
|
|
59
|
+
const draft = await tx.networkRulesDrafts.find(fleetId);
|
|
60
|
+
if (draft === undefined) {
|
|
61
|
+
return undefined;
|
|
59
62
|
}
|
|
60
|
-
return {
|
|
61
|
-
}
|
|
62
|
-
function ruleText(rule) {
|
|
63
|
-
return JSON.stringify(rule === undefined ? null : [rule.verb, rule.from, rule.to]);
|
|
63
|
+
return rulesInForce({ rules: draft.rules, isViewerReadOn: settings.isViewerReadOn }, await tx.declaredNetworkRules.list(fleetId));
|
|
64
64
|
}
|
|
65
65
|
//# sourceMappingURL=explain-reach.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain-reach.js","sourceRoot":"","sources":["../../../src/domain/registry/explain-reach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"explain-reach.js","sourceRoot":"","sources":["../../../src/domain/registry/explain-reach.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
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 ListedShip, type ShipOutsideReadReach } from './list-fleet.js';
|
|
@@ -26,7 +26,7 @@ export interface ShipDetail extends Omit<ListedShip, 'report' | 'crewRequest'> {
|
|
|
26
26
|
name: string;
|
|
27
27
|
} | null;
|
|
28
28
|
}
|
|
29
|
-
export type GetShip = (caller:
|
|
29
|
+
export type GetShip = (caller: ShipCaller, input: {
|
|
30
30
|
shipId: ShipId;
|
|
31
31
|
}) => Promise<Result<ShipDetail | ShipOutsideReadReach, DomainError<'SHIP_NOT_FOUND' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER'>>>;
|
|
32
32
|
/**
|
|
@@ -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 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';
|
|
@@ -24,7 +24,9 @@ export type GetStartingPrompt = (caller: Caller, input: {
|
|
|
24
24
|
* prompt lost before use costs nothing. The caller's scope (fleet:manage or
|
|
25
25
|
* crew:run) is checked before this runs; crew:run reaches only
|
|
26
26
|
* the ships whose crew requests are assigned to the caller's ship, and
|
|
27
|
-
* fleet:manage the ships in its manage reach (decision 0034).
|
|
27
|
+
* fleet:manage the ships in its manage reach (decision 0034). An account gets
|
|
28
|
+
* one only for its own person ship, with no scope for it, so the app it uses
|
|
29
|
+
* crews it (decision 0052).
|
|
28
30
|
*
|
|
29
31
|
* Locks in the fleet's order: the ship first, so concurrent prompts for one
|
|
30
32
|
* ship take turns and the last one issued is the valid one; then its secret;
|
|
@@ -1,9 +1,9 @@
|
|
|
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 { keepingReachRefusal } from './check-reach.js';
|
|
6
|
-
import { checkManagedOrAssigned } from './managed-or-assigned.js';
|
|
6
|
+
import { checkManagedOrAssigned, checkOwnPersonShip } from './managed-or-assigned.js';
|
|
7
7
|
import { checkCanIssueStartingPrompt } from './ship.js';
|
|
8
8
|
import { issueStartingPrompt } from './starting-prompt.js';
|
|
9
9
|
/**
|
|
@@ -12,7 +12,9 @@ import { issueStartingPrompt } from './starting-prompt.js';
|
|
|
12
12
|
* prompt lost before use costs nothing. The caller's scope (fleet:manage or
|
|
13
13
|
* crew:run) is checked before this runs; crew:run reaches only
|
|
14
14
|
* the ships whose crew requests are assigned to the caller's ship, and
|
|
15
|
-
* fleet:manage the ships in its manage reach (decision 0034).
|
|
15
|
+
* fleet:manage the ships in its manage reach (decision 0034). An account gets
|
|
16
|
+
* one only for its own person ship, with no scope for it, so the app it uses
|
|
17
|
+
* crews it (decision 0052).
|
|
16
18
|
*
|
|
17
19
|
* Locks in the fleet's order: the ship first, so concurrent prompts for one
|
|
18
20
|
* ship take turns and the last one issued is the valid one; then its secret;
|
|
@@ -28,11 +30,11 @@ export function createGetStartingPrompt(deps) {
|
|
|
28
30
|
return refuse('SHIP_NOT_FOUND', `Ship ${shipId} does not exist`);
|
|
29
31
|
}
|
|
30
32
|
const at = deps.clock.now();
|
|
31
|
-
const reaches = await checkManagedOrAssigned({ tx, ids: deps.ids }, { caller, ship, at });
|
|
33
|
+
const reaches = caller.kind === 'account' ? checkOwnPersonShip(caller, ship) : await checkManagedOrAssigned({ tx, ids: deps.ids }, { caller, ship, at });
|
|
32
34
|
if (!reaches.isOk) {
|
|
33
35
|
return reaches;
|
|
34
36
|
}
|
|
35
|
-
const actor =
|
|
37
|
+
const actor = actorOf(caller);
|
|
36
38
|
await revokeShipSecret({ tx, ids: deps.ids }, { fleetId, shipId, actor, at });
|
|
37
39
|
const lease = await tx.leases.findOpenForUpdate(fleetId, shipId);
|
|
38
40
|
const allowed = checkCanIssueStartingPrompt(ship, { isCrewed: lease !== undefined });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-starting-prompt.js","sourceRoot":"","sources":["../../../src/domain/registry/get-starting-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"get-starting-prompt.js","sourceRoot":"","sources":["../../../src/domain/registry/get-starting-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAC3E,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,mBAAmB,EAAqB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAA4B,MAAM,0BAA0B,CAAC;AAEhH,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAoD,MAAM,sBAAsB,CAAC;AAiB7G;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAKvC;IACC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAmE,EAAE;QAC1G,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,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,sBAAsB,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACzJ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,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,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,2BAA2B,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EACnD,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAC/B,CAAC;QACF,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -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 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 EventLog } from '../shared/events.js';
|
|
@@ -14,7 +14,7 @@ export interface GiveBackCrewRequestTx extends LeaseTx, CredentialTx {
|
|
|
14
14
|
crewRequests: CrewRequestRepository;
|
|
15
15
|
events: EventLog;
|
|
16
16
|
}
|
|
17
|
-
export type GiveBack = (caller:
|
|
17
|
+
export type GiveBack = (caller: ShipCaller, input: {
|
|
18
18
|
shipId: ShipId;
|
|
19
19
|
settingsVersion: number;
|
|
20
20
|
reason: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
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 { recordEvent
|
|
4
|
+
import { recordEvent } from '../shared/events.js';
|
|
4
5
|
import { ok } from '../shared/result.js';
|
|
5
6
|
import { giveBackCrewRequest } from './crew-request.js';
|
|
6
7
|
import { endLease } from './leases.js';
|
|
@@ -21,7 +22,7 @@ export function createGiveBackCrewRequest(deps) {
|
|
|
21
22
|
return refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
22
23
|
}
|
|
23
24
|
const at = deps.clock.now();
|
|
24
|
-
const actor =
|
|
25
|
+
const actor = actorOf(caller);
|
|
25
26
|
const given = giveBackCrewRequest({ ship, current: await tx.crewRequests.find(fleetId, ship.id), trierarchShipId: caller.shipId }, { settingsVersion: input.settingsVersion, reason: input.reason, at, actor });
|
|
26
27
|
if (!given.isOk) {
|
|
27
28
|
return given;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"give-back-crew-request.js","sourceRoot":"","sources":["../../../src/domain/registry/give-back-crew-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"give-back-crew-request.js","sourceRoot":"","sources":["../../../src/domain/registry/give-back-crew-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
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';
|
|
6
6
|
import { type Result } from '../shared/result.js';
|
|
7
7
|
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
8
|
+
import { type CheckManageTx, type NotReachable } from './check-reach.js';
|
|
8
9
|
import type { ScopeNamespaceRepository, ShipRepository } from './ports.js';
|
|
9
10
|
import { type GrantScopesRefusal } from './scope-grant.js';
|
|
10
|
-
export interface GrantScopesTx {
|
|
11
|
+
export interface GrantScopesTx extends Omit<CheckManageTx, 'ships'> {
|
|
11
12
|
ships: Pick<ShipRepository, 'find' | 'findForUpdate' | 'setScopes'>;
|
|
12
13
|
scopeNamespaces: Pick<ScopeNamespaceRepository, 'lockNamespace' | 'find'>;
|
|
13
14
|
events: EventLog;
|
|
@@ -18,10 +19,12 @@ export type GrantScopes = (caller: Caller, input: {
|
|
|
18
19
|
revoke: readonly string[];
|
|
19
20
|
}) => Promise<Result<{
|
|
20
21
|
scopes: readonly string[];
|
|
21
|
-
},
|
|
22
|
+
}, GrantScopesUseCaseRefusal>>;
|
|
23
|
+
export type GrantScopesUseCaseRefusal = GrantScopesRefusal | NotReachable | DomainError<'SHIP_NOT_FOUND'>;
|
|
22
24
|
/**
|
|
23
|
-
* Use case:
|
|
24
|
-
* (
|
|
25
|
+
* Use case: any actor grants and revokes scopes on a live ship of its fleet
|
|
26
|
+
* within its manage reach (decisions 0046, 0053), within what it may grant,
|
|
27
|
+
* read from the server or its checked token. A refused reach keeps its record.
|
|
25
28
|
* Its scope (scopes:grant) is checked before this runs. In one unit of work,
|
|
26
29
|
* holding the ship, then each plugin namespace the scopes name, so a
|
|
27
30
|
* declaration that removes a scope waits: the ship's scopes and
|
|
@@ -1,25 +1,34 @@
|
|
|
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 { ok } from '../shared/result.js';
|
|
5
|
+
import { checkManage, keepingReachRefusal } from './check-reach.js';
|
|
4
6
|
import { grantScopes } from './scope-grant.js';
|
|
5
7
|
import { lockNamedNamespaces } from './named-namespaces.js';
|
|
6
8
|
/**
|
|
7
|
-
* Use case:
|
|
8
|
-
* (
|
|
9
|
+
* Use case: any actor grants and revokes scopes on a live ship of its fleet
|
|
10
|
+
* within its manage reach (decisions 0046, 0053), within what it may grant,
|
|
11
|
+
* read from the server or its checked token. A refused reach keeps its record.
|
|
9
12
|
* Its scope (scopes:grant) is checked before this runs. In one unit of work,
|
|
10
13
|
* holding the ship, then each plugin namespace the scopes name, so a
|
|
11
14
|
* declaration that removes a scope waits: the ship's scopes and
|
|
12
15
|
* ScopesChanged. The ship's crew holds them from its next call.
|
|
13
16
|
*/
|
|
14
17
|
export function createGrantScopes(deps) {
|
|
15
|
-
return (caller, input) => deps.uow
|
|
18
|
+
return (caller, input) => keepingReachRefusal(deps.uow, async (tx) => {
|
|
16
19
|
const { fleetId } = caller;
|
|
17
20
|
const ship = await tx.ships.findForUpdate(fleetId, input.shipId);
|
|
18
21
|
if (!ship) {
|
|
19
22
|
return refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
20
23
|
}
|
|
24
|
+
const at = deps.clock.now();
|
|
25
|
+
const managed = await checkManage({ tx, ids: deps.ids }, { manager: caller, shipId: ship.id, at });
|
|
26
|
+
if (!managed.isOk) {
|
|
27
|
+
return managed;
|
|
28
|
+
}
|
|
21
29
|
const namespaces = await lockNamedNamespaces(tx, { fleetId, scopes: [...input.grant, ...input.revoke] });
|
|
22
|
-
const
|
|
30
|
+
const granter = { shipId: isShipCaller(caller) ? caller.shipId : null, isOperator: caller.kind === 'operator', scopes: caller.scopes };
|
|
31
|
+
const granted = grantScopes({ ship, granter, grant: input.grant, revoke: input.revoke, at, actor: actorOf(caller) }, { namespaces });
|
|
23
32
|
if (!granted.isOk) {
|
|
24
33
|
return granted;
|
|
25
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant-scopes.js","sourceRoot":"","sources":["../../../src/domain/registry/grant-scopes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grant-scopes.js","sourceRoot":"","sources":["../../../src/domain/registry/grant-scopes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type FleetId, type LabelId, type LabelValueId, type ShipId
|
|
1
|
+
import { type FleetId, type LabelId, type LabelValueId, type ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Caller } from '../shared/caller.js';
|
|
2
3
|
import { type DomainError } from '../shared/errors.js';
|
|
3
4
|
import type { Actor, NewEvent } from '../shared/events.js';
|
|
4
5
|
import { type Result } from '../shared/result.js';
|
|
@@ -8,9 +9,23 @@ export interface LabelValue {
|
|
|
8
9
|
id: LabelValueId;
|
|
9
10
|
value: string;
|
|
10
11
|
}
|
|
12
|
+
/** Who owns a label (decision 0031): the ship that defined it, or the installation; never an account. */
|
|
13
|
+
export type LabelOwner = {
|
|
14
|
+
kind: 'ship';
|
|
15
|
+
shipId: ShipId;
|
|
16
|
+
} | {
|
|
17
|
+
kind: 'installation';
|
|
18
|
+
};
|
|
19
|
+
/** The owner an actor defines a label as: none for an account, which owns no label (decision 0031). */
|
|
20
|
+
export declare function labelOwnerOf(caller: Caller): LabelOwner | undefined;
|
|
21
|
+
/** The owner as a refusal names it: a ship by its name, or the installation. */
|
|
22
|
+
export declare function ownerNameOf(owner: LabelOwner, shipNameOf: (shipId: ShipId) => Promise<string | undefined>): Promise<string>;
|
|
23
|
+
/** Whether the other is the same owner: none, an account, is no owner. */
|
|
24
|
+
export declare function isSameOwner(owner: LabelOwner, other: LabelOwner | undefined): boolean;
|
|
11
25
|
/**
|
|
12
26
|
* A label (docs/blueprint.md, "Label"; decision 0031): a key with a defined
|
|
13
|
-
* set of values, each with its own id, owned by the ship
|
|
27
|
+
* set of values, each with its own id, owned by the ship or the installation
|
|
28
|
+
* that defined it.
|
|
14
29
|
* Ids are for machines, key and value texts for people. Only its owner
|
|
15
30
|
* changes its values and assigns them, to any ship, its own included. It
|
|
16
31
|
* retires with its owner.
|
|
@@ -22,16 +37,19 @@ export interface Label {
|
|
|
22
37
|
key: string;
|
|
23
38
|
/** In the order the owner gave them, each once. */
|
|
24
39
|
values: readonly LabelValue[];
|
|
25
|
-
|
|
40
|
+
owner: LabelOwner;
|
|
26
41
|
}
|
|
27
|
-
/** A label as the fleet lists it: its id, key and values, and its owner by id and name. */
|
|
42
|
+
/** A label as the fleet lists it: its id, key and values, and its owner: a ship by id and name, or the installation. */
|
|
28
43
|
export interface ListedLabel {
|
|
29
44
|
id: LabelId;
|
|
30
45
|
key: string;
|
|
31
46
|
values: readonly LabelValue[];
|
|
32
47
|
owner: {
|
|
48
|
+
kind: 'ship';
|
|
33
49
|
id: ShipId;
|
|
34
50
|
name: string;
|
|
51
|
+
} | {
|
|
52
|
+
kind: 'installation';
|
|
35
53
|
};
|
|
36
54
|
}
|
|
37
55
|
/** One value a ship carries, with its label: ids and texts. */
|
|
@@ -64,15 +82,17 @@ type InvalidValue = DomainError<'INVALID_LABEL_VALUE'>;
|
|
|
64
82
|
type InvalidValues = DomainError<'INVALID_LABEL_VALUES'>;
|
|
65
83
|
/** A label's key, checked against the limits. */
|
|
66
84
|
export declare function labelKey(key: string): Result<string, InvalidKey>;
|
|
67
|
-
export type DefineLabelRefusal = InvalidKey | InvalidValue | InvalidValues | DomainError<'LABEL_KEY_TAKEN'>;
|
|
85
|
+
export type DefineLabelRefusal = InvalidKey | InvalidValue | InvalidValues | DomainError<'LABEL_KEY_TAKEN' | 'ACCOUNT_OWNS_NO_LABEL'>;
|
|
68
86
|
/**
|
|
69
|
-
* A ship defines a label, owning it: a key unique in the
|
|
70
|
-
* the label and each value with its new id.
|
|
71
|
-
*
|
|
72
|
-
*
|
|
87
|
+
* A ship or the installation defines a label, owning it: a key unique in the
|
|
88
|
+
* fleet and its values, the label and each value with its new id. An account
|
|
89
|
+
* owns no label, so it defines none (decision 0031). A key the fleet has is
|
|
90
|
+
* refused, naming its owner. LabelDefined names the owning ship, if a ship
|
|
91
|
+
* owns it, with the label and its values.
|
|
73
92
|
*/
|
|
74
|
-
export declare function defineLabel({ owner, existing, }: {
|
|
75
|
-
|
|
93
|
+
export declare function defineLabel({ fleetId, owner, existing, }: {
|
|
94
|
+
fleetId: FleetId;
|
|
95
|
+
owner: LabelOwner | undefined;
|
|
76
96
|
existing: {
|
|
77
97
|
label: Label;
|
|
78
98
|
ownerName: string;
|
|
@@ -103,7 +123,7 @@ export declare function changeLabelValues({ label, ownerName, carriers, }: {
|
|
|
103
123
|
shipName: string;
|
|
104
124
|
}[];
|
|
105
125
|
}, input: {
|
|
106
|
-
|
|
126
|
+
caller: LabelOwner | undefined;
|
|
107
127
|
values: readonly NewLabelValue[];
|
|
108
128
|
at: Date;
|
|
109
129
|
actor: Actor;
|
|
@@ -122,14 +142,24 @@ export declare function deleteLabel({ label, ownerName, carrierNames }: {
|
|
|
122
142
|
ownerName: string;
|
|
123
143
|
carrierNames: readonly string[];
|
|
124
144
|
}, input: {
|
|
125
|
-
|
|
145
|
+
caller: LabelOwner | undefined;
|
|
126
146
|
at: Date;
|
|
127
147
|
actor: Actor;
|
|
128
148
|
}): Result<{
|
|
129
149
|
events: NewEvent[];
|
|
130
150
|
}, DeleteLabelRefusal>;
|
|
131
|
-
/** A ship the caller may not label: neither its own nor one it commissioned, and the caller
|
|
151
|
+
/** A ship the caller may not label: neither its own nor one it commissioned, and the caller holds no labels:any. */
|
|
132
152
|
export type NotYourShipToLabel = DomainError<'NOT_YOUR_SHIP_TO_LABEL'>;
|
|
153
|
+
/**
|
|
154
|
+
* Who labels a ship: the label's owner on its own ship and the ships it
|
|
155
|
+
* commissioned, or an actor holding labels:any, whose manage reach the use
|
|
156
|
+
* case checks, on any ship (decisions 0031, 0053).
|
|
157
|
+
*/
|
|
158
|
+
export interface Labeller {
|
|
159
|
+
owner: LabelOwner | undefined;
|
|
160
|
+
shipId: ShipId | null;
|
|
161
|
+
canLabelAnyShip: boolean;
|
|
162
|
+
}
|
|
133
163
|
export type AssignLabelRefusal = NotTheOwner | NotYourShipToLabel | DomainError<'SHIP_ALREADY_RETIRED' | 'SHIP_LABEL_LIMIT_REACHED'>;
|
|
134
164
|
/**
|
|
135
165
|
* The owner gives a ship one of its label's values, by its id: the ship
|
|
@@ -144,8 +174,7 @@ export declare function assignLabel({ label, ownerName, ship, carried, }: {
|
|
|
144
174
|
ship: Ship;
|
|
145
175
|
carried: readonly ShipLabel[];
|
|
146
176
|
}, input: {
|
|
147
|
-
|
|
148
|
-
callerKind: ShipKind;
|
|
177
|
+
caller: Labeller;
|
|
149
178
|
valueId: LabelValueId;
|
|
150
179
|
at: Date;
|
|
151
180
|
actor: Actor;
|
|
@@ -153,6 +182,29 @@ export declare function assignLabel({ label, ownerName, ship, carried, }: {
|
|
|
153
182
|
assignment: ShipLabel | undefined;
|
|
154
183
|
events: NewEvent[];
|
|
155
184
|
}, AssignLabelRefusal>;
|
|
185
|
+
/** A label value a commission gives the new ship, with its label as the fleet holds it now and its owner's name. */
|
|
186
|
+
export interface GivenValue {
|
|
187
|
+
label: Label;
|
|
188
|
+
valueId: LabelValueId;
|
|
189
|
+
ownerName: string;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The values a commission gives the new ship (decision 0053), each once: a
|
|
193
|
+
* value of a label the commissioner owns, or a value it carries itself, a
|
|
194
|
+
* ship's labels or an account's token, so a new ship never reaches further
|
|
195
|
+
* than its commissioner can make it. Argo is no exception. LabelAssigned
|
|
196
|
+
* names the new ship for each.
|
|
197
|
+
*/
|
|
198
|
+
export declare function labelsAtCommission(given: readonly GivenValue[], commission: {
|
|
199
|
+
ship: Ship;
|
|
200
|
+
owner: LabelOwner | undefined;
|
|
201
|
+
carried: readonly LabelValueId[];
|
|
202
|
+
at: Date;
|
|
203
|
+
actor: Actor;
|
|
204
|
+
}): Result<{
|
|
205
|
+
assignments: ShipLabel[];
|
|
206
|
+
events: NewEvent[];
|
|
207
|
+
}, NotTheOwner>;
|
|
156
208
|
export type UnassignLabelRefusal = NotTheOwner | NotYourShipToLabel;
|
|
157
209
|
/**
|
|
158
210
|
* The owner takes one value of its label off a ship. A ship that does not
|
|
@@ -165,8 +217,7 @@ export declare function unassignLabel({ label, ownerName, ship, carried, }: {
|
|
|
165
217
|
ship: Ship;
|
|
166
218
|
carried: readonly ShipLabel[];
|
|
167
219
|
}, input: {
|
|
168
|
-
|
|
169
|
-
callerKind: ShipKind;
|
|
220
|
+
caller: Labeller;
|
|
170
221
|
valueId: LabelValueId;
|
|
171
222
|
at: Date;
|
|
172
223
|
actor: Actor;
|