@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,43 @@
|
|
|
1
|
+
import { recordEvent, SYSTEM } from '../shared/events.js';
|
|
2
|
+
import { operatorShip, viewerShip } from './ship.js';
|
|
3
|
+
/**
|
|
4
|
+
* Writes a new fleet, its operator ship `argo` and the operator account, with
|
|
5
|
+
* FleetInitialised and ShipCommissioned, in the caller's unit of work. argo
|
|
6
|
+
* gets no secret: the operator's sign-in is the only way to crew it (ADR
|
|
7
|
+
* 0012). With `hasViewer`, the viewer ship comes too, with its own
|
|
8
|
+
* ShipCommissioned (decision 0022). The caller has validated the name and email.
|
|
9
|
+
*/
|
|
10
|
+
export async function foundFleet(deps, input) {
|
|
11
|
+
const { tx, ids } = deps;
|
|
12
|
+
const { name, email, passwordHash, at } = input;
|
|
13
|
+
const fleetId = ids('fleet');
|
|
14
|
+
await tx.fleets.create({ id: fleetId, name, createdAt: at });
|
|
15
|
+
const argo = operatorShip({ id: ids('ship'), fleetId, createdAt: at });
|
|
16
|
+
await tx.ships.create(argo);
|
|
17
|
+
const operatorId = ids('operator');
|
|
18
|
+
await tx.operatorAccounts.create({ id: operatorId, fleetId, email, passwordHash, theme: 'system', createdAt: at });
|
|
19
|
+
await recordEvent({ events: tx.events, ids }, { fleetId, type: 'FleetInitialised', occurredAt: at, actor: SYSTEM, details: { name, operatorId } });
|
|
20
|
+
await recordEvent({ events: tx.events, ids }, {
|
|
21
|
+
fleetId,
|
|
22
|
+
type: 'ShipCommissioned',
|
|
23
|
+
occurredAt: at,
|
|
24
|
+
actor: SYSTEM,
|
|
25
|
+
shipId: argo.id,
|
|
26
|
+
details: { name: argo.name, type: argo.type, kind: argo.kind },
|
|
27
|
+
});
|
|
28
|
+
if (input.hasViewer !== true) {
|
|
29
|
+
return { fleetId, operatorShipId: argo.id, operatorId };
|
|
30
|
+
}
|
|
31
|
+
const viewer = viewerShip({ id: ids('ship'), fleetId, createdAt: at });
|
|
32
|
+
await tx.ships.create(viewer);
|
|
33
|
+
await recordEvent({ events: tx.events, ids }, {
|
|
34
|
+
fleetId,
|
|
35
|
+
type: 'ShipCommissioned',
|
|
36
|
+
occurredAt: at,
|
|
37
|
+
actor: SYSTEM,
|
|
38
|
+
shipId: viewer.id,
|
|
39
|
+
details: { name: viewer.name, type: viewer.type, kind: viewer.kind, scopes: viewer.scopes.join(' ') },
|
|
40
|
+
});
|
|
41
|
+
return { fleetId, operatorShipId: argo.id, operatorId };
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=found-fleet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"found-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/found-fleet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAiB,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAerD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAA4C,EAC5C,KAAkG;IAElG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAEhD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7D,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnH,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACnJ,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,OAAO;QACP,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAC/D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,OAAO;QACP,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;KACtG,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
5
|
+
import { type FleetLimits } from './limits.js';
|
|
6
|
+
import type { FleetRepository, InstallationSettingsRepository } from './ports.js';
|
|
7
|
+
export interface GetFleetLimitsTx {
|
|
8
|
+
fleets: FleetRepository;
|
|
9
|
+
installationSettings: InstallationSettingsRepository;
|
|
10
|
+
}
|
|
11
|
+
export type GetFleetLimits = (input: {
|
|
12
|
+
fleetId: FleetId;
|
|
13
|
+
}) => Promise<Result<FleetLimits, DomainError<'FLEET_NOT_FOUND'>>>;
|
|
14
|
+
/** Use case: a fleet's ship and daily message limits, how each is set and the limit that applies. */
|
|
15
|
+
export declare function createGetFleetLimits(deps: {
|
|
16
|
+
uow: UnitOfWork<GetFleetLimitsTx>;
|
|
17
|
+
}): GetFleetLimits;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { fleetLimitsOf } from './limits.js';
|
|
4
|
+
/** Use case: a fleet's ship and daily message limits, how each is set and the limit that applies. */
|
|
5
|
+
export function createGetFleetLimits(deps) {
|
|
6
|
+
return ({ fleetId }) => deps.uow.run(async (tx) => {
|
|
7
|
+
const settings = await tx.fleets.limitSettings(fleetId);
|
|
8
|
+
if (!settings) {
|
|
9
|
+
return refuse('FLEET_NOT_FOUND', `The installation hosts no fleet ${fleetId}`);
|
|
10
|
+
}
|
|
11
|
+
return ok(fleetLimitsOf({ fleetId, settings, installation: await tx.installationSettings.read() }));
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=get-fleet-limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-fleet-limits.js","sourceRoot":"","sources":["../../../src/domain/registry/get-fleet-limits.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAoB,MAAM,aAAa,CAAC;AAU9D,qGAAqG;AACrG,MAAM,UAAU,oBAAoB,CAAC,IAA2C;IAC9E,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAgE,EAAE;QACtF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import { type InstallationFleet } from './installation-fleet.js';
|
|
6
|
+
import type { InstallationFleets, InstallationSettingsRepository } from './ports.js';
|
|
7
|
+
export type GetInstallationFleet = (input: {
|
|
8
|
+
fleetId: FleetId;
|
|
9
|
+
}) => Promise<Result<InstallationFleet, DomainError<'FLEET_NOT_FOUND'>>>;
|
|
10
|
+
/** Use case: one fleet of the installation, described as the list describes it. */
|
|
11
|
+
export declare function createGetInstallationFleet(deps: {
|
|
12
|
+
fleets: InstallationFleets;
|
|
13
|
+
settings: InstallationSettingsRepository;
|
|
14
|
+
clock: Clock;
|
|
15
|
+
}): GetInstallationFleet;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { installationFleet, messageWindow } from './installation-fleet.js';
|
|
4
|
+
/** Use case: one fleet of the installation, described as the list describes it. */
|
|
5
|
+
export function createGetInstallationFleet(deps) {
|
|
6
|
+
return async ({ fleetId }) => {
|
|
7
|
+
const now = deps.clock.now();
|
|
8
|
+
const facts = await deps.fleets.find(fleetId, messageWindow(now));
|
|
9
|
+
return facts ? ok(installationFleet(facts, { now, installation: await deps.settings.read() })) : refuse('FLEET_NOT_FOUND', `The installation hosts no fleet ${fleetId}`);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=get-installation-fleet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-installation-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/get-installation-fleet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAA0B,MAAM,yBAAyB,CAAC;AAKnG,mFAAmF;AACnF,MAAM,UAAU,0BAA0B,CAAC,IAA4F;IACrI,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAC;IAC3K,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InstallationSettings } from './limits.js';
|
|
2
|
+
import type { InstallationSettingsRepository } from './ports.js';
|
|
3
|
+
export type GetInstallationSettings = () => Promise<InstallationSettings>;
|
|
4
|
+
/** Use case: the installation's default limits for its fleets and its cap on fleets; no limit for any it has not set. */
|
|
5
|
+
export declare function createGetInstallationSettings(deps: {
|
|
6
|
+
settings: InstallationSettingsRepository;
|
|
7
|
+
}): GetInstallationSettings;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Use case: the installation's default limits for its fleets and its cap on fleets; no limit for any it has not set. */
|
|
2
|
+
export function createGetInstallationSettings(deps) {
|
|
3
|
+
return () => deps.settings.read();
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=get-installation-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-installation-settings.js","sourceRoot":"","sources":["../../../src/domain/registry/get-installation-settings.ts"],"names":[],"mappings":"AAKA,yHAAyH;AACzH,MAAM,UAAU,6BAA6B,CAAC,IAAkD;IAC9F,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { 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 ListedShip } from './list-fleet.js';
|
|
6
|
+
import { type CrewRequest } from './crew-request.js';
|
|
7
|
+
import type { FleetListing } from './ports.js';
|
|
8
|
+
import type { ShipReport } from './ship-report.js';
|
|
9
|
+
/** One ship for its page: as the fleet lists it, with its crew's report whole, when it was commissioned and since when it is crewed. */
|
|
10
|
+
export interface ShipDetail extends Omit<ListedShip, 'report' | 'crewRequest'> {
|
|
11
|
+
/** The ship's crew request, settings included; null when it holds none. */
|
|
12
|
+
crewRequest: (NonNullable<ListedShip['crewRequest']> & Pick<CrewRequest, 'settings'>) | null;
|
|
13
|
+
/** The crew's last report, details included; null until it reports, and while no session crews the ship. */
|
|
14
|
+
report: ShipReport | null;
|
|
15
|
+
commissionedAt: Date;
|
|
16
|
+
/** Since when the session crewing it has held it; null while no session does. */
|
|
17
|
+
crewedSince: Date | null;
|
|
18
|
+
/** What its crew holds in flight: what a release or a re-crew returns to pending. */
|
|
19
|
+
inFlightDeliveries: number;
|
|
20
|
+
/** Its direct deliveries pending or in flight: what a retire abandons. */
|
|
21
|
+
openDeliveries: number;
|
|
22
|
+
}
|
|
23
|
+
export type GetShip = (caller: Caller, input: {
|
|
24
|
+
shipId: ShipId;
|
|
25
|
+
}) => Promise<Result<ShipDetail, DomainError<'SHIP_NOT_FOUND' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER'>>>;
|
|
26
|
+
/**
|
|
27
|
+
* Use case: one ship of the caller's fleet, retired ships included: they keep
|
|
28
|
+
* their page. The caller's scope (fleet:read or crew:run) is
|
|
29
|
+
* checked before this runs; crew:run reads only the ships whose crew requests
|
|
30
|
+
* are assigned to the caller's ship.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createGetShip(deps: {
|
|
33
|
+
listing: FleetListing;
|
|
34
|
+
}): GetShip;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { listedShipOf } from './list-fleet.js';
|
|
4
|
+
import { checkReaches } from './crew-request.js';
|
|
5
|
+
/** The scopes that read every ship; crew:run reads only the ships assigned to the caller's ship. */
|
|
6
|
+
const READ_SCOPES = ['fleet:read'];
|
|
7
|
+
/**
|
|
8
|
+
* Use case: one ship of the caller's fleet, retired ships included: they keep
|
|
9
|
+
* their page. The caller's scope (fleet:read or crew:run) is
|
|
10
|
+
* checked before this runs; crew:run reads only the ships whose crew requests
|
|
11
|
+
* are assigned to the caller's ship.
|
|
12
|
+
*/
|
|
13
|
+
export function createGetShip(deps) {
|
|
14
|
+
return async (caller, { shipId }) => {
|
|
15
|
+
const facts = await deps.listing.ship(caller.fleetId, shipId);
|
|
16
|
+
if (!facts) {
|
|
17
|
+
return refuse('SHIP_NOT_FOUND', `No ship ${shipId} in this fleet`);
|
|
18
|
+
}
|
|
19
|
+
const reaches = checkReaches(caller, { ship: facts.ship, current: facts.crewRequest, broadScopes: READ_SCOPES });
|
|
20
|
+
if (!reaches.isOk) {
|
|
21
|
+
return reaches;
|
|
22
|
+
}
|
|
23
|
+
const listed = listedShipOf(facts);
|
|
24
|
+
const counts = await deps.listing.deliveryCounts(caller.fleetId, shipId);
|
|
25
|
+
return ok({
|
|
26
|
+
...listed,
|
|
27
|
+
report: facts.openLease?.report ?? null,
|
|
28
|
+
crewRequest: listed.crewRequest && facts.crewRequest && { ...listed.crewRequest, settings: facts.crewRequest.settings },
|
|
29
|
+
inFlightDeliveries: counts.inFlight,
|
|
30
|
+
openDeliveries: counts.open,
|
|
31
|
+
commissionedAt: facts.ship.createdAt,
|
|
32
|
+
crewedSince: facts.openLease?.startedAt ?? null,
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=get-ship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-ship.js","sourceRoot":"","sources":["../../../src/domain/registry/get-ship.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AAwBnE,oGAAoG;AACpG,MAAM,WAAW,GAAG,CAAC,YAAY,CAAU,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAA+B;IAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,gBAAgB,EAAE,WAAW,MAAM,gBAAgB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;YACR,GAAG,MAAM;YACT,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI;YACvC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;YACvH,kBAAkB,EAAE,MAAM,CAAC,QAAQ;YACnC,cAAc,EAAE,MAAM,CAAC,IAAI;YAC3B,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;YACpC,WAAW,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,IAAI;SAChD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { IdGenerator, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type SecretTools } from '../identity/public.js';
|
|
3
|
+
import type { Caller } from '../shared/caller.js';
|
|
4
|
+
import type { Clock } from '../shared/clock.js';
|
|
5
|
+
import { type DomainError } from '../shared/errors.js';
|
|
6
|
+
import { type Result } from '../shared/result.js';
|
|
7
|
+
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
8
|
+
import type { CrewRequestRepository, LeaseRepository, ShipRepository } from './ports.js';
|
|
9
|
+
import { type IssuedStartingPrompt, type StartingPromptTx } from './starting-prompt.js';
|
|
10
|
+
export interface GetStartingPromptTx extends StartingPromptTx {
|
|
11
|
+
ships: ShipRepository;
|
|
12
|
+
leases: LeaseRepository;
|
|
13
|
+
crewRequests: Pick<CrewRequestRepository, 'find'>;
|
|
14
|
+
}
|
|
15
|
+
export type GetStartingPromptRefusal = DomainError<'SHIP_NOT_FOUND' | 'OPERATOR_SHIP_GETS_NO_STARTING_PROMPT' | 'SHIP_NOT_AWAITING_CREW' | 'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER'>;
|
|
16
|
+
export type GetStartingPrompt = (caller: Caller, input: {
|
|
17
|
+
shipId: ShipId;
|
|
18
|
+
}) => Promise<Result<IssuedStartingPrompt, GetStartingPromptRefusal>>;
|
|
19
|
+
export declare function createGetStartingPrompt(deps: {
|
|
20
|
+
uow: UnitOfWork<GetStartingPromptTx>;
|
|
21
|
+
clock: Clock;
|
|
22
|
+
ids: IdGenerator;
|
|
23
|
+
secrets: Omit<SecretTools, 'ids'>;
|
|
24
|
+
}): GetStartingPrompt;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { revokeShipSecret } from '../identity/public.js';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { shipActor } from '../shared/events.js';
|
|
4
|
+
import { ok } from '../shared/result.js';
|
|
5
|
+
import { checkReaches } from './crew-request.js';
|
|
6
|
+
import { checkCanIssueStartingPrompt } from './ship.js';
|
|
7
|
+
import { issueStartingPrompt } from './starting-prompt.js';
|
|
8
|
+
/**
|
|
9
|
+
* Use case: a new starting prompt for a ship of the caller's fleet that awaits
|
|
10
|
+
* crew. Its new secret invalidates any earlier one, so at most one is valid; a
|
|
11
|
+
* prompt lost before use costs nothing. The caller's scope (fleet:manage or
|
|
12
|
+
* crew:run) is checked before this runs; crew:run reaches only
|
|
13
|
+
* the ships whose crew requests are assigned to the caller's ship.
|
|
14
|
+
*
|
|
15
|
+
* Locks in the fleet's order: the ship first, so concurrent prompts for one
|
|
16
|
+
* ship take turns and the last one issued is the valid one; then its secret;
|
|
17
|
+
* then its lease. The lease is read last, so a session that claimed the ship
|
|
18
|
+
* with the old secret meanwhile is seen, and the refusal rolls the revocation
|
|
19
|
+
* back.
|
|
20
|
+
*/
|
|
21
|
+
/** The scopes that reach every ship for a starting prompt; crew:run reaches only assigned ones. */
|
|
22
|
+
const PROMPT_SCOPES = ['fleet:manage'];
|
|
23
|
+
export function createGetStartingPrompt(deps) {
|
|
24
|
+
return (caller, { shipId }) => deps.uow.run(async (tx) => {
|
|
25
|
+
const { fleetId } = caller;
|
|
26
|
+
const ship = await tx.ships.findForUpdate(fleetId, shipId);
|
|
27
|
+
if (!ship) {
|
|
28
|
+
return refuse('SHIP_NOT_FOUND', `Ship ${shipId} does not exist`);
|
|
29
|
+
}
|
|
30
|
+
const reaches = checkReaches(caller, { ship, current: await tx.crewRequests.find(fleetId, shipId), broadScopes: PROMPT_SCOPES });
|
|
31
|
+
if (!reaches.isOk) {
|
|
32
|
+
return reaches;
|
|
33
|
+
}
|
|
34
|
+
const actor = shipActor(caller.shipId);
|
|
35
|
+
const at = deps.clock.now();
|
|
36
|
+
await revokeShipSecret({ tx, ids: deps.ids }, { fleetId, shipId, actor, at });
|
|
37
|
+
const lease = await tx.leases.findOpenForUpdate(fleetId, shipId);
|
|
38
|
+
const allowed = checkCanIssueStartingPrompt(ship, { isCrewed: lease !== undefined });
|
|
39
|
+
if (!allowed.isOk) {
|
|
40
|
+
return allowed;
|
|
41
|
+
}
|
|
42
|
+
const issued = await issueStartingPrompt({ tx, secrets: { ...deps.secrets, ids: deps.ids } }, { fleetId, shipId, actor, at });
|
|
43
|
+
return ok(issued);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=get-starting-prompt.js.map
|
|
@@ -0,0 +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;AAG3E,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAoD,MAAM,sBAAsB,CAAC;AAiB7G;;;;;;;;;;;;GAYG;AACH,mGAAmG;AACnG,MAAM,aAAa,GAAG,CAAC,cAAc,CAAU,CAAC;AAEhD,MAAM,UAAU,uBAAuB,CAAC,IAKvC;IACC,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAmE,EAAE;QACzF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,MAAM,CAAC,gBAAgB,EAAE,QAAQ,MAAM,iBAAiB,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACjI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IdGenerator } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { PasswordHasher } from '../shared/secrets.js';
|
|
6
|
+
import type { UnitOfWork } from '../shared/unit-of-work.js';
|
|
7
|
+
import { type FleetFounded, type FoundFleetTx } from './found-fleet.js';
|
|
8
|
+
export type InitialiseFleetTx = FoundFleetTx;
|
|
9
|
+
export type FleetInitialised = FleetFounded;
|
|
10
|
+
export type InitialiseFleetRefusal = DomainError<'INVALID_FLEET_NAME' | 'INVALID_EMAIL' | 'INVALID_PASSWORD' | 'FLEET_ALREADY_EXISTS'>;
|
|
11
|
+
export type InitialiseFleet = (input: {
|
|
12
|
+
name: string;
|
|
13
|
+
email: string;
|
|
14
|
+
password: string;
|
|
15
|
+
}) => Promise<Result<FleetInitialised, InitialiseFleetRefusal>>;
|
|
16
|
+
/**
|
|
17
|
+
* Use case: creates the fleet, its operator ship `argo` and the operator
|
|
18
|
+
* account the console signs in with, in one transaction. argo gets no secret:
|
|
19
|
+
* that sign-in is the only way to crew it. Runs once per installation: it
|
|
20
|
+
* refuses when any fleet exists. A server command, never a public page
|
|
21
|
+
* (ADR 0012).
|
|
22
|
+
*/
|
|
23
|
+
export declare function createInitialiseFleet(deps: {
|
|
24
|
+
uow: UnitOfWork<InitialiseFleetTx>;
|
|
25
|
+
clock: Clock;
|
|
26
|
+
ids: IdGenerator;
|
|
27
|
+
passwords: PasswordHasher;
|
|
28
|
+
}): InitialiseFleet;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { operatorEmail, operatorPassword } from '../identity/public.js';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { ok } from '../shared/result.js';
|
|
4
|
+
import { fleetName } from './fleet.js';
|
|
5
|
+
import { foundFleet } from './found-fleet.js';
|
|
6
|
+
/**
|
|
7
|
+
* Use case: creates the fleet, its operator ship `argo` and the operator
|
|
8
|
+
* account the console signs in with, in one transaction. argo gets no secret:
|
|
9
|
+
* that sign-in is the only way to crew it. Runs once per installation: it
|
|
10
|
+
* refuses when any fleet exists. A server command, never a public page
|
|
11
|
+
* (ADR 0012).
|
|
12
|
+
*/
|
|
13
|
+
export function createInitialiseFleet(deps) {
|
|
14
|
+
return async (input) => {
|
|
15
|
+
const named = fleetName(input.name);
|
|
16
|
+
if (!named.isOk) {
|
|
17
|
+
return named;
|
|
18
|
+
}
|
|
19
|
+
const email = operatorEmail(input.email);
|
|
20
|
+
if (!email.isOk) {
|
|
21
|
+
return email;
|
|
22
|
+
}
|
|
23
|
+
const password = operatorPassword(input.password);
|
|
24
|
+
if (!password.isOk) {
|
|
25
|
+
return password;
|
|
26
|
+
}
|
|
27
|
+
const name = named.value;
|
|
28
|
+
// Hashed before the transaction: Argon2 takes its time on purpose.
|
|
29
|
+
const passwordHash = await deps.passwords.hash(password.value);
|
|
30
|
+
return deps.uow.run(async (tx) => {
|
|
31
|
+
await tx.fleets.lockInitialisation();
|
|
32
|
+
if ((await tx.fleets.count()) > 0) {
|
|
33
|
+
return refuse('FLEET_ALREADY_EXISTS', 'A fleet already exists: a fleet is initialised only once');
|
|
34
|
+
}
|
|
35
|
+
return ok(await foundFleet({ tx, ids: deps.ids }, { name, email: email.value, passwordHash, at: deps.clock.now() }));
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=initialise-fleet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialise-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/initialise-fleet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAwC,MAAM,kBAAkB,CAAC;AAgBpF;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACC,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,mEAAmE;QACnE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC/B,MAAM,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,MAAM,CAAC,sBAAsB,EAAE,0DAA0D,CAAC,CAAC;YACpG,CAAC;YAED,OAAO,EAAE,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACvH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type FleetLimit, type InstallationSettings } from './limits.js';
|
|
3
|
+
import type { InstallationFleetFacts, InstallationFleetWindow } from './ports.js';
|
|
4
|
+
/** How far back an installation's fleet counts its messages, and over how many UTC days. */
|
|
5
|
+
export declare const MESSAGE_WINDOW_DAYS = 7;
|
|
6
|
+
export declare const MESSAGE_WINDOW_MS: number;
|
|
7
|
+
/**
|
|
8
|
+
* A fleet as the installation describes it (docs/blueprint.md,
|
|
9
|
+
* "Installation"): its facts and measures, its messages today and per UTC day
|
|
10
|
+
* of the last 7 days, today last, and the limits that apply to it.
|
|
11
|
+
*/
|
|
12
|
+
export interface InstallationFleet {
|
|
13
|
+
fleetId: FleetId;
|
|
14
|
+
name: string;
|
|
15
|
+
operatorEmail: string;
|
|
16
|
+
createdAt: Date;
|
|
17
|
+
shipCount: number;
|
|
18
|
+
messagesLast7Days: number;
|
|
19
|
+
lastActivityAt: Date | null;
|
|
20
|
+
storage: number;
|
|
21
|
+
messagesToday: number;
|
|
22
|
+
messagesPerDay: {
|
|
23
|
+
date: string;
|
|
24
|
+
count: number;
|
|
25
|
+
}[];
|
|
26
|
+
limits: {
|
|
27
|
+
ships: FleetLimit;
|
|
28
|
+
dailyMessages: FleetLimit;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** What a read at `now` counts over: the last 7 times 24 hours, and the last 7 UTC days from the first one's start. */
|
|
32
|
+
export declare function messageWindow(now: Date): InstallationFleetWindow;
|
|
33
|
+
export declare function installationFleet(facts: InstallationFleetFacts, read: {
|
|
34
|
+
now: Date;
|
|
35
|
+
installation: InstallationSettings;
|
|
36
|
+
}): InstallationFleet;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { fleetLimitsOf } from './limits.js';
|
|
2
|
+
/** How far back an installation's fleet counts its messages, and over how many UTC days. */
|
|
3
|
+
export const MESSAGE_WINDOW_DAYS = 7;
|
|
4
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
5
|
+
export const MESSAGE_WINDOW_MS = MESSAGE_WINDOW_DAYS * DAY_MS;
|
|
6
|
+
/** The UTC days a read at `now` counts messages over: the last 7, today last, as YYYY-MM-DD. */
|
|
7
|
+
function utcDays(now) {
|
|
8
|
+
const today = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate());
|
|
9
|
+
return Array.from({ length: MESSAGE_WINDOW_DAYS }, (_unused, index) => new Date(today - (MESSAGE_WINDOW_DAYS - 1 - index) * DAY_MS).toISOString().slice(0, 10));
|
|
10
|
+
}
|
|
11
|
+
/** What a read at `now` counts over: the last 7 times 24 hours, and the last 7 UTC days from the first one's start. */
|
|
12
|
+
export function messageWindow(now) {
|
|
13
|
+
const [firstDay = now.toISOString().slice(0, 10)] = utcDays(now);
|
|
14
|
+
return { since: new Date(now.getTime() - MESSAGE_WINDOW_MS), firstDay: new Date(`${firstDay}T00:00:00.000Z`) };
|
|
15
|
+
}
|
|
16
|
+
export function installationFleet(facts, read) {
|
|
17
|
+
const { messagesSince, messagesPerUtcDay, limitSettings, ...rest } = facts;
|
|
18
|
+
const messagesPerDay = utcDays(read.now).map((date) => ({ date, count: messagesPerUtcDay.find((day) => day.date === date)?.count ?? 0 }));
|
|
19
|
+
const { ships, dailyMessages } = fleetLimitsOf({ fleetId: facts.fleetId, settings: limitSettings, installation: read.installation });
|
|
20
|
+
return { ...rest, messagesLast7Days: messagesSince, messagesToday: messagesPerDay.at(-1)?.count ?? 0, messagesPerDay, limits: { ships, dailyMessages } };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=installation-fleet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/installation-fleet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA8C,MAAM,aAAa,CAAC;AAGxF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAqB9D,gGAAgG;AAChG,SAAS,OAAO,CAAC,GAAS;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,mBAAmB,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAClK,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,aAAa,CAAC,GAAS;IACrC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,QAAQ,gBAAgB,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA6B,EAAE,IAAuD;IACtH,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1I,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACrI,OAAO,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;AAC3J,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
/**
|
|
3
|
+
* A create or delete the installation carried out, under the caller's own
|
|
4
|
+
* request id, so a replay answers what the first call answered (decision
|
|
5
|
+
* 0020). It belongs to the installation, not to a fleet. It keeps the request
|
|
6
|
+
* as a hash only: a delete record names nothing of the fleet it deleted, and a
|
|
7
|
+
* create record, which holds the fleet and argo it answers with, goes with
|
|
8
|
+
* that fleet.
|
|
9
|
+
*/
|
|
10
|
+
export type InstallationRequest = {
|
|
11
|
+
requestId: string;
|
|
12
|
+
at: Date;
|
|
13
|
+
/** The hash of the request it carried out: a replay under its id must hash the same. */
|
|
14
|
+
requestHash: string;
|
|
15
|
+
} & ({
|
|
16
|
+
kind: 'createFleet';
|
|
17
|
+
fleetId: FleetId;
|
|
18
|
+
operatorShipId: ShipId;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'deleteFleet';
|
|
21
|
+
});
|
|
22
|
+
/** A request as hashed for its record: its kind and what it names, in a fixed order. */
|
|
23
|
+
export declare function installationRequestText(request: readonly string[]): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-request.js","sourceRoot":"","sources":["../../../src/domain/registry/installation-request.ts"],"names":[],"mappings":"AAiBA,wFAAwF;AACxF,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type FleetId, type LeaseId, type LocationKind, type ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Err, type Result } from '../shared/result.js';
|
|
4
|
+
/**
|
|
5
|
+
* Where the session crewing a ship runs, reported when it claims the ship.
|
|
6
|
+
* Metadata only: never interpreted. `OTHER` carries a short description; the
|
|
7
|
+
* other kinds carry none.
|
|
8
|
+
*/
|
|
9
|
+
export interface Location {
|
|
10
|
+
kind: LocationKind;
|
|
11
|
+
description: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare function location(kind: LocationKind, description?: string): Result<Location, DomainError<'INVALID_LOCATION'>>;
|
|
14
|
+
/**
|
|
15
|
+
* The harness the session crewing a ship runs in (docs/blueprint.md,
|
|
16
|
+
* "Harness"), stated when it claims the ship: free text such as claude-code,
|
|
17
|
+
* claude-chat or codex, trimmed and in lower case. Read together with the
|
|
18
|
+
* location; never interpreted.
|
|
19
|
+
*/
|
|
20
|
+
export declare function harness(value: string): Result<string, DomainError<'INVALID_HARNESS'>>;
|
|
21
|
+
/** Versioned prefix of every crew token (ADR 0015). */
|
|
22
|
+
export declare const CREW_TOKEN_PREFIX = "aeolus_ct_v1_";
|
|
23
|
+
/** The exclusive right of one session to crew a ship. Open until `endedAt` is set. */
|
|
24
|
+
export interface Lease {
|
|
25
|
+
id: LeaseId;
|
|
26
|
+
fleetId: FleetId;
|
|
27
|
+
shipId: ShipId;
|
|
28
|
+
location: Location;
|
|
29
|
+
/** The harness the session stated; none for argo's console lease and for leases from before harnesses were stated. */
|
|
30
|
+
harness: string | null;
|
|
31
|
+
/**
|
|
32
|
+
* The hash of the crew token `register` gave the session: every later ship
|
|
33
|
+
* call carries the token (ADR 0015). Null for a console session's lease on
|
|
34
|
+
* argo, whose token lives with the console session.
|
|
35
|
+
*/
|
|
36
|
+
crewTokenHash: string | null;
|
|
37
|
+
startedAt: Date;
|
|
38
|
+
endedAt: Date | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Why a lease ended; recorded on its LeaseRevoked event. The operator released
|
|
42
|
+
* or retired the ship, its crew deregistered, or, for argo, a sign-in took it
|
|
43
|
+
* over, the operator signed out or the password was reset.
|
|
44
|
+
*/
|
|
45
|
+
export type LeaseEndReason = 'released' | 'retired' | 'deregistered' | 'takenOver' | 'signedOut' | 'passwordReset';
|
|
46
|
+
export type LeaseEnded = DomainError<'LEASE_ENDED'>;
|
|
47
|
+
/**
|
|
48
|
+
* The refusal for a crew whose lease has ended: its crew token no longer
|
|
49
|
+
* crews the ship, which needs a new crew with a new starting prompt.
|
|
50
|
+
*/
|
|
51
|
+
export declare function refuseEndedLease(): Err<LeaseEnded>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { HARNESS_MAX_LENGTH, LOCATION_DESCRIPTION_MAX_LENGTH, } from '@aeolus-fleet/common';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { ok } from '../shared/result.js';
|
|
4
|
+
export function location(kind, description) {
|
|
5
|
+
if (kind !== 'OTHER') {
|
|
6
|
+
if (description !== undefined) {
|
|
7
|
+
return refuse('INVALID_LOCATION', `Only an OTHER location carries a description, not ${kind}`);
|
|
8
|
+
}
|
|
9
|
+
return ok({ kind, description: null });
|
|
10
|
+
}
|
|
11
|
+
const trimmed = description?.trim() ?? '';
|
|
12
|
+
if (trimmed.length === 0 || trimmed.length > LOCATION_DESCRIPTION_MAX_LENGTH) {
|
|
13
|
+
return refuse('INVALID_LOCATION', `An OTHER location needs a description of 1 to ${LOCATION_DESCRIPTION_MAX_LENGTH} characters`);
|
|
14
|
+
}
|
|
15
|
+
return ok({ kind, description: trimmed });
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The harness the session crewing a ship runs in (docs/blueprint.md,
|
|
19
|
+
* "Harness"), stated when it claims the ship: free text such as claude-code,
|
|
20
|
+
* claude-chat or codex, trimmed and in lower case. Read together with the
|
|
21
|
+
* location; never interpreted.
|
|
22
|
+
*/
|
|
23
|
+
export function harness(value) {
|
|
24
|
+
const stated = value.trim().toLowerCase();
|
|
25
|
+
if (stated.length === 0 || stated.length > HARNESS_MAX_LENGTH) {
|
|
26
|
+
return refuse('INVALID_HARNESS', `A harness names what the session runs in, such as claude-code, in 1 to ${String(HARNESS_MAX_LENGTH)} characters`);
|
|
27
|
+
}
|
|
28
|
+
return ok(stated);
|
|
29
|
+
}
|
|
30
|
+
/** Versioned prefix of every crew token (ADR 0015). */
|
|
31
|
+
export const CREW_TOKEN_PREFIX = 'aeolus_ct_v1_';
|
|
32
|
+
/**
|
|
33
|
+
* The refusal for a crew whose lease has ended: its crew token no longer
|
|
34
|
+
* crews the ship, which needs a new crew with a new starting prompt.
|
|
35
|
+
*/
|
|
36
|
+
export function refuseEndedLease() {
|
|
37
|
+
return refuse('LEASE_ENDED', 'This ship was released; this session no longer crews it.');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=lease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lease.js","sourceRoot":"","sources":["../../../src/domain/registry/lease.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,+BAA+B,GAKhC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAyB,MAAM,qBAAqB,CAAC;AAYhE,MAAM,UAAU,QAAQ,CAAC,IAAkB,EAAE,WAAoB;IAC/D,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,kBAAkB,EAAE,qDAAqD,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,+BAA+B,EAAE,CAAC;QAC7E,OAAO,MAAM,CACX,kBAAkB,EAClB,iDAAiD,+BAA+B,aAAa,CAC9F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC,iBAAiB,EAAE,0EAA0E,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACtJ,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AA6BjD;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,MAAM,CAAC,aAAa,EAAE,0DAA0D,CAAC,CAAC;AAC3F,CAAC"}
|