@aeolus-fleet/core 0.0.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +56 -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/migration_lock.toml +3 -0
- package/src/adapters/prisma/schema.prisma +558 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignInTicket.js","sourceRoot":"","sources":["../../../../../src/adapters/prisma/generated/models/SignInTicket.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type * from './models/Fleet.js';
|
|
2
|
+
export type * from './models/Ship.js';
|
|
3
|
+
export type * from './models/Lease.js';
|
|
4
|
+
export type * from './models/CrewRequest.js';
|
|
5
|
+
export type * from './models/Credential.js';
|
|
6
|
+
export type * from './models/Message.js';
|
|
7
|
+
export type * from './models/Delivery.js';
|
|
8
|
+
export type * from './models/Event.js';
|
|
9
|
+
export type * from './models/Operator.js';
|
|
10
|
+
export type * from './models/ConsoleSession.js';
|
|
11
|
+
export type * from './models/SignInTicket.js';
|
|
12
|
+
export type * from './models/InstallationSettings.js';
|
|
13
|
+
export type * from './models/InstallationRequest.js';
|
|
14
|
+
export type * from './models/Notice.js';
|
|
15
|
+
export type * from './models/NoticeDismissal.js';
|
|
16
|
+
export type * from './models/Guide.js';
|
|
17
|
+
export type * from './models/GuideProgress.js';
|
|
18
|
+
export type * from './commonInputTypes.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/adapters/prisma/generated/models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The history reads on Postgres (core/shared/history.ts): a ship's timeline
|
|
3
|
+
* from the event log, its messages and one message's delivery history. Each
|
|
4
|
+
* read takes a few queries and names every party in one more, by the ships'
|
|
5
|
+
* current names, so a renamed ship goes by its new name.
|
|
6
|
+
*/
|
|
7
|
+
import { DELIVERY_HISTORY_TYPES, DELIVERY_STATES, deliveryStateSchema, idSchema, locationKindSchema, } from '@aeolus-fleet/common';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { isDeliveryChangeType, isKeptBy, } from '../../domain/shared/history.js';
|
|
10
|
+
import { toMessage, toSequencedEvent } from './rows.js';
|
|
11
|
+
const deliveryRow = z.object({
|
|
12
|
+
id: idSchema('delivery'),
|
|
13
|
+
state: deliveryStateSchema,
|
|
14
|
+
attempts: z.number().int(),
|
|
15
|
+
claimedByShipId: idSchema('ship').nullable(),
|
|
16
|
+
});
|
|
17
|
+
/** Every ship the reads name, by id, read in one query. */
|
|
18
|
+
async function partiesOf(db, of) {
|
|
19
|
+
const ships = await db.ship.findMany({
|
|
20
|
+
where: { fleetId: of.fleetId, id: { in: [...new Set(of.shipIds)] } },
|
|
21
|
+
select: { id: true, name: true },
|
|
22
|
+
});
|
|
23
|
+
const names = new Map(ships.map((ship) => [ship.id, ship.name]));
|
|
24
|
+
return (id) => {
|
|
25
|
+
const name = names.get(id);
|
|
26
|
+
if (name === undefined) {
|
|
27
|
+
throw new Error(`No ship ${id} in fleet ${of.fleetId}`);
|
|
28
|
+
}
|
|
29
|
+
return { id, name };
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function shipsNamedBy(message) {
|
|
33
|
+
return message.selector.kind === 'ship' ? [message.senderShipId, message.selector.shipId] : [message.senderShipId];
|
|
34
|
+
}
|
|
35
|
+
function recipientOf(selector, party) {
|
|
36
|
+
return selector.kind === 'ship' ? { kind: 'ship', ship: party(selector.shipId) } : selector;
|
|
37
|
+
}
|
|
38
|
+
function historyMessageOf(found, party) {
|
|
39
|
+
const { message, delivery } = found;
|
|
40
|
+
return {
|
|
41
|
+
id: message.id,
|
|
42
|
+
sender: party(message.senderShipId),
|
|
43
|
+
recipient: recipientOf(message.selector, party),
|
|
44
|
+
inReplyTo: message.inReplyToMessageId,
|
|
45
|
+
sentAt: message.createdAt,
|
|
46
|
+
contentType: message.contentType,
|
|
47
|
+
model: message.model,
|
|
48
|
+
payload: message.payload,
|
|
49
|
+
delivery: {
|
|
50
|
+
id: delivery.id,
|
|
51
|
+
state: delivery.state,
|
|
52
|
+
attempts: delivery.attempts,
|
|
53
|
+
claimedBy: delivery.claimedByShipId === null ? null : party(delivery.claimedByShipId),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** A message's one delivery: v1 sends every message to one recipient. */
|
|
58
|
+
function onlyDelivery(row) {
|
|
59
|
+
const [delivery] = row.deliveries;
|
|
60
|
+
if (delivery === undefined) {
|
|
61
|
+
throw new Error(`Message ${row.id} has no delivery`);
|
|
62
|
+
}
|
|
63
|
+
return deliveryRow.parse(delivery);
|
|
64
|
+
}
|
|
65
|
+
const DELIVERY_SELECT = { id: true, state: true, attempts: true, claimedByShipId: true };
|
|
66
|
+
async function shipExists(db, at) {
|
|
67
|
+
return (await db.ship.count({ where: { fleetId: at.fleetId, id: at.shipId } })) === 1;
|
|
68
|
+
}
|
|
69
|
+
export function createPrismaShipHistory(db) {
|
|
70
|
+
return {
|
|
71
|
+
timeline: async (fleetId, { shipId, limit }) => {
|
|
72
|
+
if (!(await shipExists(db, { fleetId, shipId }))) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const events = (await db.event.findMany({
|
|
76
|
+
where: { fleetId, OR: [{ shipId }, { actorShipId: shipId }] },
|
|
77
|
+
orderBy: { seq: 'desc' },
|
|
78
|
+
take: limit,
|
|
79
|
+
})).map(toSequencedEvent);
|
|
80
|
+
const messageIds = [...new Set(events.flatMap((event) => (event.messageId === undefined ? [] : [event.messageId])))];
|
|
81
|
+
const messages = new Map((await db.message.findMany({ where: { fleetId, id: { in: messageIds } } }))
|
|
82
|
+
.map(toMessage)
|
|
83
|
+
.map((message) => [message.id, message]));
|
|
84
|
+
const party = await partiesOf(db, {
|
|
85
|
+
fleetId,
|
|
86
|
+
shipIds: [
|
|
87
|
+
...events.flatMap((event) => [
|
|
88
|
+
...(event.actor.kind === 'ship' ? [event.actor.shipId] : []),
|
|
89
|
+
...(event.shipId === undefined ? [] : [event.shipId]),
|
|
90
|
+
]),
|
|
91
|
+
...[...messages.values()].flatMap(shipsNamedBy),
|
|
92
|
+
],
|
|
93
|
+
});
|
|
94
|
+
return events.map((event) => {
|
|
95
|
+
const message = event.messageId === undefined ? undefined : messages.get(event.messageId);
|
|
96
|
+
return {
|
|
97
|
+
seq: event.seq,
|
|
98
|
+
id: event.id,
|
|
99
|
+
type: event.type,
|
|
100
|
+
occurredAt: event.occurredAt,
|
|
101
|
+
actor: event.actor.kind === 'ship' ? party(event.actor.shipId) : null,
|
|
102
|
+
ship: event.shipId === undefined ? null : party(event.shipId),
|
|
103
|
+
message: message
|
|
104
|
+
? {
|
|
105
|
+
id: message.id,
|
|
106
|
+
sender: party(message.senderShipId),
|
|
107
|
+
recipient: recipientOf(message.selector, party),
|
|
108
|
+
contentType: message.contentType,
|
|
109
|
+
model: message.model,
|
|
110
|
+
}
|
|
111
|
+
: null,
|
|
112
|
+
details: event.details,
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
messages: async (fleetId, { shipId, limit }) => {
|
|
117
|
+
if (!(await shipExists(db, { fleetId, shipId }))) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
// A message to a type shows on the page of each ship that claimed it,
|
|
121
|
+
// which only the event log remembers once another ship holds it.
|
|
122
|
+
const rows = await db.message.findMany({
|
|
123
|
+
where: {
|
|
124
|
+
fleetId,
|
|
125
|
+
OR: [
|
|
126
|
+
{ senderShipId: shipId },
|
|
127
|
+
{ selectorShipId: shipId },
|
|
128
|
+
{ events: { some: { type: 'DeliveryClaimed', shipId } } },
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
orderBy: [{ createdAt: 'desc' }, { id: 'desc' }],
|
|
132
|
+
take: limit,
|
|
133
|
+
include: { deliveries: { select: DELIVERY_SELECT } },
|
|
134
|
+
});
|
|
135
|
+
const found = rows.map((row) => ({ message: toMessage(row), delivery: onlyDelivery(row) }));
|
|
136
|
+
const party = await partiesOf(db, {
|
|
137
|
+
fleetId,
|
|
138
|
+
shipIds: found.flatMap(({ message, delivery }) => [
|
|
139
|
+
...shipsNamedBy(message),
|
|
140
|
+
...(delivery.claimedByShipId === null ? [] : [delivery.claimedByShipId]),
|
|
141
|
+
]),
|
|
142
|
+
});
|
|
143
|
+
return found.map((each) => historyMessageOf(each, party));
|
|
144
|
+
},
|
|
145
|
+
message: async (fleetId, messageId) => {
|
|
146
|
+
const row = await db.message.findFirst({
|
|
147
|
+
where: { fleetId, id: messageId },
|
|
148
|
+
include: { deliveries: { select: DELIVERY_SELECT } },
|
|
149
|
+
});
|
|
150
|
+
if (!row) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const message = toMessage(row);
|
|
154
|
+
const delivery = onlyDelivery(row);
|
|
155
|
+
const events = (await db.event.findMany({
|
|
156
|
+
where: { fleetId, deliveryId: delivery.id, type: { in: [...DELIVERY_HISTORY_TYPES] } },
|
|
157
|
+
orderBy: { seq: 'desc' },
|
|
158
|
+
})).map(toSequencedEvent);
|
|
159
|
+
const leases = await claimingLeases(db, { fleetId, events });
|
|
160
|
+
const party = await partiesOf(db, {
|
|
161
|
+
fleetId,
|
|
162
|
+
shipIds: [
|
|
163
|
+
...shipsNamedBy(message),
|
|
164
|
+
...(delivery.claimedByShipId === null ? [] : [delivery.claimedByShipId]),
|
|
165
|
+
...events.flatMap((event) => (event.shipId === undefined ? [] : [event.shipId])),
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
...historyMessageOf({ message, delivery }, party),
|
|
170
|
+
history: events.flatMap((event) => changeOf(event, { party, leases })),
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
inbox: async (fleetId, { shipId, filter }) => {
|
|
174
|
+
const rows = await db.delivery.findMany({
|
|
175
|
+
where: {
|
|
176
|
+
fleetId,
|
|
177
|
+
recipientShipId: shipId,
|
|
178
|
+
state: { in: DELIVERY_STATES.filter((state) => isKeptBy(filter, state)) },
|
|
179
|
+
},
|
|
180
|
+
select: { id: true, state: true, readAt: true, message: true },
|
|
181
|
+
orderBy: [{ message: { createdAt: 'desc' } }, { messageId: 'desc' }],
|
|
182
|
+
});
|
|
183
|
+
// When each was done, and by which reply: its last DeliveryAcknowledged.
|
|
184
|
+
const acknowledged = new Map((await db.event.findMany({
|
|
185
|
+
where: { fleetId, type: 'DeliveryAcknowledged', deliveryId: { in: rows.map((row) => row.id) } },
|
|
186
|
+
orderBy: { seq: 'asc' },
|
|
187
|
+
}))
|
|
188
|
+
.map(toSequencedEvent)
|
|
189
|
+
.map((event) => [event.deliveryId, event]));
|
|
190
|
+
const found = rows.map((row) => ({ row, message: toMessage(row.message) }));
|
|
191
|
+
const party = await partiesOf(db, { fleetId, shipIds: found.map(({ message }) => message.senderShipId) });
|
|
192
|
+
return found.map(({ row, message }) => {
|
|
193
|
+
const deliveryId = idSchema('delivery').parse(row.id);
|
|
194
|
+
const done = acknowledged.get(deliveryId);
|
|
195
|
+
const reply = done?.details.reply;
|
|
196
|
+
return {
|
|
197
|
+
deliveryId,
|
|
198
|
+
state: deliveryStateSchema.parse(row.state),
|
|
199
|
+
readAt: row.readAt,
|
|
200
|
+
doneAt: done?.occurredAt ?? null,
|
|
201
|
+
repliedWith: typeof reply === 'string' ? idSchema('message').parse(reply) : null,
|
|
202
|
+
message: {
|
|
203
|
+
id: message.id,
|
|
204
|
+
sender: party(message.senderShipId),
|
|
205
|
+
inReplyTo: message.inReplyToMessageId,
|
|
206
|
+
sentAt: message.createdAt,
|
|
207
|
+
contentType: message.contentType,
|
|
208
|
+
model: message.model,
|
|
209
|
+
payload: message.payload,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
});
|
|
213
|
+
},
|
|
214
|
+
undeliverable: async (fleetId) => {
|
|
215
|
+
const rows = await db.delivery.findMany({
|
|
216
|
+
where: { fleetId, state: 'undeliverable' },
|
|
217
|
+
select: { id: true, attempts: true, message: true },
|
|
218
|
+
});
|
|
219
|
+
// When each became undeliverable: its last DeliveryUndeliverable, whose
|
|
220
|
+
// place in the stream also orders the list, oldest first.
|
|
221
|
+
const events = (await db.event.findMany({
|
|
222
|
+
where: { fleetId, type: 'DeliveryUndeliverable', deliveryId: { in: rows.map((row) => row.id) } },
|
|
223
|
+
orderBy: { seq: 'asc' },
|
|
224
|
+
})).map(toSequencedEvent);
|
|
225
|
+
const since = new Map(events.map((event) => [event.deliveryId, event]));
|
|
226
|
+
const found = rows.map((row) => {
|
|
227
|
+
const deliveryId = idSchema('delivery').parse(row.id);
|
|
228
|
+
const event = since.get(deliveryId);
|
|
229
|
+
if (!event) {
|
|
230
|
+
throw new Error(`Undeliverable delivery ${deliveryId} has no DeliveryUndeliverable`);
|
|
231
|
+
}
|
|
232
|
+
return { deliveryId, attempts: row.attempts, message: toMessage(row.message), event };
|
|
233
|
+
});
|
|
234
|
+
const party = await partiesOf(db, { fleetId, shipIds: found.flatMap(({ message }) => shipsNamedBy(message)) });
|
|
235
|
+
return found
|
|
236
|
+
.sort((first, second) => first.event.seq - second.event.seq)
|
|
237
|
+
.map(({ deliveryId, attempts, message, event }) => ({
|
|
238
|
+
deliveryId,
|
|
239
|
+
attempts,
|
|
240
|
+
since: event.occurredAt,
|
|
241
|
+
message: {
|
|
242
|
+
id: message.id,
|
|
243
|
+
sender: party(message.senderShipId),
|
|
244
|
+
recipient: recipientOf(message.selector, party),
|
|
245
|
+
inReplyTo: message.inReplyToMessageId,
|
|
246
|
+
sentAt: message.createdAt,
|
|
247
|
+
contentType: message.contentType,
|
|
248
|
+
model: message.model,
|
|
249
|
+
payload: message.payload,
|
|
250
|
+
},
|
|
251
|
+
}));
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/** The leases of the claims among the events, for where each claiming session ran. */
|
|
256
|
+
async function claimingLeases(db, of) {
|
|
257
|
+
const leaseIds = of.events.flatMap((event) => {
|
|
258
|
+
const { leaseId } = event.details;
|
|
259
|
+
return event.type === 'DeliveryClaimed' && typeof leaseId === 'string' ? [leaseId] : [];
|
|
260
|
+
});
|
|
261
|
+
const leases = await db.lease.findMany({
|
|
262
|
+
where: { fleetId: of.fleetId, id: { in: leaseIds } },
|
|
263
|
+
select: { id: true, location: true, locationDescription: true, harness: true },
|
|
264
|
+
});
|
|
265
|
+
return new Map(leases.map((lease) => [
|
|
266
|
+
lease.id,
|
|
267
|
+
{ location: { kind: locationKindSchema.parse(lease.location), description: lease.locationDescription }, harness: lease.harness },
|
|
268
|
+
]));
|
|
269
|
+
}
|
|
270
|
+
function changeOf(event, read) {
|
|
271
|
+
const { type } = event;
|
|
272
|
+
if (!isDeliveryChangeType(type)) {
|
|
273
|
+
return [];
|
|
274
|
+
}
|
|
275
|
+
const { leaseId, attempts } = event.details;
|
|
276
|
+
const claiming = event.type === 'DeliveryClaimed' && typeof leaseId === 'string' ? read.leases.get(leaseId) : undefined;
|
|
277
|
+
return [
|
|
278
|
+
{
|
|
279
|
+
seq: event.seq,
|
|
280
|
+
type,
|
|
281
|
+
occurredAt: event.occurredAt,
|
|
282
|
+
ship: type === 'MessageAccepted' || event.shipId === undefined ? null : read.party(event.shipId),
|
|
283
|
+
location: claiming?.location ?? null,
|
|
284
|
+
harness: claiming?.harness ?? null,
|
|
285
|
+
attempts: typeof attempts === 'number' ? attempts : null,
|
|
286
|
+
},
|
|
287
|
+
];
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/adapters/prisma/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CallerLookup, ConsoleSessionRepository, CredentialRepository, GuideProgressRepository, NoticeDismissals, OperatorAccountLookup, OperatorAccountRepository, SignInTicketRepository } from '../../domain/identity/ports.js';
|
|
2
|
+
import type { Db } from './client.js';
|
|
3
|
+
export declare function createPrismaCredentialRepository(db: Db): CredentialRepository;
|
|
4
|
+
export declare function createPrismaOperatorAccountLookup(db: Db): OperatorAccountLookup;
|
|
5
|
+
export declare function createPrismaOperatorAccountRepository(db: Db): OperatorAccountRepository;
|
|
6
|
+
export declare function createPrismaSignInTicketRepository(db: Db): SignInTicketRepository;
|
|
7
|
+
export declare function createPrismaConsoleSessionRepository(db: Db): ConsoleSessionRepository;
|
|
8
|
+
export declare function createPrismaCallerLookup(db: Db): CallerLookup;
|
|
9
|
+
export declare function createPrismaNoticeDismissals(db: Db): NoticeDismissals;
|
|
10
|
+
export declare function createPrismaGuideProgress(db: Db): GuideProgressRepository;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { idSchema } from '@aeolus-fleet/common';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { toCrewTokenLease, toConsoleSession, toConsoleSessionCaller, toCredential, toOperatorAccount, } from './rows.js';
|
|
4
|
+
// Lock order, as the CredentialRepository port states: the ship when a use case
|
|
5
|
+
// locks it, then a credential or the operator account, then console sessions,
|
|
6
|
+
// then leases. Sign-in, sign-out, claims, starting prompts and resetting the
|
|
7
|
+
// password all follow it, so they serialise instead of deadlocking.
|
|
8
|
+
/** Sessions keep their idle limit in whole seconds. */
|
|
9
|
+
const MS_PER_SECOND = 1000;
|
|
10
|
+
export function createPrismaCredentialRepository(db) {
|
|
11
|
+
return {
|
|
12
|
+
create: async (credential) => {
|
|
13
|
+
await db.credential.create({ data: credential });
|
|
14
|
+
},
|
|
15
|
+
findValidBySecretHashForUpdate: async (secretHash) => {
|
|
16
|
+
// Not scoped by fleet: a secret carries no fleet (ADR 0007). Locking the
|
|
17
|
+
// credential row makes a concurrent replacement either wait for this
|
|
18
|
+
// transaction, or invalidate the row first: read committed then checks
|
|
19
|
+
// the row again once the lock is free, and finds it no longer valid.
|
|
20
|
+
const [row] = await db.$queryRaw `
|
|
21
|
+
SELECT id, fleet_id, ship_id, secret_hash, issued_at, claimed_at, invalidated_at
|
|
22
|
+
FROM credentials
|
|
23
|
+
WHERE secret_hash = ${secretHash} AND invalidated_at IS NULL
|
|
24
|
+
FOR UPDATE`;
|
|
25
|
+
return row ? toCredential(row) : undefined;
|
|
26
|
+
},
|
|
27
|
+
findValidForShipForUpdate: async (fleetId, shipId) => {
|
|
28
|
+
const [row] = await db.$queryRaw `
|
|
29
|
+
SELECT id, fleet_id, ship_id, secret_hash, issued_at, claimed_at, invalidated_at
|
|
30
|
+
FROM credentials
|
|
31
|
+
WHERE fleet_id = ${fleetId} AND ship_id = ${shipId} AND invalidated_at IS NULL
|
|
32
|
+
FOR UPDATE`;
|
|
33
|
+
return row ? toCredential(row) : undefined;
|
|
34
|
+
},
|
|
35
|
+
markClaimed: async ({ fleetId, credentialId, at }) => {
|
|
36
|
+
await db.credential.updateMany({ where: { fleetId, id: credentialId, claimedAt: null }, data: { claimedAt: at } });
|
|
37
|
+
},
|
|
38
|
+
invalidate: async ({ fleetId, credentialId, at }) => {
|
|
39
|
+
await db.credential.updateMany({
|
|
40
|
+
where: { fleetId, id: credentialId, invalidatedAt: null },
|
|
41
|
+
data: { invalidatedAt: at },
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function createPrismaOperatorAccountLookup(db) {
|
|
47
|
+
return {
|
|
48
|
+
byEmail: async (email) => {
|
|
49
|
+
// Not scoped by fleet: signing in names no fleet (ADR 0007). No lock:
|
|
50
|
+
// a plain read never waits for a sign-in or a reset holding the row.
|
|
51
|
+
const [row] = await db.$queryRaw `
|
|
52
|
+
SELECT id, fleet_id, email, password_hash, theme::text AS theme, created_at FROM operators
|
|
53
|
+
WHERE email = ${email}`;
|
|
54
|
+
return row ? toOperatorAccount(row) : undefined;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function createPrismaOperatorAccountRepository(db) {
|
|
59
|
+
return {
|
|
60
|
+
create: async (account) => {
|
|
61
|
+
await db.operator.create({ data: account });
|
|
62
|
+
},
|
|
63
|
+
lockEmail: async (email) => {
|
|
64
|
+
// A transaction-level advisory lock on the email across the installation,
|
|
65
|
+
// released at commit or rollback, as the ship-name lock is per fleet.
|
|
66
|
+
await db.$executeRaw `SELECT pg_advisory_xact_lock(hashtext('operator-email'), hashtext(${email}))`;
|
|
67
|
+
},
|
|
68
|
+
findByEmailForUpdate: async (email) => {
|
|
69
|
+
// Not scoped by fleet: signing in names no fleet (ADR 0007).
|
|
70
|
+
const [row] = await db.$queryRaw `
|
|
71
|
+
SELECT id, fleet_id, email, password_hash, theme::text AS theme, created_at FROM operators
|
|
72
|
+
WHERE email = ${email}
|
|
73
|
+
FOR UPDATE`;
|
|
74
|
+
return row ? toOperatorAccount(row) : undefined;
|
|
75
|
+
},
|
|
76
|
+
findForFleetForUpdate: async (fleetId) => {
|
|
77
|
+
const [row] = await db.$queryRaw `
|
|
78
|
+
SELECT id, fleet_id, email, password_hash, theme::text AS theme, created_at FROM operators
|
|
79
|
+
WHERE fleet_id = ${fleetId}
|
|
80
|
+
FOR UPDATE`;
|
|
81
|
+
return row ? toOperatorAccount(row) : undefined;
|
|
82
|
+
},
|
|
83
|
+
changePassword: async ({ fleetId, operatorId, passwordHash }) => {
|
|
84
|
+
await db.operator.updateMany({ where: { fleetId, id: operatorId }, data: { passwordHash } });
|
|
85
|
+
},
|
|
86
|
+
findForFleet: async (fleetId) => {
|
|
87
|
+
const [row] = await db.$queryRaw `
|
|
88
|
+
SELECT id, fleet_id, email, password_hash, theme::text AS theme, created_at FROM operators
|
|
89
|
+
WHERE fleet_id = ${fleetId}`;
|
|
90
|
+
return row ? toOperatorAccount(row) : undefined;
|
|
91
|
+
},
|
|
92
|
+
setTheme: async ({ fleetId, operatorId, theme }) => {
|
|
93
|
+
await db.operator.updateMany({ where: { fleetId, id: operatorId }, data: { theme } });
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function createPrismaSignInTicketRepository(db) {
|
|
98
|
+
return {
|
|
99
|
+
create: async ({ as, ...ticket }) => {
|
|
100
|
+
await db.signInTicket.create({ data: { ...ticket, signInAs: as } });
|
|
101
|
+
},
|
|
102
|
+
redeem: async (tokenHash, at) => {
|
|
103
|
+
// One statement marks it used only while unused and unexpired: of redeems racing
|
|
104
|
+
// for one ticket, the row lock lets exactly one see it so. Not scoped by fleet:
|
|
105
|
+
// the ticket names it (ADR 0007).
|
|
106
|
+
const rows = z.array(z.object({ fleet_id: idSchema('fleet'), sign_in_as: z.enum(['operator', 'viewer']) })).parse(await db.$queryRaw `
|
|
107
|
+
UPDATE sign_in_tickets SET used_at = ${at}
|
|
108
|
+
WHERE token_hash = ${tokenHash} AND used_at IS NULL AND expires_at > ${at}
|
|
109
|
+
RETURNING fleet_id, sign_in_as::text AS sign_in_as`);
|
|
110
|
+
const [redeemed] = rows;
|
|
111
|
+
return redeemed && { fleetId: redeemed.fleet_id, as: redeemed.sign_in_as };
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export function createPrismaConsoleSessionRepository(db) {
|
|
116
|
+
return {
|
|
117
|
+
create: async ({ idleLimitMs, ...session }) => {
|
|
118
|
+
await db.consoleSession.create({ data: { ...session, idleLimitSeconds: Math.round(idleLimitMs / MS_PER_SECOND) } });
|
|
119
|
+
},
|
|
120
|
+
find: async (fleetId, consoleSessionId) => {
|
|
121
|
+
const [row] = await db.$queryRaw `
|
|
122
|
+
SELECT id, fleet_id, ship_id, lease_id, idle_limit_seconds, ends_by, device, token_hash, created_at, last_used_at, expires_at, ended_at,
|
|
123
|
+
end_reason::text AS end_reason
|
|
124
|
+
FROM console_sessions
|
|
125
|
+
WHERE fleet_id = ${fleetId} AND id = ${consoleSessionId}`;
|
|
126
|
+
return row ? toConsoleSession(row) : undefined;
|
|
127
|
+
},
|
|
128
|
+
end: async ({ fleetId, consoleSessionId, at, reason }) => {
|
|
129
|
+
const [row] = await db.$queryRaw `
|
|
130
|
+
UPDATE console_sessions SET ended_at = ${at}, end_reason = ${reason}::console_session_end_reason
|
|
131
|
+
WHERE fleet_id = ${fleetId} AND id = ${consoleSessionId} AND ended_at IS NULL
|
|
132
|
+
RETURNING id, fleet_id, ship_id, lease_id, idle_limit_seconds, ends_by, device, token_hash, created_at, last_used_at, expires_at, ended_at,
|
|
133
|
+
end_reason::text AS end_reason`;
|
|
134
|
+
return row ? toConsoleSession(row) : undefined;
|
|
135
|
+
},
|
|
136
|
+
endAll: async ({ fleetId, shipId }, { at, reason }) => {
|
|
137
|
+
const rows = await db.$queryRaw `
|
|
138
|
+
UPDATE console_sessions SET ended_at = ${at}, end_reason = ${reason}::console_session_end_reason
|
|
139
|
+
WHERE fleet_id = ${fleetId} AND ship_id = ${shipId} AND ended_at IS NULL
|
|
140
|
+
RETURNING id, fleet_id, ship_id, lease_id, idle_limit_seconds, ends_by, device, token_hash, created_at, last_used_at, expires_at, ended_at,
|
|
141
|
+
end_reason::text AS end_reason`;
|
|
142
|
+
return rows.map(toConsoleSession);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function createPrismaCallerLookup(db) {
|
|
147
|
+
return {
|
|
148
|
+
byCrewTokenHash: async (crewTokenHash, { at }) => {
|
|
149
|
+
// One statement marks an open lease seen and reads it back. GREATEST
|
|
150
|
+
// keeps two overlapping calls from moving it back.
|
|
151
|
+
const [row] = await db.$queryRaw `
|
|
152
|
+
WITH seen AS (
|
|
153
|
+
UPDATE leases SET last_seen_at = GREATEST(COALESCE(last_seen_at, ${at}), ${at})
|
|
154
|
+
WHERE crew_token_hash = ${crewTokenHash} AND ended_at IS NULL
|
|
155
|
+
)
|
|
156
|
+
SELECT s.id AS ship_id, s.fleet_id, s.kind::text AS kind, s.scopes, l.id AS lease_id,
|
|
157
|
+
l.ended_at IS NULL AS is_open
|
|
158
|
+
FROM leases l
|
|
159
|
+
JOIN ships s ON s.fleet_id = l.fleet_id AND s.id = l.ship_id
|
|
160
|
+
WHERE l.crew_token_hash = ${crewTokenHash} AND s.retired_at IS NULL`;
|
|
161
|
+
return row ? toCrewTokenLease(row) : undefined;
|
|
162
|
+
},
|
|
163
|
+
useConsoleSession: async ({ tokenHash, now }) => {
|
|
164
|
+
// One statement checks the session, moves its expiry to its idle limit
|
|
165
|
+
// after now, never past the moment it ends by, marks argo's lease seen
|
|
166
|
+
// and returns the ship. GREATEST keeps two overlapping requests from
|
|
167
|
+
// moving any date back.
|
|
168
|
+
const [row] = await db.$queryRaw `
|
|
169
|
+
WITH used AS (
|
|
170
|
+
UPDATE console_sessions cs
|
|
171
|
+
SET last_used_at = GREATEST(cs.last_used_at, ${now}),
|
|
172
|
+
expires_at = GREATEST(
|
|
173
|
+
cs.expires_at,
|
|
174
|
+
LEAST(${now}::timestamptz + make_interval(secs => cs.idle_limit_seconds), COALESCE(cs.ends_by, 'infinity'::timestamptz))
|
|
175
|
+
)
|
|
176
|
+
FROM ships s
|
|
177
|
+
WHERE cs.token_hash = ${tokenHash} AND cs.ended_at IS NULL AND cs.expires_at > ${now}
|
|
178
|
+
AND s.fleet_id = cs.fleet_id AND s.id = cs.ship_id
|
|
179
|
+
RETURNING cs.id AS console_session_id, cs.lease_id, cs.expires_at, s.id AS ship_id, s.fleet_id, s.kind::text AS kind, s.scopes
|
|
180
|
+
), seen AS (
|
|
181
|
+
UPDATE leases l SET last_seen_at = GREATEST(COALESCE(l.last_seen_at, ${now}), ${now})
|
|
182
|
+
FROM used WHERE l.id = used.lease_id AND l.ended_at IS NULL
|
|
183
|
+
)
|
|
184
|
+
SELECT * FROM used`;
|
|
185
|
+
return row ? toConsoleSessionCaller(row) : undefined;
|
|
186
|
+
},
|
|
187
|
+
consoleSessionEnding: async (tokenHash) => {
|
|
188
|
+
const session = await db.consoleSession.findUnique({ where: { tokenHash }, select: { endReason: true } });
|
|
189
|
+
return session?.endReason ?? undefined;
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export function createPrismaNoticeDismissals(db) {
|
|
194
|
+
return {
|
|
195
|
+
dismissed: async ({ fleetId, consoleSessionId }) => (await db.noticeDismissal.findMany({ where: { fleetId, consoleSessionId }, select: { noticeId: true } })).map(({ noticeId }) => noticeId),
|
|
196
|
+
dismiss: async ({ fleetId, consoleSessionId, noticeId, at }) => {
|
|
197
|
+
await db.noticeDismissal.createMany({ data: [{ fleetId, consoleSessionId, noticeId, dismissedAt: at }], skipDuplicates: true });
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
export function createPrismaGuideProgress(db) {
|
|
202
|
+
return {
|
|
203
|
+
progress: async ({ fleetId, consoleSessionId }) => await db.guideProgress.findFirst({ where: { fleetId, consoleSessionId }, select: { step: true, state: true } }),
|
|
204
|
+
record: async ({ fleetId, consoleSessionId, step, state, at }) => {
|
|
205
|
+
await db.guideProgress.upsert({
|
|
206
|
+
where: { consoleSessionId },
|
|
207
|
+
create: { fleetId, consoleSessionId, step, state, recordedAt: at },
|
|
208
|
+
update: { step, state, recordedAt: at },
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/adapters/prisma/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { GuideRepository, NoticeRepository } from '../../domain/identity/ports.js';
|
|
2
|
+
import type { FleetLimitReads } from '../../domain/shared/read-fleet-limits.js';
|
|
3
|
+
import type { InstallationFleets, InstallationRequestRepository, InstallationSettingsRepository } from '../../domain/registry/ports.js';
|
|
4
|
+
import type { Db, PrismaClient } from './client.js';
|
|
5
|
+
export declare function createPrismaInstallationRequestRepository(db: Db): InstallationRequestRepository;
|
|
6
|
+
export declare function createPrismaInstallationFleets(prisma: PrismaClient): InstallationFleets;
|
|
7
|
+
export declare function createPrismaInstallationSettings(db: Db): InstallationSettingsRepository;
|
|
8
|
+
/** The installation's guide (decision 0024). Replacing it is one transaction, so a reader sees the old guide or the new one. */
|
|
9
|
+
export declare function createPrismaGuideRepository(prisma: PrismaClient): GuideRepository;
|
|
10
|
+
/** The installation's notices, in its order. Replacing them is one transaction, so a reader sees the old list or the new one. */
|
|
11
|
+
export declare function createPrismaNoticeRepository(prisma: PrismaClient): NoticeRepository;
|
|
12
|
+
/** What a fleet's limits apply to, read outside a unit of work: the limits as a commission or send would apply them, and the counts. */
|
|
13
|
+
export declare function createPrismaFleetLimitReads(prisma: PrismaClient): FleetLimitReads;
|