@aeolus-fleet/core 0.0.0 → 0.19.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/LICENSE +201 -0
- package/README.md +98 -1
- package/dist/adapters/cli/fleet-init.d.ts +14 -0
- package/dist/adapters/cli/fleet-init.js +68 -0
- package/dist/adapters/cli/fleet-init.js.map +1 -0
- package/dist/adapters/cli/io.d.ts +35 -0
- package/dist/adapters/cli/io.js +21 -0
- package/dist/adapters/cli/io.js.map +1 -0
- package/dist/adapters/cli/migrate.d.ts +11 -0
- package/dist/adapters/cli/migrate.js +12 -0
- package/dist/adapters/cli/migrate.js.map +1 -0
- package/dist/adapters/cli/operator-reset-password.d.ts +12 -0
- package/dist/adapters/cli/operator-reset-password.js +49 -0
- package/dist/adapters/cli/operator-reset-password.js.map +1 -0
- package/dist/adapters/cli/run.d.ts +14 -0
- package/dist/adapters/cli/run.js +40 -0
- package/dist/adapters/cli/run.js.map +1 -0
- package/dist/adapters/cli/terminal.d.ts +20 -0
- package/dist/adapters/cli/terminal.js +68 -0
- package/dist/adapters/cli/terminal.js.map +1 -0
- package/dist/adapters/crypto/passwords.d.ts +2 -0
- package/dist/adapters/crypto/passwords.js +59 -0
- package/dist/adapters/crypto/passwords.js.map +1 -0
- package/dist/adapters/crypto/secrets.d.ts +5 -0
- package/dist/adapters/crypto/secrets.js +10 -0
- package/dist/adapters/crypto/secrets.js.map +1 -0
- package/dist/adapters/http/device-label.d.ts +9 -0
- package/dist/adapters/http/device-label.js +39 -0
- package/dist/adapters/http/device-label.js.map +1 -0
- package/dist/adapters/http/rate-limiter.d.ts +21 -0
- package/dist/adapters/http/rate-limiter.js +44 -0
- package/dist/adapters/http/rate-limiter.js.map +1 -0
- package/dist/adapters/http/request-credentials.d.ts +23 -0
- package/dist/adapters/http/request-credentials.js +45 -0
- package/dist/adapters/http/request-credentials.js.map +1 -0
- package/dist/adapters/http/server.d.ts +47 -0
- package/dist/adapters/http/server.js +216 -0
- package/dist/adapters/http/server.js.map +1 -0
- package/dist/adapters/http/version.d.ts +9 -0
- package/dist/adapters/http/version.js +23 -0
- package/dist/adapters/http/version.js.map +1 -0
- package/dist/adapters/mcp/mcp-endpoint.d.ts +8 -0
- package/dist/adapters/mcp/mcp-endpoint.js +127 -0
- package/dist/adapters/mcp/mcp-endpoint.js.map +1 -0
- package/dist/adapters/prisma/client.d.ts +10 -0
- package/dist/adapters/prisma/client.js +20 -0
- package/dist/adapters/prisma/client.js.map +1 -0
- package/dist/adapters/prisma/delivery-notices.d.ts +34 -0
- package/dist/adapters/prisma/delivery-notices.js +113 -0
- package/dist/adapters/prisma/delivery-notices.js.map +1 -0
- package/dist/adapters/prisma/event-log.d.ts +11 -0
- package/dist/adapters/prisma/event-log.js +61 -0
- package/dist/adapters/prisma/event-log.js.map +1 -0
- package/dist/adapters/prisma/failure-log.d.ts +22 -0
- package/dist/adapters/prisma/failure-log.js +70 -0
- package/dist/adapters/prisma/failure-log.js.map +1 -0
- package/dist/adapters/prisma/fleet-counter.d.ts +3 -0
- package/dist/adapters/prisma/fleet-counter.js +6 -0
- package/dist/adapters/prisma/fleet-counter.js.map +1 -0
- package/dist/adapters/prisma/fleet-event-wakeups.d.ts +33 -0
- package/dist/adapters/prisma/fleet-event-wakeups.js +86 -0
- package/dist/adapters/prisma/fleet-event-wakeups.js.map +1 -0
- package/dist/adapters/prisma/generated/browser.d.ts +127 -0
- package/dist/adapters/prisma/generated/browser.js +18 -0
- package/dist/adapters/prisma/generated/browser.js.map +1 -0
- package/dist/adapters/prisma/generated/client.d.ts +146 -0
- package/dist/adapters/prisma/generated/client.js +38 -0
- package/dist/adapters/prisma/generated/client.js.map +1 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +879 -0
- package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
- package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
- package/dist/adapters/prisma/generated/enums.d.ts +75 -0
- package/dist/adapters/prisma/generated/enums.js +73 -0
- package/dist/adapters/prisma/generated/enums.js.map +1 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +308 -0
- package/dist/adapters/prisma/generated/internal/class.js +52 -0
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2131 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +295 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +265 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ConsoleSession.d.ts +2137 -0
- package/dist/adapters/prisma/generated/models/ConsoleSession.js +2 -0
- package/dist/adapters/prisma/generated/models/ConsoleSession.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Credential.d.ts +1360 -0
- package/dist/adapters/prisma/generated/models/Credential.js +2 -0
- package/dist/adapters/prisma/generated/models/Credential.js.map +1 -0
- package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +1558 -0
- package/dist/adapters/prisma/generated/models/CrewRequest.js +2 -0
- package/dist/adapters/prisma/generated/models/CrewRequest.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Delivery.d.ts +2211 -0
- package/dist/adapters/prisma/generated/models/Delivery.js +2 -0
- package/dist/adapters/prisma/generated/models/Delivery.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Event.d.ts +1991 -0
- package/dist/adapters/prisma/generated/models/Event.js +2 -0
- package/dist/adapters/prisma/generated/models/Event.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +3032 -0
- package/dist/adapters/prisma/generated/models/Fleet.js +2 -0
- package/dist/adapters/prisma/generated/models/Fleet.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Guide.d.ts +943 -0
- package/dist/adapters/prisma/generated/models/Guide.js +2 -0
- package/dist/adapters/prisma/generated/models/Guide.js.map +1 -0
- package/dist/adapters/prisma/generated/models/GuideProgress.d.ts +1323 -0
- package/dist/adapters/prisma/generated/models/GuideProgress.js +2 -0
- package/dist/adapters/prisma/generated/models/GuideProgress.js.map +1 -0
- package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1036 -0
- package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
- package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
- package/dist/adapters/prisma/generated/models/InstallationSettings.d.ts +1027 -0
- package/dist/adapters/prisma/generated/models/InstallationSettings.js +2 -0
- package/dist/adapters/prisma/generated/models/InstallationSettings.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Lease.d.ts +2076 -0
- package/dist/adapters/prisma/generated/models/Lease.js +2 -0
- package/dist/adapters/prisma/generated/models/Lease.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Message.d.ts +2869 -0
- package/dist/adapters/prisma/generated/models/Message.js +2 -0
- package/dist/adapters/prisma/generated/models/Message.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Notice.d.ts +1068 -0
- package/dist/adapters/prisma/generated/models/Notice.js +2 -0
- package/dist/adapters/prisma/generated/models/Notice.js.map +1 -0
- package/dist/adapters/prisma/generated/models/NoticeDismissal.d.ts +1245 -0
- package/dist/adapters/prisma/generated/models/NoticeDismissal.js +2 -0
- package/dist/adapters/prisma/generated/models/NoticeDismissal.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Operator.d.ts +1173 -0
- package/dist/adapters/prisma/generated/models/Operator.js +2 -0
- package/dist/adapters/prisma/generated/models/Operator.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Ship.d.ts +3320 -0
- package/dist/adapters/prisma/generated/models/Ship.js +2 -0
- package/dist/adapters/prisma/generated/models/Ship.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SignInTicket.d.ts +1222 -0
- package/dist/adapters/prisma/generated/models/SignInTicket.js +2 -0
- package/dist/adapters/prisma/generated/models/SignInTicket.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +18 -0
- package/dist/adapters/prisma/generated/models.js +2 -0
- package/dist/adapters/prisma/generated/models.js.map +1 -0
- package/dist/adapters/prisma/history.d.ts +3 -0
- package/dist/adapters/prisma/history.js +289 -0
- package/dist/adapters/prisma/history.js.map +1 -0
- package/dist/adapters/prisma/identity.d.ts +10 -0
- package/dist/adapters/prisma/identity.js +213 -0
- package/dist/adapters/prisma/identity.js.map +1 -0
- package/dist/adapters/prisma/installation.d.ts +13 -0
- package/dist/adapters/prisma/installation.js +155 -0
- package/dist/adapters/prisma/installation.js.map +1 -0
- package/dist/adapters/prisma/messaging.d.ts +4 -0
- package/dist/adapters/prisma/messaging.js +156 -0
- package/dist/adapters/prisma/messaging.js.map +1 -0
- package/dist/adapters/prisma/migrate.d.ts +5 -0
- package/dist/adapters/prisma/migrate.js +40 -0
- package/dist/adapters/prisma/migrate.js.map +1 -0
- package/dist/adapters/prisma/receiver-wakeups.d.ts +26 -0
- package/dist/adapters/prisma/receiver-wakeups.js +79 -0
- package/dist/adapters/prisma/receiver-wakeups.js.map +1 -0
- package/dist/adapters/prisma/registry.d.ts +8 -0
- package/dist/adapters/prisma/registry.js +427 -0
- package/dist/adapters/prisma/registry.js.map +1 -0
- package/dist/adapters/prisma/rows.d.ts +58 -0
- package/dist/adapters/prisma/rows.js +408 -0
- package/dist/adapters/prisma/rows.js.map +1 -0
- package/dist/adapters/prisma/unit-of-work.d.ts +36 -0
- package/dist/adapters/prisma/unit-of-work.js +66 -0
- package/dist/adapters/prisma/unit-of-work.js.map +1 -0
- package/dist/adapters/rest/openapi.d.ts +12 -0
- package/dist/adapters/rest/openapi.js +62 -0
- package/dist/adapters/rest/openapi.js.map +1 -0
- package/dist/adapters/rest/rest-api.d.ts +8 -0
- package/dist/adapters/rest/rest-api.js +61 -0
- package/dist/adapters/rest/rest-api.js.map +1 -0
- package/dist/adapters/trpc/console.d.ts +150 -0
- package/dist/adapters/trpc/console.js +102 -0
- package/dist/adapters/trpc/console.js.map +1 -0
- package/dist/adapters/trpc/context.d.ts +201 -0
- package/dist/adapters/trpc/context.js +2 -0
- package/dist/adapters/trpc/context.js.map +1 -0
- package/dist/adapters/trpc/fleet.d.ts +637 -0
- package/dist/adapters/trpc/fleet.js +437 -0
- package/dist/adapters/trpc/fleet.js.map +1 -0
- package/dist/adapters/trpc/installation.d.ts +414 -0
- package/dist/adapters/trpc/installation.js +138 -0
- package/dist/adapters/trpc/installation.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +1263 -0
- package/dist/adapters/trpc/router.js +15 -0
- package/dist/adapters/trpc/router.js.map +1 -0
- package/dist/adapters/trpc/ship-contract.d.ts +107 -0
- package/dist/adapters/trpc/ship-contract.js +165 -0
- package/dist/adapters/trpc/ship-contract.js.map +1 -0
- package/dist/adapters/trpc/ship-protocol.d.ts +9 -0
- package/dist/adapters/trpc/ship-protocol.js +25 -0
- package/dist/adapters/trpc/ship-protocol.js.map +1 -0
- package/dist/adapters/trpc/ship.d.ts +209 -0
- package/dist/adapters/trpc/ship.js +214 -0
- package/dist/adapters/trpc/ship.js.map +1 -0
- package/dist/adapters/trpc/starting-prompt-text.d.ts +7 -0
- package/dist/adapters/trpc/starting-prompt-text.js +60 -0
- package/dist/adapters/trpc/starting-prompt-text.js.map +1 -0
- package/dist/adapters/trpc/system.d.ts +29 -0
- package/dist/adapters/trpc/system.js +15 -0
- package/dist/adapters/trpc/system.js.map +1 -0
- package/dist/adapters/trpc/trpc.d.ts +131 -0
- package/dist/adapters/trpc/trpc.js +350 -0
- package/dist/adapters/trpc/trpc.js.map +1 -0
- package/dist/app.d.ts +31 -0
- package/dist/app.js +80 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/aeolus-core.d.ts +2 -0
- package/dist/bin/aeolus-core.js +45 -0
- package/dist/bin/aeolus-core.js.map +1 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/identity/authenticate.d.ts +46 -0
- package/dist/domain/identity/authenticate.js +18 -0
- package/dist/domain/identity/authenticate.js.map +1 -0
- package/dist/domain/identity/console-session.d.ts +54 -0
- package/dist/domain/identity/console-session.js +29 -0
- package/dist/domain/identity/console-session.js.map +1 -0
- package/dist/domain/identity/credential.d.ts +76 -0
- package/dist/domain/identity/credential.js +63 -0
- package/dist/domain/identity/credential.js.map +1 -0
- package/dist/domain/identity/dismiss-notice.d.ts +19 -0
- package/dist/domain/identity/dismiss-notice.js +23 -0
- package/dist/domain/identity/dismiss-notice.js.map +1 -0
- package/dist/domain/identity/get-guide.d.ts +7 -0
- package/dist/domain/identity/get-guide.js +5 -0
- package/dist/domain/identity/get-guide.js.map +1 -0
- package/dist/domain/identity/get-notices.d.ts +7 -0
- package/dist/domain/identity/get-notices.js +5 -0
- package/dist/domain/identity/get-notices.js.map +1 -0
- package/dist/domain/identity/guide.d.ts +24 -0
- package/dist/domain/identity/guide.js +3 -0
- package/dist/domain/identity/guide.js.map +1 -0
- package/dist/domain/identity/issue-sign-in-ticket.d.ts +38 -0
- package/dist/domain/identity/issue-sign-in-ticket.js +39 -0
- package/dist/domain/identity/issue-sign-in-ticket.js.map +1 -0
- package/dist/domain/identity/notice.d.ts +16 -0
- package/dist/domain/identity/notice.js +12 -0
- package/dist/domain/identity/notice.js.map +1 -0
- package/dist/domain/identity/operator-account.d.ts +28 -0
- package/dist/domain/identity/operator-account.js +21 -0
- package/dist/domain/identity/operator-account.js.map +1 -0
- package/dist/domain/identity/ports.d.ts +193 -0
- package/dist/domain/identity/ports.js +2 -0
- package/dist/domain/identity/ports.js.map +1 -0
- package/dist/domain/identity/public.d.ts +3 -0
- package/dist/domain/identity/public.js +5 -0
- package/dist/domain/identity/public.js.map +1 -0
- package/dist/domain/identity/read-account.d.ts +35 -0
- package/dist/domain/identity/read-account.js +27 -0
- package/dist/domain/identity/read-account.js.map +1 -0
- package/dist/domain/identity/read-guide.d.ts +18 -0
- package/dist/domain/identity/read-guide.js +21 -0
- package/dist/domain/identity/read-guide.js.map +1 -0
- package/dist/domain/identity/read-notices.d.ts +13 -0
- package/dist/domain/identity/read-notices.js +17 -0
- package/dist/domain/identity/read-notices.js.map +1 -0
- package/dist/domain/identity/record-guide-progress.d.ts +19 -0
- package/dist/domain/identity/record-guide-progress.js +24 -0
- package/dist/domain/identity/record-guide-progress.js.map +1 -0
- package/dist/domain/identity/redeem-sign-in-ticket.d.ts +34 -0
- package/dist/domain/identity/redeem-sign-in-ticket.js +25 -0
- package/dist/domain/identity/redeem-sign-in-ticket.js.map +1 -0
- package/dist/domain/identity/reset-operator-password.d.ts +34 -0
- package/dist/domain/identity/reset-operator-password.js +55 -0
- package/dist/domain/identity/reset-operator-password.js.map +1 -0
- package/dist/domain/identity/set-guide.d.ts +13 -0
- package/dist/domain/identity/set-guide.js +12 -0
- package/dist/domain/identity/set-guide.js.map +1 -0
- package/dist/domain/identity/set-notices.d.ts +13 -0
- package/dist/domain/identity/set-notices.js +12 -0
- package/dist/domain/identity/set-notices.js.map +1 -0
- package/dist/domain/identity/set-theme.d.ts +21 -0
- package/dist/domain/identity/set-theme.js +19 -0
- package/dist/domain/identity/set-theme.js.map +1 -0
- package/dist/domain/identity/sign-in-ticket.d.ts +21 -0
- package/dist/domain/identity/sign-in-ticket.js +5 -0
- package/dist/domain/identity/sign-in-ticket.js.map +1 -0
- package/dist/domain/identity/sign-in.d.ts +51 -0
- package/dist/domain/identity/sign-in.js +43 -0
- package/dist/domain/identity/sign-in.js.map +1 -0
- package/dist/domain/identity/sign-out.d.ts +20 -0
- package/dist/domain/identity/sign-out.js +32 -0
- package/dist/domain/identity/sign-out.js.map +1 -0
- package/dist/domain/identity/start-console-session.d.ts +27 -0
- package/dist/domain/identity/start-console-session.js +54 -0
- package/dist/domain/identity/start-console-session.js.map +1 -0
- package/dist/domain/identity/start-viewer-session.d.ts +29 -0
- package/dist/domain/identity/start-viewer-session.js +42 -0
- package/dist/domain/identity/start-viewer-session.js.map +1 -0
- package/dist/domain/messaging/acknowledge-delivery.d.ts +30 -0
- package/dist/domain/messaging/acknowledge-delivery.js +31 -0
- package/dist/domain/messaging/acknowledge-delivery.js.map +1 -0
- package/dist/domain/messaging/answer-ping.d.ts +33 -0
- package/dist/domain/messaging/answer-ping.js +37 -0
- package/dist/domain/messaging/answer-ping.js.map +1 -0
- package/dist/domain/messaging/check-inbox.d.ts +33 -0
- package/dist/domain/messaging/check-inbox.js +61 -0
- package/dist/domain/messaging/check-inbox.js.map +1 -0
- package/dist/domain/messaging/content-type.d.ts +9 -0
- package/dist/domain/messaging/content-type.js +18 -0
- package/dist/domain/messaging/content-type.js.map +1 -0
- package/dist/domain/messaging/daily-message-limit.d.ts +19 -0
- package/dist/domain/messaging/daily-message-limit.js +24 -0
- package/dist/domain/messaging/daily-message-limit.js.map +1 -0
- package/dist/domain/messaging/delivery.d.ts +116 -0
- package/dist/domain/messaging/delivery.js +201 -0
- package/dist/domain/messaging/delivery.js.map +1 -0
- package/dist/domain/messaging/dismiss-delivery.d.ts +28 -0
- package/dist/domain/messaging/dismiss-delivery.js +29 -0
- package/dist/domain/messaging/dismiss-delivery.js.map +1 -0
- package/dist/domain/messaging/inbox-wait.d.ts +8 -0
- package/dist/domain/messaging/inbox-wait.js +19 -0
- package/dist/domain/messaging/inbox-wait.js.map +1 -0
- package/dist/domain/messaging/mark-done.d.ts +45 -0
- package/dist/domain/messaging/mark-done.js +49 -0
- package/dist/domain/messaging/mark-done.js.map +1 -0
- package/dist/domain/messaging/mark-read.d.ts +27 -0
- package/dist/domain/messaging/mark-read.js +34 -0
- package/dist/domain/messaging/mark-read.js.map +1 -0
- package/dist/domain/messaging/message.d.ts +104 -0
- package/dist/domain/messaging/message.js +84 -0
- package/dist/domain/messaging/message.js.map +1 -0
- package/dist/domain/messaging/payload.d.ts +9 -0
- package/dist/domain/messaging/payload.js +16 -0
- package/dist/domain/messaging/payload.js.map +1 -0
- package/dist/domain/messaging/ping-ship.d.ts +38 -0
- package/dist/domain/messaging/ping-ship.js +42 -0
- package/dist/domain/messaging/ping-ship.js.map +1 -0
- package/dist/domain/messaging/ports.d.ts +116 -0
- package/dist/domain/messaging/ports.js +2 -0
- package/dist/domain/messaging/ports.js.map +1 -0
- package/dist/domain/messaging/receive-deliveries.d.ts +68 -0
- package/dist/domain/messaging/receive-deliveries.js +119 -0
- package/dist/domain/messaging/receive-deliveries.js.map +1 -0
- package/dist/domain/messaging/receive-max.d.ts +8 -0
- package/dist/domain/messaging/receive-max.js +17 -0
- package/dist/domain/messaging/receive-max.js.map +1 -0
- package/dist/domain/messaging/reply-to-message.d.ts +35 -0
- package/dist/domain/messaging/reply-to-message.js +49 -0
- package/dist/domain/messaging/reply-to-message.js.map +1 -0
- package/dist/domain/messaging/resend-delivery.d.ts +48 -0
- package/dist/domain/messaging/resend-delivery.js +97 -0
- package/dist/domain/messaging/resend-delivery.js.map +1 -0
- package/dist/domain/messaging/send-message.d.ts +88 -0
- package/dist/domain/messaging/send-message.js +115 -0
- package/dist/domain/messaging/send-message.js.map +1 -0
- package/dist/domain/messaging/send-request.d.ts +16 -0
- package/dist/domain/messaging/send-request.js +18 -0
- package/dist/domain/messaging/send-request.js.map +1 -0
- package/dist/domain/registry/applied-limits.d.ts +15 -0
- package/dist/domain/registry/applied-limits.js +15 -0
- package/dist/domain/registry/applied-limits.js.map +1 -0
- package/dist/domain/registry/assign-crew.d.ts +31 -0
- package/dist/domain/registry/assign-crew.js +35 -0
- package/dist/domain/registry/assign-crew.js.map +1 -0
- package/dist/domain/registry/claim-ship.d.ts +49 -0
- package/dist/domain/registry/claim-ship.js +59 -0
- package/dist/domain/registry/claim-ship.js.map +1 -0
- package/dist/domain/registry/commission-ship.d.ts +54 -0
- package/dist/domain/registry/commission-ship.js +70 -0
- package/dist/domain/registry/commission-ship.js.map +1 -0
- package/dist/domain/registry/confirm-crew-release.d.ts +28 -0
- package/dist/domain/registry/confirm-crew-release.js +28 -0
- package/dist/domain/registry/confirm-crew-release.js.map +1 -0
- package/dist/domain/registry/create-fleet.d.ts +39 -0
- package/dist/domain/registry/create-fleet.js +56 -0
- package/dist/domain/registry/create-fleet.js.map +1 -0
- package/dist/domain/registry/crew-request.d.ts +148 -0
- package/dist/domain/registry/crew-request.js +175 -0
- package/dist/domain/registry/crew-request.js.map +1 -0
- package/dist/domain/registry/delete-fleet.d.ts +46 -0
- package/dist/domain/registry/delete-fleet.js +34 -0
- package/dist/domain/registry/delete-fleet.js.map +1 -0
- package/dist/domain/registry/deregister.d.ts +32 -0
- package/dist/domain/registry/deregister.js +38 -0
- package/dist/domain/registry/deregister.js.map +1 -0
- package/dist/domain/registry/explain-crew-request.d.ts +30 -0
- package/dist/domain/registry/explain-crew-request.js +31 -0
- package/dist/domain/registry/explain-crew-request.js.map +1 -0
- package/dist/domain/registry/fleet.d.ts +12 -0
- package/dist/domain/registry/fleet.js +12 -0
- package/dist/domain/registry/fleet.js.map +1 -0
- package/dist/domain/registry/found-fleet.d.ts +32 -0
- package/dist/domain/registry/found-fleet.js +43 -0
- package/dist/domain/registry/found-fleet.js.map +1 -0
- package/dist/domain/registry/get-fleet-limits.d.ts +17 -0
- package/dist/domain/registry/get-fleet-limits.js +14 -0
- package/dist/domain/registry/get-fleet-limits.js.map +1 -0
- package/dist/domain/registry/get-installation-fleet.d.ts +15 -0
- package/dist/domain/registry/get-installation-fleet.js +12 -0
- package/dist/domain/registry/get-installation-fleet.js.map +1 -0
- package/dist/domain/registry/get-installation-settings.d.ts +7 -0
- package/dist/domain/registry/get-installation-settings.js +5 -0
- package/dist/domain/registry/get-installation-settings.js.map +1 -0
- package/dist/domain/registry/get-ship.d.ts +34 -0
- package/dist/domain/registry/get-ship.js +36 -0
- package/dist/domain/registry/get-ship.js.map +1 -0
- package/dist/domain/registry/get-starting-prompt.d.ts +24 -0
- package/dist/domain/registry/get-starting-prompt.js +46 -0
- package/dist/domain/registry/get-starting-prompt.js.map +1 -0
- package/dist/domain/registry/initialise-fleet.d.ts +28 -0
- package/dist/domain/registry/initialise-fleet.js +39 -0
- package/dist/domain/registry/initialise-fleet.js.map +1 -0
- package/dist/domain/registry/installation-fleet.d.ts +36 -0
- package/dist/domain/registry/installation-fleet.js +22 -0
- package/dist/domain/registry/installation-fleet.js.map +1 -0
- package/dist/domain/registry/installation-request.d.ts +23 -0
- package/dist/domain/registry/installation-request.js +5 -0
- package/dist/domain/registry/installation-request.js.map +1 -0
- package/dist/domain/registry/lease.d.ts +51 -0
- package/dist/domain/registry/lease.js +39 -0
- package/dist/domain/registry/lease.js.map +1 -0
- package/dist/domain/registry/leases.d.ts +66 -0
- package/dist/domain/registry/leases.js +80 -0
- package/dist/domain/registry/leases.js.map +1 -0
- package/dist/domain/registry/limits.d.ts +50 -0
- package/dist/domain/registry/limits.js +24 -0
- package/dist/domain/registry/limits.js.map +1 -0
- package/dist/domain/registry/list-fleet.d.ts +70 -0
- package/dist/domain/registry/list-fleet.js +47 -0
- package/dist/domain/registry/list-fleet.js.map +1 -0
- package/dist/domain/registry/list-fleets.d.ts +11 -0
- package/dist/domain/registry/list-fleets.js +9 -0
- package/dist/domain/registry/list-fleets.js.map +1 -0
- package/dist/domain/registry/list-installation-fleets.d.ts +15 -0
- package/dist/domain/registry/list-installation-fleets.js +15 -0
- package/dist/domain/registry/list-installation-fleets.js.map +1 -0
- package/dist/domain/registry/ping-status.d.ts +17 -0
- package/dist/domain/registry/ping-status.js +28 -0
- package/dist/domain/registry/ping-status.js.map +1 -0
- package/dist/domain/registry/pingable-ship.d.ts +22 -0
- package/dist/domain/registry/pingable-ship.js +21 -0
- package/dist/domain/registry/pingable-ship.js.map +1 -0
- package/dist/domain/registry/ports.d.ts +318 -0
- package/dist/domain/registry/ports.js +2 -0
- package/dist/domain/registry/ports.js.map +1 -0
- package/dist/domain/registry/public.d.ts +8 -0
- package/dist/domain/registry/public.js +10 -0
- package/dist/domain/registry/public.js.map +1 -0
- package/dist/domain/registry/read-assigned-crew-requests.d.ts +14 -0
- package/dist/domain/registry/read-assigned-crew-requests.js +15 -0
- package/dist/domain/registry/read-assigned-crew-requests.js.map +1 -0
- package/dist/domain/registry/recrew-ship.d.ts +33 -0
- package/dist/domain/registry/recrew-ship.js +34 -0
- package/dist/domain/registry/recrew-ship.js.map +1 -0
- package/dist/domain/registry/release-ship.d.ts +38 -0
- package/dist/domain/registry/release-ship.js +47 -0
- package/dist/domain/registry/release-ship.js.map +1 -0
- package/dist/domain/registry/remove-crew-request.d.ts +28 -0
- package/dist/domain/registry/remove-crew-request.js +36 -0
- package/dist/domain/registry/remove-crew-request.js.map +1 -0
- package/dist/domain/registry/rename-ship.d.ts +30 -0
- package/dist/domain/registry/rename-ship.js +39 -0
- package/dist/domain/registry/rename-ship.js.map +1 -0
- package/dist/domain/registry/report-crew-status.d.ts +29 -0
- package/dist/domain/registry/report-crew-status.js +30 -0
- package/dist/domain/registry/report-crew-status.js.map +1 -0
- package/dist/domain/registry/report-details.d.ts +18 -0
- package/dist/domain/registry/report-details.js +41 -0
- package/dist/domain/registry/report-details.js.map +1 -0
- package/dist/domain/registry/report-log.d.ts +21 -0
- package/dist/domain/registry/report-log.js +16 -0
- package/dist/domain/registry/report-log.js.map +1 -0
- package/dist/domain/registry/report.d.ts +30 -0
- package/dist/domain/registry/report.js +30 -0
- package/dist/domain/registry/report.js.map +1 -0
- package/dist/domain/registry/request-crew.d.ts +32 -0
- package/dist/domain/registry/request-crew.js +29 -0
- package/dist/domain/registry/request-crew.js.map +1 -0
- package/dist/domain/registry/resolve-selector.d.ts +25 -0
- package/dist/domain/registry/resolve-selector.js +32 -0
- package/dist/domain/registry/resolve-selector.js.map +1 -0
- package/dist/domain/registry/retire-ship.d.ts +42 -0
- package/dist/domain/registry/retire-ship.js +68 -0
- package/dist/domain/registry/retire-ship.js.map +1 -0
- package/dist/domain/registry/set-fleet-limits.d.ts +30 -0
- package/dist/domain/registry/set-fleet-limits.js +54 -0
- package/dist/domain/registry/set-fleet-limits.js.map +1 -0
- package/dist/domain/registry/set-installation-settings.d.ts +18 -0
- package/dist/domain/registry/set-installation-settings.js +31 -0
- package/dist/domain/registry/set-installation-settings.js.map +1 -0
- package/dist/domain/registry/ship-handle.d.ts +5 -0
- package/dist/domain/registry/ship-handle.js +20 -0
- package/dist/domain/registry/ship-handle.js.map +1 -0
- package/dist/domain/registry/ship-note.d.ts +7 -0
- package/dist/domain/registry/ship-note.js +15 -0
- package/dist/domain/registry/ship-note.js.map +1 -0
- package/dist/domain/registry/ship-report.d.ts +42 -0
- package/dist/domain/registry/ship-report.js +93 -0
- package/dist/domain/registry/ship-report.js.map +1 -0
- package/dist/domain/registry/ship.d.ts +190 -0
- package/dist/domain/registry/ship.js +334 -0
- package/dist/domain/registry/ship.js.map +1 -0
- package/dist/domain/registry/ships.d.ts +25 -0
- package/dist/domain/registry/ships.js +22 -0
- package/dist/domain/registry/ships.js.map +1 -0
- package/dist/domain/registry/starting-prompt.d.ts +32 -0
- package/dist/domain/registry/starting-prompt.js +22 -0
- package/dist/domain/registry/starting-prompt.js.map +1 -0
- package/dist/domain/registry/whoami.d.ts +20 -0
- package/dist/domain/registry/whoami.js +15 -0
- package/dist/domain/registry/whoami.js.map +1 -0
- package/dist/domain/shared/caller.d.ts +25 -0
- package/dist/domain/shared/caller.js +8 -0
- package/dist/domain/shared/caller.js.map +1 -0
- package/dist/domain/shared/clock.d.ts +4 -0
- package/dist/domain/shared/clock.js +2 -0
- package/dist/domain/shared/clock.js.map +1 -0
- package/dist/domain/shared/errors.d.ts +13 -0
- package/dist/domain/shared/errors.js +6 -0
- package/dist/domain/shared/errors.js.map +1 -0
- package/dist/domain/shared/events.d.ts +75 -0
- package/dist/domain/shared/events.js +9 -0
- package/dist/domain/shared/events.js.map +1 -0
- package/dist/domain/shared/follow-fleet.d.ts +32 -0
- package/dist/domain/shared/follow-fleet.js +65 -0
- package/dist/domain/shared/follow-fleet.js.map +1 -0
- package/dist/domain/shared/history.d.ts +124 -0
- package/dist/domain/shared/history.js +16 -0
- package/dist/domain/shared/history.js.map +1 -0
- package/dist/domain/shared/idempotency-key.d.ts +8 -0
- package/dist/domain/shared/idempotency-key.js +14 -0
- package/dist/domain/shared/idempotency-key.js.map +1 -0
- package/dist/domain/shared/notifier.d.ts +17 -0
- package/dist/domain/shared/notifier.js +2 -0
- package/dist/domain/shared/notifier.js.map +1 -0
- package/dist/domain/shared/ping.d.ts +18 -0
- package/dist/domain/shared/ping.js +8 -0
- package/dist/domain/shared/ping.js.map +1 -0
- package/dist/domain/shared/read-fleet-events.d.ts +29 -0
- package/dist/domain/shared/read-fleet-events.js +25 -0
- package/dist/domain/shared/read-fleet-events.js.map +1 -0
- package/dist/domain/shared/read-fleet-limits.d.ts +39 -0
- package/dist/domain/shared/read-fleet-limits.js +24 -0
- package/dist/domain/shared/read-fleet-limits.js.map +1 -0
- package/dist/domain/shared/read-inbox.d.ts +20 -0
- package/dist/domain/shared/read-inbox.js +16 -0
- package/dist/domain/shared/read-inbox.js.map +1 -0
- package/dist/domain/shared/read-message.d.ts +21 -0
- package/dist/domain/shared/read-message.js +18 -0
- package/dist/domain/shared/read-message.js.map +1 -0
- package/dist/domain/shared/read-needs-attention.d.ts +12 -0
- package/dist/domain/shared/read-needs-attention.js +10 -0
- package/dist/domain/shared/read-needs-attention.js.map +1 -0
- package/dist/domain/shared/read-ship-messages.d.ts +28 -0
- package/dist/domain/shared/read-ship-messages.js +30 -0
- package/dist/domain/shared/read-ship-messages.js.map +1 -0
- package/dist/domain/shared/read-ship-timeline.d.ts +18 -0
- package/dist/domain/shared/read-ship-timeline.js +16 -0
- package/dist/domain/shared/read-ship-timeline.js.map +1 -0
- package/dist/domain/shared/result.d.ts +16 -0
- package/dist/domain/shared/result.js +7 -0
- package/dist/domain/shared/result.js.map +1 -0
- package/dist/domain/shared/secrets.d.ts +26 -0
- package/dist/domain/shared/secrets.js +2 -0
- package/dist/domain/shared/secrets.js.map +1 -0
- package/dist/domain/shared/selector.d.ts +29 -0
- package/dist/domain/shared/selector.js +2 -0
- package/dist/domain/shared/selector.js.map +1 -0
- package/dist/domain/shared/unit-of-work.d.ts +13 -0
- package/dist/domain/shared/unit-of-work.js +2 -0
- package/dist/domain/shared/unit-of-work.js.map +1 -0
- package/dist/domain/shared/utc-day.d.ts +4 -0
- package/dist/domain/shared/utc-day.js +9 -0
- package/dist/domain/shared/utc-day.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/start.d.ts +6 -0
- package/dist/start.js +29 -0
- package/dist/start.js.map +1 -0
- package/dist/wiring.d.ts +158 -0
- package/dist/wiring.js +185 -0
- package/dist/wiring.js.map +1 -0
- package/package.json +58 -3
- package/prisma.config.ts +18 -0
- package/src/adapters/prisma/migrations/20260929124818_init/migration.sql +201 -0
- package/src/adapters/prisma/migrations/20260929160000_fleet_argo_console_session/migration.sql +130 -0
- package/src/adapters/prisma/migrations/20260929220017_operator_login/migration.sql +27 -0
- package/src/adapters/prisma/migrations/20260930090000_crew_token/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20260930120000_send/migration.sql +30 -0
- package/src/adapters/prisma/migrations/20260930150000_receive/migration.sql +24 -0
- package/src/adapters/prisma/migrations/20261001010000_event_seq/migration.sql +34 -0
- package/src/adapters/prisma/migrations/20261001020000_console_session_end_reason/migration.sql +14 -0
- package/src/adapters/prisma/migrations/20261001030000_account_theme_session_device/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261001040000_lease_last_seen/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261002190000_lease_report/migration.sql +7 -0
- package/src/adapters/prisma/migrations/20261003140000_commission_key/migration.sql +7 -0
- package/src/adapters/prisma/migrations/20261003200000_message_model/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261003201000_lease_harness/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261004120000_operator_without_password/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261004121000_installation_requests/migration.sql +21 -0
- package/src/adapters/prisma/migrations/20261004122000_events_deleted_with_their_fleet/migration.sql +11 -0
- package/src/adapters/prisma/migrations/20261004130000_sign_in_tickets/migration.sql +16 -0
- package/src/adapters/prisma/migrations/20261004140000_fleet_limits/migration.sql +6 -0
- package/src/adapters/prisma/migrations/20261004141000_installation_settings/migration.sql +12 -0
- package/src/adapters/prisma/migrations/20261005090000_viewer_ship/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261005100000_viewer_sessions/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261005110000_notices/migration.sql +37 -0
- package/src/adapters/prisma/migrations/20261005120000_guide/migration.sql +34 -0
- package/src/adapters/prisma/migrations/20261006100000_fleet_crew_scope/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261006140000_lease_report_details/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261006160000_crew_requests/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261006180000_crew_scopes/migration.sql +9 -0
- package/src/adapters/prisma/migrations/20261006190000_crew_assignment/migration.sql +13 -0
- package/src/adapters/prisma/migrations/20261006200000_crew_request_reason/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261007020000_broad_crewing_scope_retired/migration.sql +8 -0
- package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
- package/src/adapters/prisma/schema.prisma +558 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { FLEET_SCOPES, SCOPES, } from '@aeolus-fleet/common';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { shipActor } from '../shared/events.js';
|
|
4
|
+
import { ok } from '../shared/result.js';
|
|
5
|
+
import { refuseEndedLease } from './lease.js';
|
|
6
|
+
import { shipName, shipType } from './ship-handle.js';
|
|
7
|
+
import { shipNote } from './ship-note.js';
|
|
8
|
+
/** The operator ship's name. Reserved: no other ship can take it. */
|
|
9
|
+
export const OPERATOR_SHIP_NAME = 'argo';
|
|
10
|
+
/** The operator ship's type label, the same word as its kind. */
|
|
11
|
+
export const OPERATOR_SHIP_TYPE = 'operator';
|
|
12
|
+
/** `argo`: the one ship of kind `operator`, holding every scope (ADR 0012). */
|
|
13
|
+
export function operatorShip(input) {
|
|
14
|
+
return {
|
|
15
|
+
...input,
|
|
16
|
+
name: OPERATOR_SHIP_NAME,
|
|
17
|
+
type: OPERATOR_SHIP_TYPE,
|
|
18
|
+
kind: 'operator',
|
|
19
|
+
scopes: [...SCOPES],
|
|
20
|
+
note: null,
|
|
21
|
+
retiredAt: null,
|
|
22
|
+
commission: null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** The viewer ship's name, reserved as argo's is (decision 0022). */
|
|
26
|
+
export const VIEWER_SHIP_NAME = 'viewer';
|
|
27
|
+
/** The viewer ship's type label, the same word as its kind. */
|
|
28
|
+
export const VIEWER_SHIP_TYPE = 'viewer';
|
|
29
|
+
/**
|
|
30
|
+
* The viewer ship: the fleet's read-only door into the console (decision
|
|
31
|
+
* 0022). It reads the fleet and nothing more, has no secret, and holds no
|
|
32
|
+
* lease: many people view through it at once, each with a console session.
|
|
33
|
+
*/
|
|
34
|
+
export function viewerShip(input) {
|
|
35
|
+
return {
|
|
36
|
+
...input,
|
|
37
|
+
name: VIEWER_SHIP_NAME,
|
|
38
|
+
type: VIEWER_SHIP_TYPE,
|
|
39
|
+
kind: 'viewer',
|
|
40
|
+
scopes: ['fleet:read'],
|
|
41
|
+
note: null,
|
|
42
|
+
retiredAt: null,
|
|
43
|
+
commission: null,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** The ships no session crews with a secret and no fleet action ends or renames, by kind, as their refusals name them. */
|
|
47
|
+
const PERMANENT_SHIPS = { operator: 'the operator ship', viewer: 'the viewer ship' };
|
|
48
|
+
/** The scopes every agent ship gets at creation: it sends and receives; commissioning may add fleet scopes (ADR 0002). */
|
|
49
|
+
export const AGENT_SCOPES = ['messages:send', 'messages:receive'];
|
|
50
|
+
/**
|
|
51
|
+
* A new agent ship, awaiting crew, and its ShipCommissioned event. The name is
|
|
52
|
+
* a handle, never `argo`, and unique among the fleet's active ships:
|
|
53
|
+
* `activeShipNamed` is the active ship that already holds it, if any, read
|
|
54
|
+
* while the name is locked.
|
|
55
|
+
*/
|
|
56
|
+
export function commissionAgentShip(input, fleet) {
|
|
57
|
+
const name = shipName(input.name);
|
|
58
|
+
if (!name.isOk) {
|
|
59
|
+
return name;
|
|
60
|
+
}
|
|
61
|
+
const notReserved = checkNameIsNotReserved(name.value);
|
|
62
|
+
if (!notReserved.isOk) {
|
|
63
|
+
return notReserved;
|
|
64
|
+
}
|
|
65
|
+
const type = shipType(input.type);
|
|
66
|
+
if (!type.isOk) {
|
|
67
|
+
return type;
|
|
68
|
+
}
|
|
69
|
+
const note = shipNote(input.note);
|
|
70
|
+
if (!note.isOk) {
|
|
71
|
+
return note;
|
|
72
|
+
}
|
|
73
|
+
if (fleet.activeShipNamed) {
|
|
74
|
+
return refuse('SHIP_NAME_TAKEN', `An active ship is already named ${name.value}`);
|
|
75
|
+
}
|
|
76
|
+
const { id, fleetId, at, actor } = input;
|
|
77
|
+
const ship = {
|
|
78
|
+
id,
|
|
79
|
+
fleetId,
|
|
80
|
+
name: name.value,
|
|
81
|
+
type: type.value,
|
|
82
|
+
kind: 'agent',
|
|
83
|
+
scopes: [...AGENT_SCOPES, ...FLEET_SCOPES.filter((scope) => input.fleetScopes?.includes(scope))],
|
|
84
|
+
note: note.value,
|
|
85
|
+
createdAt: at,
|
|
86
|
+
retiredAt: null,
|
|
87
|
+
commission: input.commission,
|
|
88
|
+
};
|
|
89
|
+
return ok({
|
|
90
|
+
ship,
|
|
91
|
+
events: [
|
|
92
|
+
{
|
|
93
|
+
fleetId,
|
|
94
|
+
type: 'ShipCommissioned',
|
|
95
|
+
occurredAt: at,
|
|
96
|
+
actor,
|
|
97
|
+
shipId: id,
|
|
98
|
+
details: { name: ship.name, type: ship.type, kind: ship.kind, scopes: ship.scopes.join(' ') },
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Awaiting crew, crewed or retired: derived from whether a session holds the
|
|
105
|
+
* ship's lease and whether the ship is retired, never set by hand.
|
|
106
|
+
*/
|
|
107
|
+
export function shipStatus(ship, lease) {
|
|
108
|
+
if (ship.retiredAt !== null) {
|
|
109
|
+
return 'retired';
|
|
110
|
+
}
|
|
111
|
+
// argo and the viewer ship are the console's own: argo's crew is the console, signed in or not
|
|
112
|
+
// (decision 0012), and the viewer ship is a door into it, always open (decision 0022).
|
|
113
|
+
return lease.isCrewed || ship.kind !== 'agent' ? 'crewed' : 'awaitingCrew';
|
|
114
|
+
}
|
|
115
|
+
const STATUS_WORDS = {
|
|
116
|
+
awaitingCrew: 'awaiting crew',
|
|
117
|
+
crewed: 'crewed',
|
|
118
|
+
retired: 'retired',
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* A starting prompt is issued only while the ship awaits crew. Never for `argo`:
|
|
122
|
+
* it has no secret, and only the operator's console sign-in crews it (ADR 0012).
|
|
123
|
+
*/
|
|
124
|
+
export function checkCanIssueStartingPrompt(ship, lease) {
|
|
125
|
+
if (ship.kind !== 'agent') {
|
|
126
|
+
return refuse('OPERATOR_SHIP_GETS_NO_STARTING_PROMPT', `${ship.name} has no secret: only the operator's console sign-in crews it, so it gets no starting prompt`);
|
|
127
|
+
}
|
|
128
|
+
const status = shipStatus(ship, lease);
|
|
129
|
+
return status === 'awaitingCrew'
|
|
130
|
+
? ok(undefined)
|
|
131
|
+
: refuse('SHIP_NOT_AWAITING_CREW', `${ship.name} is ${STATUS_WORDS[status]}: a starting prompt is issued only while a ship awaits crew`);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* A ping goes only to a crewed ship: a session must be there to answer it.
|
|
135
|
+
* Never to `argo`: the console is no session that answers with pong.
|
|
136
|
+
*/
|
|
137
|
+
export function checkCanBePinged(ship, lease) {
|
|
138
|
+
if (ship.kind === 'operator') {
|
|
139
|
+
return refuse('OPERATOR_SHIP_IS_NOT_PINGED', `${ship.name} is the console: only a ship a session crews is pinged`);
|
|
140
|
+
}
|
|
141
|
+
if (ship.kind === 'viewer') {
|
|
142
|
+
return refuse('OPERATOR_SHIP_IS_NOT_PINGED', `${ship.name} is the viewer ship: only a ship a session crews is pinged`);
|
|
143
|
+
}
|
|
144
|
+
switch (shipStatus(ship, lease)) {
|
|
145
|
+
case 'crewed':
|
|
146
|
+
return ok(undefined);
|
|
147
|
+
case 'retired':
|
|
148
|
+
return refuse('SHIP_ALREADY_RETIRED', `${ship.name} is retired: only a ship a session crews is pinged`);
|
|
149
|
+
case 'awaitingCrew':
|
|
150
|
+
return refuse('SHIP_NOT_CREWED', `${ship.name} is awaiting crew: no session would answer a ping`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* A session claims the ship with its secret (`register`): a new lease at the
|
|
155
|
+
* location the session reports, holding the hash of its crew token, and
|
|
156
|
+
* ShipClaimed, caused by the ship itself. Only while the ship awaits crew: a
|
|
157
|
+
* second claim fails while a lease is held, and the operator frees the ship
|
|
158
|
+
* with Release (ADR 0010); a retired ship is never claimed again. Never
|
|
159
|
+
* `argo`: it has no secret, and only the operator's console sign-in crews it
|
|
160
|
+
* (ADR 0012).
|
|
161
|
+
*/
|
|
162
|
+
export function claimShip(crew, claim) {
|
|
163
|
+
const { ship, heldLease } = crew;
|
|
164
|
+
if (ship.kind === 'operator') {
|
|
165
|
+
return refuse('OPERATOR_SHIP_HAS_NO_SECRET', `${ship.name} has no secret: only the operator's console sign-in crews it`);
|
|
166
|
+
}
|
|
167
|
+
if (ship.kind === 'viewer') {
|
|
168
|
+
return refuse('OPERATOR_SHIP_HAS_NO_SECRET', `${ship.name} has no secret: it is viewed through console sessions the installation hands out`);
|
|
169
|
+
}
|
|
170
|
+
const status = shipStatus(ship, { isCrewed: heldLease !== undefined });
|
|
171
|
+
if (status !== 'awaitingCrew') {
|
|
172
|
+
return refuse('SHIP_NOT_AWAITING_CREW', `${ship.name} is ${STATUS_WORDS[status]}: a session claims a ship only while it awaits crew`);
|
|
173
|
+
}
|
|
174
|
+
const { leaseId, location, crewTokenHash, at } = claim;
|
|
175
|
+
const lease = {
|
|
176
|
+
id: leaseId,
|
|
177
|
+
fleetId: ship.fleetId,
|
|
178
|
+
shipId: ship.id,
|
|
179
|
+
location,
|
|
180
|
+
harness: claim.harness,
|
|
181
|
+
crewTokenHash,
|
|
182
|
+
startedAt: at,
|
|
183
|
+
endedAt: null,
|
|
184
|
+
};
|
|
185
|
+
return ok({
|
|
186
|
+
lease,
|
|
187
|
+
events: [
|
|
188
|
+
{
|
|
189
|
+
fleetId: ship.fleetId,
|
|
190
|
+
type: 'ShipClaimed',
|
|
191
|
+
occurredAt: at,
|
|
192
|
+
actor: shipActor(ship.id),
|
|
193
|
+
shipId: ship.id,
|
|
194
|
+
details: { leaseId, location: location.kind, locationDescription: location.description, harness: claim.harness },
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* A message can be addressed to any ship of the fleet, `argo` included, as long
|
|
201
|
+
* as it is not retired: a retired ship's id can never be addressed again, so a
|
|
202
|
+
* message to it could never be delivered. Never the viewer ship, which
|
|
203
|
+
* receives nothing (decision 0022).
|
|
204
|
+
*/
|
|
205
|
+
export function addressShip(ship) {
|
|
206
|
+
if (ship.kind === 'viewer') {
|
|
207
|
+
return refuse('UNRESOLVABLE_SELECTOR', `${ship.name} is the viewer ship: it receives nothing, so nothing is sent to it`);
|
|
208
|
+
}
|
|
209
|
+
return ship.retiredAt === null
|
|
210
|
+
? ok({ kind: 'ship', shipId: ship.id })
|
|
211
|
+
: refuse('UNRESOLVABLE_SELECTOR', `${ship.name} is retired: a retired ship is never addressed again`);
|
|
212
|
+
}
|
|
213
|
+
/** The reserved names, each with the ship it is kept for. */
|
|
214
|
+
const RESERVED_NAMES = new Map([
|
|
215
|
+
[OPERATOR_SHIP_NAME, 'the operator ship'],
|
|
216
|
+
[VIEWER_SHIP_NAME, 'the viewer ship'],
|
|
217
|
+
]);
|
|
218
|
+
export function isReservedShipName(name) {
|
|
219
|
+
return RESERVED_NAMES.has(name);
|
|
220
|
+
}
|
|
221
|
+
/** Commissioning and renaming call this: no ship but the operator ship may be called `argo`. */
|
|
222
|
+
export function checkNameIsNotReserved(name) {
|
|
223
|
+
const keptFor = RESERVED_NAMES.get(name);
|
|
224
|
+
return keptFor === undefined ? ok(undefined) : refuse('SHIP_NAME_RESERVED', `The name ${name} is reserved for ${keptFor}`);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* The operator ends a ship for good (Retire): any ship but argo, crewed or
|
|
228
|
+
* not, unless it is retired already.
|
|
229
|
+
*/
|
|
230
|
+
export function checkCanRetire(ship) {
|
|
231
|
+
const permanent = checkNotOperatorShip(ship, 'retired');
|
|
232
|
+
if (!permanent.isOk) {
|
|
233
|
+
return permanent;
|
|
234
|
+
}
|
|
235
|
+
return ship.retiredAt === null
|
|
236
|
+
? ok(undefined)
|
|
237
|
+
: refuse('SHIP_ALREADY_RETIRED', `${ship.name} is retired already: a retired ship stays retired`);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* The operator frees a ship from the session crewing it (Release), and the
|
|
241
|
+
* ship awaits a new crew: `heldLease` is its open lease, if any, read while
|
|
242
|
+
* locked. Only a crewed ship is released, never argo (ADR 0012). A ship
|
|
243
|
+
* awaiting crew has no session to free: an unclaimed prompt is replaced with
|
|
244
|
+
* a new prompt instead. Returns the lease to end.
|
|
245
|
+
*/
|
|
246
|
+
export function checkCanRelease(ship, heldLease) {
|
|
247
|
+
const permanent = checkNotOperatorShip(ship, 'released');
|
|
248
|
+
if (!permanent.isOk) {
|
|
249
|
+
return permanent;
|
|
250
|
+
}
|
|
251
|
+
const status = shipStatus(ship, { isCrewed: heldLease !== undefined });
|
|
252
|
+
if (heldLease === undefined || status !== 'crewed') {
|
|
253
|
+
const instead = status === 'awaitingCrew' ? '. A new starting prompt replaces an unclaimed one' : '';
|
|
254
|
+
return refuse('SHIP_NOT_CREWED', `${ship.name} is ${STATUS_WORDS[status]}: only a crewed ship is released${instead}`);
|
|
255
|
+
}
|
|
256
|
+
return ok(heldLease);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* The session crewing a ship ends its own lease (`deregister`), and the ship
|
|
260
|
+
* awaits a new crew: `heldLease` is the ship's open lease, if any, read while
|
|
261
|
+
* locked. Only while it is the crew's own lease: once that lease has ended,
|
|
262
|
+
* released or deregistered, the crew has nothing left to end, and a new
|
|
263
|
+
* crew's lease is never its to end. Never argo, which is never released
|
|
264
|
+
* (ADR 0012). Returns the lease to end.
|
|
265
|
+
*/
|
|
266
|
+
export function checkCanDeregister(ship, crew) {
|
|
267
|
+
const permanent = checkNotOperatorShip(ship, 'released');
|
|
268
|
+
if (!permanent.isOk) {
|
|
269
|
+
return permanent;
|
|
270
|
+
}
|
|
271
|
+
const { leaseId, heldLease } = crew;
|
|
272
|
+
return heldLease?.id === leaseId ? ok(heldLease) : refuseEndedLease();
|
|
273
|
+
}
|
|
274
|
+
export function checkCanRename(ship, newName) {
|
|
275
|
+
const permanent = checkNotOperatorShip(ship, 'renamed');
|
|
276
|
+
return permanent.isOk ? checkNameIsNotReserved(newName) : permanent;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* The operator gives a ship a new name (docs/blueprint.md, "Ship"): any ship
|
|
280
|
+
* but argo, crewed or not, never a retired one, which keeps the name it had.
|
|
281
|
+
* The name is a handle, never `argo`, and unique among the fleet's active
|
|
282
|
+
* ships: `activeShipNamed` is the active ship that holds it, if any, read
|
|
283
|
+
* while the name is locked. Messages store ids, so nothing sent is
|
|
284
|
+
* redirected; a sender addressing the old name no longer reaches it. The
|
|
285
|
+
* name it already has is OK, and nothing changes.
|
|
286
|
+
*/
|
|
287
|
+
export function renameShip(ship, rename) {
|
|
288
|
+
const name = shipName(rename.name);
|
|
289
|
+
if (!name.isOk) {
|
|
290
|
+
return name;
|
|
291
|
+
}
|
|
292
|
+
const allowed = checkCanRename(ship, name.value);
|
|
293
|
+
if (!allowed.isOk) {
|
|
294
|
+
return allowed;
|
|
295
|
+
}
|
|
296
|
+
if (ship.retiredAt !== null) {
|
|
297
|
+
return refuse('SHIP_ALREADY_RETIRED', `${ship.name} is retired: a retired ship keeps the name it had`);
|
|
298
|
+
}
|
|
299
|
+
if (name.value === ship.name) {
|
|
300
|
+
return ok({ ship, events: [] });
|
|
301
|
+
}
|
|
302
|
+
if (rename.activeShipNamed && rename.activeShipNamed.id !== ship.id) {
|
|
303
|
+
return refuse('SHIP_NAME_TAKEN', `An active ship is already named ${name.value}`);
|
|
304
|
+
}
|
|
305
|
+
return ok({
|
|
306
|
+
ship: { ...ship, name: name.value },
|
|
307
|
+
events: [
|
|
308
|
+
{
|
|
309
|
+
fleetId: ship.fleetId,
|
|
310
|
+
type: 'ShipRenamed',
|
|
311
|
+
occurredAt: rename.at,
|
|
312
|
+
actor: rename.actor,
|
|
313
|
+
shipId: ship.id,
|
|
314
|
+
details: { from: ship.name, to: name.value },
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
/** A crew request asks that a ship be kept crewed: any ship a session can crew, never argo, the viewer ship or a retired ship. */
|
|
320
|
+
export function checkCanBeRequestedCrew(ship) {
|
|
321
|
+
const permanent = checkNotOperatorShip(ship, 'crewed by request');
|
|
322
|
+
if (!permanent.isOk) {
|
|
323
|
+
return permanent;
|
|
324
|
+
}
|
|
325
|
+
return ship.retiredAt === null
|
|
326
|
+
? ok(undefined)
|
|
327
|
+
: refuse('SHIP_ALREADY_RETIRED', `${ship.name} is retired: no session crews it again`);
|
|
328
|
+
}
|
|
329
|
+
/** argo and the viewer ship are permanent: no fleet action retires, releases or renames them (ADR 0012, decision 0022). */
|
|
330
|
+
function checkNotOperatorShip(ship, action) {
|
|
331
|
+
const permanent = PERMANENT_SHIPS[ship.kind];
|
|
332
|
+
return permanent === undefined ? ok(undefined) : refuse('OPERATOR_SHIP_IS_PERMANENT', `${ship.name} is ${permanent} and can never be ${action}`);
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=ship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship.js","sourceRoot":"","sources":["../../../src/domain/registry/ship.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { ShipRepository } from './ports.js';
|
|
5
|
+
import type { Ship } from './ship.js';
|
|
6
|
+
export interface ShipTx {
|
|
7
|
+
ships: ShipRepository;
|
|
8
|
+
}
|
|
9
|
+
/** The fleet's operator ship, `argo`. Refuses when the fleet does not exist. */
|
|
10
|
+
export declare function findOperatorShip(tx: ShipTx, fleetId: FleetId): Promise<Result<Ship, DomainError<'FLEET_NOT_FOUND'>>>;
|
|
11
|
+
/** The fleet's viewer ship (decision 0022). Refuses when the fleet has none. */
|
|
12
|
+
export declare function findViewerShip(tx: ShipTx, fleetId: FleetId): Promise<Result<Ship, DomainError<'FLEET_HAS_NO_VIEWER'>>>;
|
|
13
|
+
/** The ports finding a ship reads, inside the caller's unit of work. */
|
|
14
|
+
export interface FindShipTx {
|
|
15
|
+
ships: Pick<ShipRepository, 'find'>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A ship of the fleet as it is now, retired or not: its current name and
|
|
19
|
+
* type. Messaging's question when it hands a crew a delivery, so the crew can
|
|
20
|
+
* answer the sender by name. Read without a lock.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findShip(tx: FindShipTx, input: {
|
|
23
|
+
fleetId: FleetId;
|
|
24
|
+
shipId: ShipId;
|
|
25
|
+
}): Promise<Result<Ship, DomainError<'SHIP_NOT_FOUND'>>>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
/** The fleet's operator ship, `argo`. Refuses when the fleet does not exist. */
|
|
4
|
+
export async function findOperatorShip(tx, fleetId) {
|
|
5
|
+
const ship = await tx.ships.findOperatorShip(fleetId);
|
|
6
|
+
return ship ? ok(ship) : refuse('FLEET_NOT_FOUND', `Fleet ${fleetId} does not exist`);
|
|
7
|
+
}
|
|
8
|
+
/** The fleet's viewer ship (decision 0022). Refuses when the fleet has none. */
|
|
9
|
+
export async function findViewerShip(tx, fleetId) {
|
|
10
|
+
const ship = await tx.ships.findViewerShip(fleetId);
|
|
11
|
+
return ship ? ok(ship) : refuse('FLEET_HAS_NO_VIEWER', `Fleet ${fleetId} has no viewer ship: create it with one to hand out viewer tickets`);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A ship of the fleet as it is now, retired or not: its current name and
|
|
15
|
+
* type. Messaging's question when it hands a crew a delivery, so the crew can
|
|
16
|
+
* answer the sender by name. Read without a lock.
|
|
17
|
+
*/
|
|
18
|
+
export async function findShip(tx, input) {
|
|
19
|
+
const ship = await tx.ships.find(input.fleetId, input.shipId);
|
|
20
|
+
return ship ? ok(ship) : refuse('SHIP_NOT_FOUND', `Ship ${input.shipId} does not exist`);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ships.js","sourceRoot":"","sources":["../../../src/domain/registry/ships.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAQtD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAU,EACV,OAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,OAAO,iBAAiB,CAAC,CAAC;AACxF,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,OAAgB;IAC/D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,OAAO,oEAAoE,CAAC,CAAC;AAC/I,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,EAAc,EACd,KAA2C;IAE3C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,KAAK,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type CredentialTx, type SecretTools } from '../identity/public.js';
|
|
3
|
+
import { type Actor, type EventLog } from '../shared/events.js';
|
|
4
|
+
/**
|
|
5
|
+
* A starting prompt as a use case hands it out: the ship and its new secret,
|
|
6
|
+
* in plain text only here and once. How it reads (the prompt text, one crew
|
|
7
|
+
* line per harness) is presentation, done by the adapters
|
|
8
|
+
* (adapters/trpc/starting-prompt-text.ts); core never formats it.
|
|
9
|
+
*/
|
|
10
|
+
export interface IssuedStartingPrompt {
|
|
11
|
+
shipId: ShipId;
|
|
12
|
+
secret: string;
|
|
13
|
+
}
|
|
14
|
+
export interface StartingPromptTx extends CredentialTx {
|
|
15
|
+
events: EventLog;
|
|
16
|
+
}
|
|
17
|
+
/** What issuing a starting prompt works with: the caller's unit of work and the secret tools. */
|
|
18
|
+
export interface StartingPromptDeps {
|
|
19
|
+
tx: StartingPromptTx;
|
|
20
|
+
secrets: SecretTools;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Issues a new secret for the ship and writes StartingPromptIssued. The caller
|
|
24
|
+
* invalidates any earlier secret first. Returns the secret: the one moment it
|
|
25
|
+
* exists in plain text.
|
|
26
|
+
*/
|
|
27
|
+
export declare function issueStartingPrompt(deps: StartingPromptDeps, input: {
|
|
28
|
+
fleetId: FleetId;
|
|
29
|
+
shipId: ShipId;
|
|
30
|
+
actor: Actor;
|
|
31
|
+
at: Date;
|
|
32
|
+
}): Promise<IssuedStartingPrompt>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { issueShipSecret } from '../identity/public.js';
|
|
2
|
+
import { recordEvent } from '../shared/events.js';
|
|
3
|
+
/**
|
|
4
|
+
* Issues a new secret for the ship and writes StartingPromptIssued. The caller
|
|
5
|
+
* invalidates any earlier secret first. Returns the secret: the one moment it
|
|
6
|
+
* exists in plain text.
|
|
7
|
+
*/
|
|
8
|
+
export async function issueStartingPrompt(deps, input) {
|
|
9
|
+
const { tx, secrets } = deps;
|
|
10
|
+
const { fleetId, shipId, actor, at } = input;
|
|
11
|
+
const { secret, credentialId } = await issueShipSecret({ tx, ...secrets }, { fleetId, shipId, at });
|
|
12
|
+
await recordEvent({ events: tx.events, ids: secrets.ids }, {
|
|
13
|
+
fleetId,
|
|
14
|
+
type: 'StartingPromptIssued',
|
|
15
|
+
occurredAt: at,
|
|
16
|
+
actor,
|
|
17
|
+
shipId,
|
|
18
|
+
details: { credentialId },
|
|
19
|
+
});
|
|
20
|
+
return { shipId, secret };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=starting-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starting-prompt.js","sourceRoot":"","sources":["../../../src/domain/registry/starting-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAuC,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAA6B,MAAM,qBAAqB,CAAC;AAuB7E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAwB,EACxB,KAAmE;IAEnE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAE7C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpG,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;QACzD,OAAO;QACP,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,EAAE;QACd,KAAK;QACL,MAAM;QACN,OAAO,EAAE,EAAE,YAAY,EAAE;KAC1B,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Caller } from '../shared/caller.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { ShipRepository } from './ports.js';
|
|
6
|
+
/** The caller's ship, as `whoami` tells it. */
|
|
7
|
+
export interface ShipIdentity {
|
|
8
|
+
shipId: ShipId;
|
|
9
|
+
fleetId: FleetId;
|
|
10
|
+
name: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}
|
|
13
|
+
export type Whoami = (caller: Caller) => Promise<Result<ShipIdentity, DomainError<'SHIP_NOT_FOUND'>>>;
|
|
14
|
+
/**
|
|
15
|
+
* Use case: tells the caller which ship it crews: id, fleet, name and type.
|
|
16
|
+
* Any caller may ask, whatever its scopes: it learns only about itself.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createWhoami(deps: {
|
|
19
|
+
ships: Pick<ShipRepository, 'find'>;
|
|
20
|
+
}): Whoami;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
/**
|
|
4
|
+
* Use case: tells the caller which ship it crews: id, fleet, name and type.
|
|
5
|
+
* Any caller may ask, whatever its scopes: it learns only about itself.
|
|
6
|
+
*/
|
|
7
|
+
export function createWhoami(deps) {
|
|
8
|
+
return async (caller) => {
|
|
9
|
+
const ship = await deps.ships.find(caller.fleetId, caller.shipId);
|
|
10
|
+
return ship
|
|
11
|
+
? ok({ shipId: ship.id, fleetId: ship.fleetId, name: ship.name, type: ship.type })
|
|
12
|
+
: refuse('SHIP_NOT_FOUND', `Ship ${caller.shipId} does not exist`);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/domain/registry/whoami.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAatD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6C;IACxE,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI;YACT,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAClF,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ConsoleSessionId, FleetId, LeaseId, Scope, ShipId, ShipKind } from '@aeolus-fleet/common';
|
|
2
|
+
/**
|
|
3
|
+
* Who is calling. Every caller is a ship (ADR 0012), resolved from its crew
|
|
4
|
+
* token or from a console session. Kind and scopes come from the server, never
|
|
5
|
+
* from the request.
|
|
6
|
+
*/
|
|
7
|
+
export interface Caller {
|
|
8
|
+
shipId: ShipId;
|
|
9
|
+
fleetId: FleetId;
|
|
10
|
+
kind: ShipKind;
|
|
11
|
+
scopes: readonly Scope[];
|
|
12
|
+
/** Set when the caller signed in through the console rather than calling with a crew token. */
|
|
13
|
+
consoleSessionId?: ConsoleSessionId;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A caller that came with the crew token `register` gave it: one session
|
|
17
|
+
* crewing one ship under one lease (ADR 0015). A receive claims deliveries
|
|
18
|
+
* for that lease, so they are the crew's, not merely the ship's.
|
|
19
|
+
*/
|
|
20
|
+
export interface Crew extends Caller {
|
|
21
|
+
leaseId: LeaseId;
|
|
22
|
+
}
|
|
23
|
+
export declare function hasScope(caller: Caller, scope: Scope): boolean;
|
|
24
|
+
/** Whether the caller crews its ship under a lease: a crew token's crew, or argo's console session. */
|
|
25
|
+
export declare function isCrew(caller: Caller): caller is Crew;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export function hasScope(caller, scope) {
|
|
2
|
+
return caller.scopes.includes(scope);
|
|
3
|
+
}
|
|
4
|
+
/** Whether the caller crews its ship under a lease: a crew token's crew, or argo's console session. */
|
|
5
|
+
export function isCrew(caller) {
|
|
6
|
+
return 'leaseId' in caller;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=caller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../src/domain/shared/caller.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAY;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,SAAS,IAAI,MAAM,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../../../src/domain/shared/clock.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Err } from './result.js';
|
|
2
|
+
/** Every reason the domain refuses a request. */
|
|
3
|
+
export type DomainErrorKind = 'ASSIGNEE_NOT_ACTIVE' | 'CREW_REQUEST_ALREADY_ASSIGNED' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER' | 'CREW_REQUEST_NOT_FOUND' | 'CREW_REQUEST_NOT_RELEASING' | 'CREW_REQUEST_RELEASING' | 'CREW_REQUEST_SETTINGS_TOO_LARGE' | 'DELIVERY_HELD_BY_ANOTHER_SHIP' | 'DELIVERY_NOT_FOUND' | 'DELIVERY_NOT_A_PING' | 'DELIVERY_NOT_IN_FLIGHT' | 'DELIVERY_NOT_OPEN' | 'DELIVERY_NOT_UNDELIVERABLE' | 'FLEET_ALREADY_EXISTS' | 'FLEET_LIMIT_REACHED' | 'FLEET_NOT_FOUND' | 'FLEET_HAS_NO_VIEWER' | 'NOTICE_NOT_FOUND' | 'NOTICE_NOT_DISMISSIBLE' | 'GUIDE_NOT_FOUND' | 'GUIDE_STEP_NOT_FOUND' | 'IDEMPOTENCY_KEY_REUSED' | 'IN_REPLY_TO_NOT_FOUND' | 'MESSAGE_LIMIT_REACHED' | 'MODEL_REQUIRED' | 'INVALID_HARNESS' | 'MODEL_FROM_ARGO' | 'INVALID_CONTENT_TYPE' | 'INVALID_EMAIL' | 'INVALID_FLEET_NAME' | 'INVALID_FOLLOW_MAX' | 'INVALID_FOLLOW_WAIT' | 'INVALID_IDEMPOTENCY_KEY' | 'INVALID_INBOX_WAIT' | 'INVALID_LIMIT' | 'INVALID_LOCATION' | 'INVALID_PASSWORD' | 'INVALID_RECEIVE_MAX' | 'INVALID_CREW_REQUEST_REASON' | 'INVALID_REPORT_DETAILS' | 'INVALID_REPORT_NOTE' | 'INVALID_REPORT_STATE' | 'INVALID_SHIP_NAME' | 'INVALID_SHIP_NOTE' | 'INVALID_SHIP_TYPE' | 'LEASE_ENDED' | 'MESSAGE_NOT_FOUND' | 'NOT_THE_OPERATOR_SHIP' | 'OPERATOR_EMAIL_TAKEN' | 'OPERATOR_HAS_NO_PASSWORD' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'OPERATOR_SHIP_HAS_NO_SECRET' | 'OPERATOR_SHIP_IS_NOT_PINGED' | 'OPERATOR_SHIP_IS_PERMANENT' | 'PAYLOAD_TOO_LARGE' | 'PING_NOT_RESENT' | 'REPORT_DETAILS_TOO_LARGE' | 'RESERVED_CONTENT_TYPE' | 'SHIP_ALREADY_RETIRED' | 'SHIP_NAME_RESERVED' | 'SHIP_NAME_TAKEN' | 'SHIP_NOT_AWAITING_CREW' | 'SHIP_NOT_CREWED' | 'SHIP_LIMIT_REACHED' | 'SHIP_NOT_FOUND' | 'SIGN_IN_TICKET_INVALID' | 'UNKNOWN_CREW_TOKEN' | 'UNRESOLVABLE_SELECTOR' | 'WRONG_EMAIL_OR_PASSWORD' | 'WRONG_SHIP_ID_OR_SECRET';
|
|
4
|
+
/**
|
|
5
|
+
* Why the domain refused a request. Adapters map the kind to their own error
|
|
6
|
+
* shape (a tRPC code, an exit code); the message is safe to show a caller.
|
|
7
|
+
*/
|
|
8
|
+
export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
|
|
9
|
+
readonly kind: K;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
}
|
|
12
|
+
/** A refusal: the error result of the given kind. */
|
|
13
|
+
export declare function refuse<K extends DomainErrorKind>(kind: K, message: string): Err<DomainError<K>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/domain/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAoF5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
|