@aeolus-fleet/gateway 0.0.0-stage → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +105 -2
- package/dist/adapters/crypto/call-keys.d.ts +7 -0
- package/dist/adapters/crypto/call-keys.js +18 -0
- package/dist/adapters/crypto/call-keys.js.map +1 -0
- package/dist/adapters/crypto/oauth-secrets.d.ts +3 -0
- package/dist/adapters/crypto/oauth-secrets.js +10 -0
- package/dist/adapters/crypto/oauth-secrets.js.map +1 -0
- package/dist/adapters/crypto/page-sessions.d.ts +15 -0
- package/dist/adapters/crypto/page-sessions.js +40 -0
- package/dist/adapters/crypto/page-sessions.js.map +1 -0
- package/dist/adapters/crypto/request-hasher.d.ts +3 -0
- package/dist/adapters/crypto/request-hasher.js +4 -0
- package/dist/adapters/crypto/request-hasher.js.map +1 -0
- package/dist/adapters/crypto/request-ids.d.ts +4 -0
- package/dist/adapters/crypto/request-ids.js +7 -0
- package/dist/adapters/crypto/request-ids.js.map +1 -0
- package/dist/adapters/crypto/sealer.d.ts +14 -0
- package/dist/adapters/crypto/sealer.js +41 -0
- package/dist/adapters/crypto/sealer.js.map +1 -0
- package/dist/adapters/crypto/ship-aliases.d.ts +7 -0
- package/dist/adapters/crypto/ship-aliases.js +19 -0
- package/dist/adapters/crypto/ship-aliases.js.map +1 -0
- package/dist/adapters/crypto/sign-in-seals.d.ts +7 -0
- package/dist/adapters/crypto/sign-in-seals.js +25 -0
- package/dist/adapters/crypto/sign-in-seals.js.map +1 -0
- package/dist/adapters/crypto/waiting-seals.d.ts +3 -0
- package/dist/adapters/crypto/waiting-seals.js +24 -0
- package/dist/adapters/crypto/waiting-seals.js.map +1 -0
- package/dist/adapters/fleet/actor-door.d.ts +20 -0
- package/dist/adapters/fleet/actor-door.js +75 -0
- package/dist/adapters/fleet/actor-door.js.map +1 -0
- package/dist/adapters/fleet/console-sessions.d.ts +2 -0
- package/dist/adapters/fleet/console-sessions.js +23 -0
- package/dist/adapters/fleet/console-sessions.js.map +1 -0
- package/dist/adapters/fleet/core-version.d.ts +11 -0
- package/dist/adapters/fleet/core-version.js +18 -0
- package/dist/adapters/fleet/core-version.js.map +1 -0
- package/dist/adapters/fleet/fleet-network.d.ts +2 -0
- package/dist/adapters/fleet/fleet-network.js +34 -0
- package/dist/adapters/fleet/fleet-network.js.map +1 -0
- package/dist/adapters/fleet/logged-verified-facts.d.ts +13 -0
- package/dist/adapters/fleet/logged-verified-facts.js +18 -0
- package/dist/adapters/fleet/logged-verified-facts.js.map +1 -0
- package/dist/adapters/fleet/proxy-ship-reads.d.ts +7 -0
- package/dist/adapters/fleet/proxy-ship-reads.js +24 -0
- package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -0
- package/dist/adapters/fleet/proxy-ships-as-actor.d.ts +3 -0
- package/dist/adapters/fleet/proxy-ships-as-actor.js +25 -0
- package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -0
- package/dist/adapters/fleet/rest-fleet-door.d.ts +14 -0
- package/dist/adapters/fleet/rest-fleet-door.js +205 -0
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -0
- package/dist/adapters/http/add-server-page.d.ts +7 -0
- package/dist/adapters/http/add-server-page.js +175 -0
- package/dist/adapters/http/add-server-page.js.map +1 -0
- package/dist/adapters/http/delivery-page.d.ts +24 -0
- package/dist/adapters/http/delivery-page.js +115 -0
- package/dist/adapters/http/delivery-page.js.map +1 -0
- package/dist/adapters/http/html.d.ts +15 -0
- package/dist/adapters/http/html.js +53 -0
- package/dist/adapters/http/html.js.map +1 -0
- package/dist/adapters/http/live.d.ts +29 -0
- package/dist/adapters/http/live.js +100 -0
- package/dist/adapters/http/live.js.map +1 -0
- package/dist/adapters/http/mcp-endpoint.d.ts +20 -0
- package/dist/adapters/http/mcp-endpoint.js +164 -0
- package/dist/adapters/http/mcp-endpoint.js.map +1 -0
- package/dist/adapters/http/mcp-task.d.ts +45 -0
- package/dist/adapters/http/mcp-task.js +35 -0
- package/dist/adapters/http/mcp-task.js.map +1 -0
- package/dist/adapters/http/oauth-routes.d.ts +47 -0
- package/dist/adapters/http/oauth-routes.js +337 -0
- package/dist/adapters/http/oauth-routes.js.map +1 -0
- package/dist/adapters/http/outside-parties-page.d.ts +33 -0
- package/dist/adapters/http/outside-parties-page.js +153 -0
- package/dist/adapters/http/outside-parties-page.js.map +1 -0
- package/dist/adapters/http/outside-party-page.d.ts +7 -0
- package/dist/adapters/http/outside-party-page.js +212 -0
- package/dist/adapters/http/outside-party-page.js.map +1 -0
- package/dist/adapters/http/overview-page.d.ts +17 -0
- package/dist/adapters/http/overview-page.js +298 -0
- package/dist/adapters/http/overview-page.js.map +1 -0
- package/dist/adapters/http/parties-page.d.ts +7 -0
- package/dist/adapters/http/parties-page.js +139 -0
- package/dist/adapters/http/parties-page.js.map +1 -0
- package/dist/adapters/http/person-tools.d.ts +22 -0
- package/dist/adapters/http/person-tools.js +98 -0
- package/dist/adapters/http/person-tools.js.map +1 -0
- package/dist/adapters/http/scope-rows.d.ts +10 -0
- package/dist/adapters/http/scope-rows.js +30 -0
- package/dist/adapters/http/scope-rows.js.map +1 -0
- package/dist/adapters/http/signal.d.ts +61 -0
- package/dist/adapters/http/signal.js +263 -0
- package/dist/adapters/http/signal.js.map +1 -0
- package/dist/adapters/http/version.d.ts +6 -0
- package/dist/adapters/http/version.js +12 -0
- package/dist/adapters/http/version.js.map +1 -0
- package/dist/adapters/mcp/mcp-servers.d.ts +2 -0
- package/dist/adapters/mcp/mcp-servers.js +154 -0
- package/dist/adapters/mcp/mcp-servers.js.map +1 -0
- package/dist/adapters/oauth/client-metadata-documents.d.ts +9 -0
- package/dist/adapters/oauth/client-metadata-documents.js +25 -0
- package/dist/adapters/oauth/client-metadata-documents.js.map +1 -0
- package/dist/adapters/pagasae/pagasae-client.d.ts +8 -0
- package/dist/adapters/pagasae/pagasae-client.js +88 -0
- package/dist/adapters/pagasae/pagasae-client.js.map +1 -0
- package/dist/adapters/prisma/account-grants.d.ts +4 -0
- package/dist/adapters/prisma/account-grants.js +27 -0
- package/dist/adapters/prisma/account-grants.js.map +1 -0
- package/dist/adapters/prisma/calls.d.ts +4 -0
- package/dist/adapters/prisma/calls.js +35 -0
- package/dist/adapters/prisma/calls.js.map +1 -0
- package/dist/adapters/prisma/changes.d.ts +21 -0
- package/dist/adapters/prisma/changes.js +86 -0
- package/dist/adapters/prisma/changes.js.map +1 -0
- package/dist/adapters/prisma/client-calls.d.ts +4 -0
- package/dist/adapters/prisma/client-calls.js +59 -0
- package/dist/adapters/prisma/client-calls.js.map +1 -0
- package/dist/adapters/prisma/client.d.ts +8 -0
- package/dist/adapters/prisma/client.js +11 -0
- package/dist/adapters/prisma/client.js.map +1 -0
- package/dist/adapters/prisma/connection-store.d.ts +4 -0
- package/dist/adapters/prisma/connection-store.js +28 -0
- package/dist/adapters/prisma/connection-store.js.map +1 -0
- package/dist/adapters/prisma/fleet-forgetter.d.ts +4 -0
- package/dist/adapters/prisma/fleet-forgetter.js +10 -0
- package/dist/adapters/prisma/fleet-forgetter.js.map +1 -0
- package/dist/adapters/prisma/fleet-switches.d.ts +4 -0
- package/dist/adapters/prisma/fleet-switches.js +10 -0
- package/dist/adapters/prisma/fleet-switches.js.map +1 -0
- package/dist/adapters/prisma/generated/browser.d.ts +108 -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 +127 -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 +490 -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 +1 -0
- package/dist/adapters/prisma/generated/enums.js +12 -0
- package/dist/adapters/prisma/generated/enums.js.map +1 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +319 -0
- package/dist/adapters/prisma/generated/internal/class.js +50 -0
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2102 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +294 -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 +264 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +1088 -0
- package/dist/adapters/prisma/generated/models/AccountGrant.js +2 -0
- package/dist/adapters/prisma/generated/models/AccountGrant.js.map +1 -0
- package/dist/adapters/prisma/generated/models/AuthorizationCode.d.ts +1171 -0
- package/dist/adapters/prisma/generated/models/AuthorizationCode.js +2 -0
- package/dist/adapters/prisma/generated/models/AuthorizationCode.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Call.d.ts +994 -0
- package/dist/adapters/prisma/generated/models/Call.js +2 -0
- package/dist/adapters/prisma/generated/models/Call.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ClientCall.d.ts +1119 -0
- package/dist/adapters/prisma/generated/models/ClientCall.js +2 -0
- package/dist/adapters/prisma/generated/models/ClientCall.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +1129 -0
- package/dist/adapters/prisma/generated/models/ClientCallReply.js +2 -0
- package/dist/adapters/prisma/generated/models/ClientCallReply.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Connection.d.ts +1011 -0
- package/dist/adapters/prisma/generated/models/Connection.js +2 -0
- package/dist/adapters/prisma/generated/models/Connection.js.map +1 -0
- package/dist/adapters/prisma/generated/models/FleetSwitch.d.ts +945 -0
- package/dist/adapters/prisma/generated/models/FleetSwitch.js +2 -0
- package/dist/adapters/prisma/generated/models/FleetSwitch.js.map +1 -0
- package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1030 -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/IssuedToken.d.ts +1224 -0
- package/dist/adapters/prisma/generated/models/IssuedToken.js +2 -0
- package/dist/adapters/prisma/generated/models/IssuedToken.js.map +1 -0
- package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +1005 -0
- package/dist/adapters/prisma/generated/models/OAuthClient.js +2 -0
- package/dist/adapters/prisma/generated/models/OAuthClient.js.map +1 -0
- package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +1087 -0
- package/dist/adapters/prisma/generated/models/OpenedDelivery.js +2 -0
- package/dist/adapters/prisma/generated/models/OpenedDelivery.js.map +1 -0
- package/dist/adapters/prisma/generated/models/OutsidePartySwitch.d.ts +942 -0
- package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js +2 -0
- package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js.map +1 -0
- package/dist/adapters/prisma/generated/models/OwnerQuestion.d.ts +1035 -0
- package/dist/adapters/prisma/generated/models/OwnerQuestion.js +2 -0
- package/dist/adapters/prisma/generated/models/OwnerQuestion.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Party.d.ts +1310 -0
- package/dist/adapters/prisma/generated/models/Party.js +2 -0
- package/dist/adapters/prisma/generated/models/Party.js.map +1 -0
- package/dist/adapters/prisma/generated/models/PendingRequest.d.ts +1252 -0
- package/dist/adapters/prisma/generated/models/PendingRequest.js +2 -0
- package/dist/adapters/prisma/generated/models/PendingRequest.js.map +1 -0
- package/dist/adapters/prisma/generated/models/PersonCrew.d.ts +974 -0
- package/dist/adapters/prisma/generated/models/PersonCrew.js +2 -0
- package/dist/adapters/prisma/generated/models/PersonCrew.js.map +1 -0
- package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.d.ts +1120 -0
- package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js +2 -0
- package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js.map +1 -0
- package/dist/adapters/prisma/generated/models/ToolMark.d.ts +947 -0
- package/dist/adapters/prisma/generated/models/ToolMark.js +2 -0
- package/dist/adapters/prisma/generated/models/ToolMark.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +19 -0
- package/dist/adapters/prisma/generated/models.js +2 -0
- package/dist/adapters/prisma/generated/models.js.map +1 -0
- package/dist/adapters/prisma/installation-requests.d.ts +4 -0
- package/dist/adapters/prisma/installation-requests.js +25 -0
- package/dist/adapters/prisma/installation-requests.js.map +1 -0
- package/dist/adapters/prisma/migrate.d.ts +5 -0
- package/dist/adapters/prisma/migrate.js +53 -0
- package/dist/adapters/prisma/migrate.js.map +1 -0
- package/dist/adapters/prisma/oauth-stores.d.ts +5 -0
- package/dist/adapters/prisma/oauth-stores.js +85 -0
- package/dist/adapters/prisma/oauth-stores.js.map +1 -0
- package/dist/adapters/prisma/opened-deliveries.d.ts +4 -0
- package/dist/adapters/prisma/opened-deliveries.js +29 -0
- package/dist/adapters/prisma/opened-deliveries.js.map +1 -0
- package/dist/adapters/prisma/outcome-notices.d.ts +4 -0
- package/dist/adapters/prisma/outcome-notices.js +24 -0
- package/dist/adapters/prisma/outcome-notices.js.map +1 -0
- package/dist/adapters/prisma/outside-party-switches.d.ts +4 -0
- package/dist/adapters/prisma/outside-party-switches.js +10 -0
- package/dist/adapters/prisma/outside-party-switches.js.map +1 -0
- package/dist/adapters/prisma/owner-questions.d.ts +8 -0
- package/dist/adapters/prisma/owner-questions.js +54 -0
- package/dist/adapters/prisma/owner-questions.js.map +1 -0
- package/dist/adapters/prisma/party-store.d.ts +7 -0
- package/dist/adapters/prisma/party-store.js +71 -0
- package/dist/adapters/prisma/party-store.js.map +1 -0
- package/dist/adapters/prisma/pending-requests.d.ts +11 -0
- package/dist/adapters/prisma/pending-requests.js +128 -0
- package/dist/adapters/prisma/pending-requests.js.map +1 -0
- package/dist/adapters/prisma/person-crews.d.ts +4 -0
- package/dist/adapters/prisma/person-crews.js +18 -0
- package/dist/adapters/prisma/person-crews.js.map +1 -0
- package/dist/adapters/prisma/tool-marks.d.ts +4 -0
- package/dist/adapters/prisma/tool-marks.js +15 -0
- package/dist/adapters/prisma/tool-marks.js.map +1 -0
- package/dist/adapters/timers/sleep.d.ts +3 -0
- package/dist/adapters/timers/sleep.js +11 -0
- package/dist/adapters/timers/sleep.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +606 -0
- package/dist/adapters/trpc/router.js +519 -0
- package/dist/adapters/trpc/router.js.map +1 -0
- package/dist/app.d.ts +43 -0
- package/dist/app.js +446 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/aeolus-gateway.d.ts +2 -0
- package/dist/bin/aeolus-gateway.js +65 -0
- package/dist/bin/aeolus-gateway.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.js +65 -0
- package/dist/config.js.map +1 -0
- package/dist/core/actors/authenticate-actor.d.ts +54 -0
- package/dist/core/actors/authenticate-actor.js +42 -0
- package/dist/core/actors/authenticate-actor.js.map +1 -0
- package/dist/core/actors/credential-of.d.ts +27 -0
- package/dist/core/actors/credential-of.js +25 -0
- package/dist/core/actors/credential-of.js.map +1 -0
- package/dist/core/connection/connect.d.ts +26 -0
- package/dist/core/connection/connect.js +58 -0
- package/dist/core/connection/connect.js.map +1 -0
- package/dist/core/connection/ports.d.ts +92 -0
- package/dist/core/connection/ports.js +2 -0
- package/dist/core/connection/ports.js.map +1 -0
- package/dist/core/connection/read-connection.d.ts +14 -0
- package/dist/core/connection/read-connection.js +24 -0
- package/dist/core/connection/read-connection.js.map +1 -0
- package/dist/core/installation/delete-fleet.d.ts +21 -0
- package/dist/core/installation/delete-fleet.js +21 -0
- package/dist/core/installation/delete-fleet.js.map +1 -0
- package/dist/core/installation/ports.d.ts +43 -0
- package/dist/core/installation/ports.js +2 -0
- package/dist/core/installation/ports.js.map +1 -0
- package/dist/core/installation/read-fleet.d.ts +18 -0
- package/dist/core/installation/read-fleet.js +9 -0
- package/dist/core/installation/read-fleet.js.map +1 -0
- package/dist/core/installation/request-id.d.ts +8 -0
- package/dist/core/installation/request-id.js +10 -0
- package/dist/core/installation/request-id.js.map +1 -0
- package/dist/core/installation/served.d.ts +12 -0
- package/dist/core/installation/served.js +8 -0
- package/dist/core/installation/served.js.map +1 -0
- package/dist/core/installation/set-fleet-enabled.d.ts +25 -0
- package/dist/core/installation/set-fleet-enabled.js +22 -0
- package/dist/core/installation/set-fleet-enabled.js.map +1 -0
- package/dist/core/mcp-in/call-tool.d.ts +42 -0
- package/dist/core/mcp-in/call-tool.js +82 -0
- package/dist/core/mcp-in/call-tool.js.map +1 -0
- package/dist/core/mcp-in/client-call.d.ts +51 -0
- package/dist/core/mcp-in/client-call.js +39 -0
- package/dist/core/mcp-in/client-call.js.map +1 -0
- package/dist/core/mcp-in/collect-replies.d.ts +22 -0
- package/dist/core/mcp-in/collect-replies.js +66 -0
- package/dist/core/mcp-in/collect-replies.js.map +1 -0
- package/dist/core/mcp-in/list-tools.d.ts +48 -0
- package/dist/core/mcp-in/list-tools.js +70 -0
- package/dist/core/mcp-in/list-tools.js.map +1 -0
- package/dist/core/mcp-in/ports.d.ts +108 -0
- package/dist/core/mcp-in/ports.js +2 -0
- package/dist/core/mcp-in/ports.js.map +1 -0
- package/dist/core/mcp-in/read-client-call.d.ts +23 -0
- package/dist/core/mcp-in/read-client-call.js +15 -0
- package/dist/core/mcp-in/read-client-call.js.map +1 -0
- package/dist/core/mcp-out/content-types.d.ts +12 -0
- package/dist/core/mcp-out/content-types.js +28 -0
- package/dist/core/mcp-out/content-types.js.map +1 -0
- package/dist/core/mcp-out/hand-call.d.ts +105 -0
- package/dist/core/mcp-out/hand-call.js +118 -0
- package/dist/core/mcp-out/hand-call.js.map +1 -0
- package/dist/core/mcp-out/mark-tool.d.ts +20 -0
- package/dist/core/mcp-out/mark-tool.js +17 -0
- package/dist/core/mcp-out/mark-tool.js.map +1 -0
- package/dist/core/mcp-out/ports.d.ts +66 -0
- package/dist/core/mcp-out/ports.js +2 -0
- package/dist/core/mcp-out/ports.js.map +1 -0
- package/dist/core/mcp-out/run-party.d.ts +26 -0
- package/dist/core/mcp-out/run-party.js +62 -0
- package/dist/core/mcp-out/run-party.js.map +1 -0
- package/dist/core/mcp-out/state-party.d.ts +39 -0
- package/dist/core/mcp-out/state-party.js +30 -0
- package/dist/core/mcp-out/state-party.js.map +1 -0
- package/dist/core/mcp-out/statement.d.ts +36 -0
- package/dist/core/mcp-out/statement.js +34 -0
- package/dist/core/mcp-out/statement.js.map +1 -0
- package/dist/core/oauth/authenticate-access-token.d.ts +25 -0
- package/dist/core/oauth/authenticate-access-token.js +19 -0
- package/dist/core/oauth/authenticate-access-token.js.map +1 -0
- package/dist/core/oauth/exchange-token.d.ts +32 -0
- package/dist/core/oauth/exchange-token.js +98 -0
- package/dist/core/oauth/exchange-token.js.map +1 -0
- package/dist/core/oauth/issue-code.d.ts +23 -0
- package/dist/core/oauth/issue-code.js +34 -0
- package/dist/core/oauth/issue-code.js.map +1 -0
- package/dist/core/oauth/ports.d.ts +105 -0
- package/dist/core/oauth/ports.js +2 -0
- package/dist/core/oauth/ports.js.map +1 -0
- package/dist/core/oauth/read-authorization.d.ts +43 -0
- package/dist/core/oauth/read-authorization.js +74 -0
- package/dist/core/oauth/read-authorization.js.map +1 -0
- package/dist/core/oauth/redirect-uri.d.ts +6 -0
- package/dist/core/oauth/redirect-uri.js +20 -0
- package/dist/core/oauth/redirect-uri.js.map +1 -0
- package/dist/core/oauth/register-client.d.ts +22 -0
- package/dist/core/oauth/register-client.js +20 -0
- package/dist/core/oauth/register-client.js.map +1 -0
- package/dist/core/operator/authenticate-operator.d.ts +22 -0
- package/dist/core/operator/authenticate-operator.js +26 -0
- package/dist/core/operator/authenticate-operator.js.map +1 -0
- package/dist/core/operator/ports.d.ts +15 -0
- package/dist/core/operator/ports.js +2 -0
- package/dist/core/operator/ports.js.map +1 -0
- package/dist/core/outside-parties/ports.d.ts +17 -0
- package/dist/core/outside-parties/ports.js +2 -0
- package/dist/core/outside-parties/ports.js.map +1 -0
- package/dist/core/outside-parties/set-outside-parties.d.ts +36 -0
- package/dist/core/outside-parties/set-outside-parties.js +38 -0
- package/dist/core/outside-parties/set-outside-parties.js.map +1 -0
- package/dist/core/parties/approve-party.d.ts +55 -0
- package/dist/core/parties/approve-party.js +127 -0
- package/dist/core/parties/approve-party.js.map +1 -0
- package/dist/core/parties/change-party.d.ts +42 -0
- package/dist/core/parties/change-party.js +49 -0
- package/dist/core/parties/change-party.js.map +1 -0
- package/dist/core/parties/check-server.d.ts +24 -0
- package/dist/core/parties/check-server.js +21 -0
- package/dist/core/parties/check-server.js.map +1 -0
- package/dist/core/parties/crew-party.d.ts +21 -0
- package/dist/core/parties/crew-party.js +29 -0
- package/dist/core/parties/crew-party.js.map +1 -0
- package/dist/core/parties/list-parties.d.ts +29 -0
- package/dist/core/parties/list-parties.js +39 -0
- package/dist/core/parties/list-parties.js.map +1 -0
- package/dist/core/parties/party.d.ts +52 -0
- package/dist/core/parties/party.js +24 -0
- package/dist/core/parties/party.js.map +1 -0
- package/dist/core/parties/ports.d.ts +74 -0
- package/dist/core/parties/ports.js +2 -0
- package/dist/core/parties/ports.js.map +1 -0
- package/dist/core/parties/read-party-tools.d.ts +22 -0
- package/dist/core/parties/read-party-tools.js +22 -0
- package/dist/core/parties/read-party-tools.js.map +1 -0
- package/dist/core/parties/retire-party.d.ts +29 -0
- package/dist/core/parties/retire-party.js +43 -0
- package/dist/core/parties/retire-party.js.map +1 -0
- package/dist/core/parties/shown-party.d.ts +27 -0
- package/dist/core/parties/shown-party.js +10 -0
- package/dist/core/parties/shown-party.js.map +1 -0
- package/dist/core/people/answer-delivery.d.ts +24 -0
- package/dist/core/people/answer-delivery.js +28 -0
- package/dist/core/people/answer-delivery.js.map +1 -0
- package/dist/core/people/crew-person-ship.d.ts +42 -0
- package/dist/core/people/crew-person-ship.js +59 -0
- package/dist/core/people/crew-person-ship.js.map +1 -0
- package/dist/core/people/done-delivery.d.ts +16 -0
- package/dist/core/people/done-delivery.js +9 -0
- package/dist/core/people/done-delivery.js.map +1 -0
- package/dist/core/people/inbox-entry.d.ts +14 -0
- package/dist/core/people/inbox-entry.js +11 -0
- package/dist/core/people/inbox-entry.js.map +1 -0
- package/dist/core/people/open-delivery.d.ts +30 -0
- package/dist/core/people/open-delivery.js +40 -0
- package/dist/core/people/open-delivery.js.map +1 -0
- package/dist/core/people/opened-of.d.ts +29 -0
- package/dist/core/people/opened-of.js +30 -0
- package/dist/core/people/opened-of.js.map +1 -0
- package/dist/core/people/person-crew.d.ts +39 -0
- package/dist/core/people/person-crew.js +61 -0
- package/dist/core/people/person-crew.js.map +1 -0
- package/dist/core/people/ports.d.ts +102 -0
- package/dist/core/people/ports.js +2 -0
- package/dist/core/people/ports.js.map +1 -0
- package/dist/core/people/read-inbox.d.ts +37 -0
- package/dist/core/people/read-inbox.js +36 -0
- package/dist/core/people/read-inbox.js.map +1 -0
- package/dist/core/requests/ask-for-client.d.ts +45 -0
- package/dist/core/requests/ask-for-client.js +33 -0
- package/dist/core/requests/ask-for-client.js.map +1 -0
- package/dist/core/requests/ask-for-server.d.ts +32 -0
- package/dist/core/requests/ask-for-server.js +42 -0
- package/dist/core/requests/ask-for-server.js.map +1 -0
- package/dist/core/requests/ask-owners.d.ts +28 -0
- package/dist/core/requests/ask-owners.js +85 -0
- package/dist/core/requests/ask-owners.js.map +1 -0
- package/dist/core/requests/decide-request.d.ts +53 -0
- package/dist/core/requests/decide-request.js +83 -0
- package/dist/core/requests/decide-request.js.map +1 -0
- package/dist/core/requests/expire-requests.d.ts +14 -0
- package/dist/core/requests/expire-requests.js +21 -0
- package/dist/core/requests/expire-requests.js.map +1 -0
- package/dist/core/requests/list-mine.d.ts +16 -0
- package/dist/core/requests/list-mine.js +20 -0
- package/dist/core/requests/list-mine.js.map +1 -0
- package/dist/core/requests/list-to-decide.d.ts +11 -0
- package/dist/core/requests/list-to-decide.js +13 -0
- package/dist/core/requests/list-to-decide.js.map +1 -0
- package/dist/core/requests/open-request.d.ts +21 -0
- package/dist/core/requests/open-request.js +26 -0
- package/dist/core/requests/open-request.js.map +1 -0
- package/dist/core/requests/outcome-notice.d.ts +13 -0
- package/dist/core/requests/outcome-notice.js +26 -0
- package/dist/core/requests/outcome-notice.js.map +1 -0
- package/dist/core/requests/ports.d.ts +191 -0
- package/dist/core/requests/ports.js +2 -0
- package/dist/core/requests/ports.js.map +1 -0
- package/dist/core/requests/read-waiting.d.ts +46 -0
- package/dist/core/requests/read-waiting.js +41 -0
- package/dist/core/requests/read-waiting.js.map +1 -0
- package/dist/core/requests/request-state.d.ts +5 -0
- package/dist/core/requests/request-state.js +10 -0
- package/dist/core/requests/request-state.js.map +1 -0
- package/dist/core/requests/tell-outcomes.d.ts +24 -0
- package/dist/core/requests/tell-outcomes.js +39 -0
- package/dist/core/requests/tell-outcomes.js.map +1 -0
- package/dist/core/requests/watch-waiting.d.ts +32 -0
- package/dist/core/requests/watch-waiting.js +31 -0
- package/dist/core/requests/watch-waiting.js.map +1 -0
- package/dist/core/shared/clock.d.ts +4 -0
- package/dist/core/shared/clock.js +2 -0
- package/dist/core/shared/clock.js.map +1 -0
- package/dist/core/shared/errors.d.ts +10 -0
- package/dist/core/shared/errors.js +6 -0
- package/dist/core/shared/errors.js.map +1 -0
- package/dist/core/shared/result.d.ts +16 -0
- package/dist/core/shared/result.js +7 -0
- package/dist/core/shared/result.js.map +1 -0
- package/dist/core/sign-in/account-token.d.ts +42 -0
- package/dist/core/sign-in/account-token.js +46 -0
- package/dist/core/sign-in/account-token.js.map +1 -0
- package/dist/core/sign-in/complete-sign-in.d.ts +66 -0
- package/dist/core/sign-in/complete-sign-in.js +73 -0
- package/dist/core/sign-in/complete-sign-in.js.map +1 -0
- package/dist/core/sign-in/end-sign-ins.d.ts +19 -0
- package/dist/core/sign-in/end-sign-ins.js +17 -0
- package/dist/core/sign-in/end-sign-ins.js.map +1 -0
- package/dist/core/sign-in/ports.d.ts +115 -0
- package/dist/core/sign-in/ports.js +2 -0
- package/dist/core/sign-in/ports.js.map +1 -0
- package/dist/core/sign-in/sign-out.d.ts +10 -0
- package/dist/core/sign-in/sign-out.js +9 -0
- package/dist/core/sign-in/sign-out.js.map +1 -0
- package/dist/core/sign-in/start-page-sign-in.d.ts +25 -0
- package/dist/core/sign-in/start-page-sign-in.js +30 -0
- package/dist/core/sign-in/start-page-sign-in.js.map +1 -0
- package/dist/core/sign-in/start-sign-in.d.ts +30 -0
- package/dist/core/sign-in/start-sign-in.js +25 -0
- package/dist/core/sign-in/start-sign-in.js.map +1 -0
- package/dist/core/vault/credential.d.ts +18 -0
- package/dist/core/vault/credential.js +2 -0
- package/dist/core/vault/credential.js.map +1 -0
- package/dist/outcome-worker.d.ts +29 -0
- package/dist/outcome-worker.js +60 -0
- package/dist/outcome-worker.js.map +1 -0
- package/dist/party-workers.d.ts +32 -0
- package/dist/party-workers.js +57 -0
- package/dist/party-workers.js.map +1 -0
- package/package.json +70 -4
- package/prisma.config.ts +18 -0
- package/src/adapters/prisma/migrations/20261018200000_init/migration.sql +35 -0
- package/src/adapters/prisma/migrations/20261018210000_parties/migration.sql +19 -0
- package/src/adapters/prisma/migrations/20261018220000_tool_marks/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261018230000_calls/migration.sql +13 -0
- package/src/adapters/prisma/migrations/20261019090000_oauth/migration.sql +60 -0
- package/src/adapters/prisma/migrations/20261019100000_client_parties/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261019110000_oauth_parties/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261019120000_client_calls/migration.sql +15 -0
- package/src/adapters/prisma/migrations/20261019130000_client_call_replies/migration.sql +20 -0
- package/src/adapters/prisma/migrations/20261019140000_identity_providers/migration.sql +10 -0
- package/src/adapters/prisma/migrations/20261020090000_no_identity_providers/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261020100000_account_grants_in_tokens/migration.sql +5 -0
- package/src/adapters/prisma/migrations/20261020110000_account_grants/migration.sql +15 -0
- package/src/adapters/prisma/migrations/20261020120000_person_crews/migration.sql +9 -0
- package/src/adapters/prisma/migrations/20261020130000_opened_deliveries/migration.sql +13 -0
- package/src/adapters/prisma/migrations/20261020140000_pending_requests/migration.sql +26 -0
- package/src/adapters/prisma/migrations/20261020150000_outside_party_switches/migration.sql +8 -0
- package/src/adapters/prisma/migrations/20261020160000_pending_requests_told/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261020170000_request_outcome_notices/migration.sql +17 -0
- package/src/adapters/prisma/migrations/20261020180000_owner_questions/migration.sql +11 -0
- package/src/adapters/prisma/migrations/20261020190000_request_changes/migration.sql +12 -0
- package/src/adapters/prisma/migrations/20261020200000_account_grant_scopes/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261020210000_party_owner_from_fleet/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261020220000_client_call_deadline_optional/migration.sql +2 -0
- package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
- package/src/adapters/prisma/schema.prisma +312 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { handledOf, openedOf } from './opened-of.js';
|
|
3
|
+
import { asPersonCrew, withOwnRefusal } from './person-crew.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: a person answers a delivery they opened (Q20): a reply to its
|
|
6
|
+
* sender, in reply to its message, then it is handled. The reply's key is
|
|
7
|
+
* the delivery's, so an answer tried again after the fleet did not take
|
|
8
|
+
* handled is sent once.
|
|
9
|
+
*/
|
|
10
|
+
export function createAnswerDelivery(deps) {
|
|
11
|
+
return async ({ caller, deliveryId, contentType, payload }) => {
|
|
12
|
+
const opened = await openedOf(deps, { caller, deliveryId });
|
|
13
|
+
if (!opened.isOk) {
|
|
14
|
+
return opened;
|
|
15
|
+
}
|
|
16
|
+
const delivery = opened.value;
|
|
17
|
+
const reply = { to: delivery.senderShipId, inReplyTo: delivery.messageId, contentType, payload, idempotencyKey: `answer-${delivery.deliveryId}` };
|
|
18
|
+
const sent = await asPersonCrew(deps, { caller, run: (crew) => withOwnRefusal(deps.door.reply(crew.crewToken, reply)) });
|
|
19
|
+
if (!sent.isOk) {
|
|
20
|
+
return sent;
|
|
21
|
+
}
|
|
22
|
+
if (!sent.value.value.isOk) {
|
|
23
|
+
return refuse('SEND_REFUSED', `The fleet did not take your answer: ${sent.value.value.error.message}`);
|
|
24
|
+
}
|
|
25
|
+
return handledOf(deps, { caller, delivery });
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=answer-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-delivery.js","sourceRoot":"","sources":["../../../src/core/people/answer-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA+B,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAKnF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA4G;IAC/I,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;QAClJ,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACzH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,cAAc,EAAE,uCAAuC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { ConnectionStore, FleetDoor } from '../connection/ports.js';
|
|
3
|
+
import type { Clock } from '../shared/clock.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { AccountTokenOf, AccountTokenRefusal } from '../sign-in/account-token.js';
|
|
6
|
+
import type { AccountDoor, PersonCrews } from './ports.js';
|
|
7
|
+
/**
|
|
8
|
+
* Why the gateway has no crew for the person's ship, beside why it has no account token:
|
|
9
|
+
* - noPersonShip: the account has none in the fleet, as it may not message there (decision 0052);
|
|
10
|
+
* - notConnected: the gateway holds no crew token for its own ship in the fleet;
|
|
11
|
+
* - fleetRefused: the fleet refused a call, for the reason given.
|
|
12
|
+
*/
|
|
13
|
+
export type CrewPersonShipRefusal = AccountTokenRefusal | {
|
|
14
|
+
readonly kind: 'noPersonShip';
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'notConnected';
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'fleetRefused';
|
|
19
|
+
readonly message: string;
|
|
20
|
+
};
|
|
21
|
+
export type CrewPersonShip = (grant: {
|
|
22
|
+
fleetId: FleetId;
|
|
23
|
+
grantId: string;
|
|
24
|
+
}) => Promise<Result<{
|
|
25
|
+
shipId: ShipId;
|
|
26
|
+
crewToken: string;
|
|
27
|
+
}, CrewPersonShipRefusal>>;
|
|
28
|
+
/**
|
|
29
|
+
* Use case: the crew of a signed-in person's person ship (decisions 0054,
|
|
30
|
+
* 0057). The gateway crews it once and every client of the person shares
|
|
31
|
+
* that crew, as a ship has one crew at a time (decision 0010). To crew it,
|
|
32
|
+
* the gateway acts as the account, with its token beside the gateway's crew
|
|
33
|
+
* token: it gets the ship's starting prompt, releasing the ship first when a
|
|
34
|
+
* crew the gateway does not hold has it, and registers with its secret.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createCrewPersonShip(deps: {
|
|
37
|
+
accountTokenOf: AccountTokenOf;
|
|
38
|
+
connections: ConnectionStore;
|
|
39
|
+
door: AccountDoor & Pick<FleetDoor, 'register'>;
|
|
40
|
+
crews: PersonCrews;
|
|
41
|
+
clock: Clock;
|
|
42
|
+
}): CrewPersonShip;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { err, ok } from '../shared/result.js';
|
|
2
|
+
/** The fleet's code for a ship that is crewed already: a starting prompt waits for its release. */
|
|
3
|
+
const SHIP_CREWED = 'CONFLICT';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: the crew of a signed-in person's person ship (decisions 0054,
|
|
6
|
+
* 0057). The gateway crews it once and every client of the person shares
|
|
7
|
+
* that crew, as a ship has one crew at a time (decision 0010). To crew it,
|
|
8
|
+
* the gateway acts as the account, with its token beside the gateway's crew
|
|
9
|
+
* token: it gets the ship's starting prompt, releasing the ship first when a
|
|
10
|
+
* crew the gateway does not hold has it, and registers with its secret.
|
|
11
|
+
*/
|
|
12
|
+
export function createCrewPersonShip(deps) {
|
|
13
|
+
const crewing = new Map();
|
|
14
|
+
const crew = async (call) => {
|
|
15
|
+
const { fleetId, shipId, accountToken } = call;
|
|
16
|
+
const gateway = await deps.connections.find(fleetId);
|
|
17
|
+
if (gateway === undefined) {
|
|
18
|
+
return err({ kind: 'notConnected' });
|
|
19
|
+
}
|
|
20
|
+
const asAccount = { crewToken: gateway.crewToken, accountToken, shipId };
|
|
21
|
+
let prompt = await deps.door.startingPrompt(asAccount);
|
|
22
|
+
if (!prompt.isOk && prompt.error.code === SHIP_CREWED) {
|
|
23
|
+
const released = await deps.door.release(asAccount);
|
|
24
|
+
if (!released.isOk) {
|
|
25
|
+
return err({ kind: 'fleetRefused', message: released.error.message });
|
|
26
|
+
}
|
|
27
|
+
prompt = await deps.door.startingPrompt(asAccount);
|
|
28
|
+
}
|
|
29
|
+
if (!prompt.isOk) {
|
|
30
|
+
return err({ kind: 'fleetRefused', message: prompt.error.message });
|
|
31
|
+
}
|
|
32
|
+
const registered = await deps.door.register({ shipId, secret: prompt.value.secret });
|
|
33
|
+
if (!registered.isOk) {
|
|
34
|
+
return err({ kind: 'fleetRefused', message: registered.error.message });
|
|
35
|
+
}
|
|
36
|
+
await deps.crews.save({ fleetId, shipId, crewToken: registered.value.crewToken, crewedAt: deps.clock.now() });
|
|
37
|
+
return ok({ crewToken: registered.value.crewToken });
|
|
38
|
+
};
|
|
39
|
+
return async (grant) => {
|
|
40
|
+
const token = await deps.accountTokenOf(grant);
|
|
41
|
+
if (!token.isOk) {
|
|
42
|
+
return token;
|
|
43
|
+
}
|
|
44
|
+
const { accountToken, personShipId: shipId } = token.value;
|
|
45
|
+
if (shipId === null) {
|
|
46
|
+
return err({ kind: 'noPersonShip' });
|
|
47
|
+
}
|
|
48
|
+
const held = await deps.crews.find(grant.fleetId, shipId);
|
|
49
|
+
if (held !== undefined) {
|
|
50
|
+
return ok({ shipId, crewToken: held.crewToken });
|
|
51
|
+
}
|
|
52
|
+
const key = `${grant.fleetId}/${shipId}`;
|
|
53
|
+
const answer = crewing.get(key) ?? crew({ fleetId: grant.fleetId, shipId, accountToken }).finally(() => crewing.delete(key));
|
|
54
|
+
crewing.set(key, answer);
|
|
55
|
+
const crewed = await answer;
|
|
56
|
+
return crewed.isOk ? ok({ shipId, crewToken: crewed.value.crewToken }) : crewed;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=crew-person-ship.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crew-person-ship.js","sourceRoot":"","sources":["../../../src/core/people/crew-person-ship.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Result } from '../shared/result.js';
|
|
2
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
3
|
+
import { type Dealt, type DealtError } from './opened-of.js';
|
|
4
|
+
import type { PersonCaller } from './person-crew.js';
|
|
5
|
+
import type { OpenedDeliveries, PersonCrews, PersonShipDoor } from './ports.js';
|
|
6
|
+
export type DoneDelivery = (input: {
|
|
7
|
+
caller: PersonCaller;
|
|
8
|
+
deliveryId: string;
|
|
9
|
+
}) => Promise<Result<Dealt, DealtError>>;
|
|
10
|
+
/** Use case: a person is done with a delivery they opened, with no answer (Q20): it is handled. */
|
|
11
|
+
export declare function createDoneDelivery(deps: {
|
|
12
|
+
crewPersonShip: CrewPersonShip;
|
|
13
|
+
crews: PersonCrews;
|
|
14
|
+
door: PersonShipDoor;
|
|
15
|
+
opened: OpenedDeliveries;
|
|
16
|
+
}): DoneDelivery;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { handledOf, openedOf } from './opened-of.js';
|
|
2
|
+
/** Use case: a person is done with a delivery they opened, with no answer (Q20): it is handled. */
|
|
3
|
+
export function createDoneDelivery(deps) {
|
|
4
|
+
return async (asked) => {
|
|
5
|
+
const opened = await openedOf(deps, asked);
|
|
6
|
+
return opened.isOk ? handledOf(deps, { caller: asked.caller, delivery: opened.value }) : opened;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=done-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done-delivery.js","sourceRoot":"","sources":["../../../src/core/people/done-delivery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA+B,MAAM,gBAAgB,CAAC;AAMlF,mGAAmG;AACnG,MAAM,UAAU,kBAAkB,CAAC,IAA4G;IAC7I,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAClG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DeliveryId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { PersonDelivery } from './ports.js';
|
|
3
|
+
/** The longest title an inbox shows, as a message's headline is at most 80 characters. */
|
|
4
|
+
export declare const TITLE_MAX_LENGTH = 80;
|
|
5
|
+
/** A delivery as a person's inbox lists it: by titles only, so no payload leaves the fleet unopened (Q20). */
|
|
6
|
+
export interface InboxEntry {
|
|
7
|
+
readonly deliveryId: DeliveryId;
|
|
8
|
+
readonly from: string;
|
|
9
|
+
readonly title: string;
|
|
10
|
+
readonly sentAt: string;
|
|
11
|
+
}
|
|
12
|
+
/** A question's own title; any other message's first line, cut to the longest title. */
|
|
13
|
+
export declare function titleOf(delivery: PersonDelivery): string;
|
|
14
|
+
export declare function inboxEntryOf(delivery: PersonDelivery): InboxEntry;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The longest title an inbox shows, as a message's headline is at most 80 characters. */
|
|
2
|
+
export const TITLE_MAX_LENGTH = 80;
|
|
3
|
+
/** A question's own title; any other message's first line, cut to the longest title. */
|
|
4
|
+
export function titleOf(delivery) {
|
|
5
|
+
const title = delivery.questionTitle ?? delivery.payload.split('\n', 1)[0] ?? '';
|
|
6
|
+
return title.length > TITLE_MAX_LENGTH ? `${title.slice(0, TITLE_MAX_LENGTH - 1)}…` : title;
|
|
7
|
+
}
|
|
8
|
+
export function inboxEntryOf(delivery) {
|
|
9
|
+
return { deliveryId: delivery.deliveryId, from: delivery.senderName, title: titleOf(delivery), sentAt: delivery.sentAt.toISOString() };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=inbox-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox-entry.js","sourceRoot":"","sources":["../../../src/core/people/inbox-entry.ts"],"names":[],"mappings":"AAIA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAUnC,wFAAwF;AACxF,MAAM,UAAU,OAAO,CAAC,QAAwB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,OAAO,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACzI,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Clock } from '../shared/clock.js';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
5
|
+
import { type InboxEntry } from './inbox-entry.js';
|
|
6
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
7
|
+
import type { OpenedDeliveries, PersonCrews, PersonShipDoor } from './ports.js';
|
|
8
|
+
/** A delivery as a person opens it: whole. */
|
|
9
|
+
export interface OpenedView extends InboxEntry {
|
|
10
|
+
readonly contentType: string;
|
|
11
|
+
readonly payload: string;
|
|
12
|
+
}
|
|
13
|
+
export type OpenDelivery = (input: {
|
|
14
|
+
caller: PersonCaller;
|
|
15
|
+
deliveryId: string;
|
|
16
|
+
}) => Promise<Result<OpenedView, PersonCrewError | DomainError<'NO_SUCH_DELIVERY'>>>;
|
|
17
|
+
/**
|
|
18
|
+
* Use case: a person opens one delivery that waits for their person ship
|
|
19
|
+
* (Q20). Opening is their own act, so the gateway, as the ship's crew,
|
|
20
|
+
* acknowledges it for them (interop 5.1). What their answer needs is kept
|
|
21
|
+
* before the acknowledgement, so a crash between the two loses nothing: the
|
|
22
|
+
* delivery then still waits, and opening it again keeps it once.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createOpenDelivery(deps: {
|
|
25
|
+
crewPersonShip: CrewPersonShip;
|
|
26
|
+
crews: PersonCrews;
|
|
27
|
+
door: PersonShipDoor;
|
|
28
|
+
opened: OpenedDeliveries;
|
|
29
|
+
clock: Clock;
|
|
30
|
+
}): OpenDelivery;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { inboxEntryOf, titleOf } from './inbox-entry.js';
|
|
4
|
+
import { asPersonCrew } from './person-crew.js';
|
|
5
|
+
import { waitingFor } from './read-inbox.js';
|
|
6
|
+
/**
|
|
7
|
+
* Use case: a person opens one delivery that waits for their person ship
|
|
8
|
+
* (Q20). Opening is their own act, so the gateway, as the ship's crew,
|
|
9
|
+
* acknowledges it for them (interop 5.1). What their answer needs is kept
|
|
10
|
+
* before the acknowledgement, so a crash between the two loses nothing: the
|
|
11
|
+
* delivery then still waits, and opening it again keeps it once.
|
|
12
|
+
*/
|
|
13
|
+
export function createOpenDelivery(deps) {
|
|
14
|
+
return async ({ caller, deliveryId }) => {
|
|
15
|
+
const waiting = await waitingFor(deps, caller);
|
|
16
|
+
if (!waiting.isOk) {
|
|
17
|
+
return waiting;
|
|
18
|
+
}
|
|
19
|
+
const delivery = waiting.value.deliveries.find((each) => each.deliveryId === deliveryId);
|
|
20
|
+
if (!delivery) {
|
|
21
|
+
return refuse('NO_SUCH_DELIVERY', `No delivery ${deliveryId} waits for you: read your inbox again`);
|
|
22
|
+
}
|
|
23
|
+
await deps.opened.save({
|
|
24
|
+
fleetId: caller.fleetId,
|
|
25
|
+
shipId: waiting.value.crew.shipId,
|
|
26
|
+
deliveryId: delivery.deliveryId,
|
|
27
|
+
messageId: delivery.messageId,
|
|
28
|
+
senderShipId: delivery.senderShipId,
|
|
29
|
+
from: delivery.senderName,
|
|
30
|
+
title: titleOf(delivery),
|
|
31
|
+
openedAt: deps.clock.now(),
|
|
32
|
+
});
|
|
33
|
+
const acknowledged = await asPersonCrew(deps, { caller, run: (crew) => deps.door.ack(crew.crewToken, delivery.deliveryId) });
|
|
34
|
+
if (!acknowledged.isOk) {
|
|
35
|
+
return acknowledged;
|
|
36
|
+
}
|
|
37
|
+
return ok({ ...inboxEntryOf(delivery), contentType: delivery.contentType, payload: delivery.payload });
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=open-delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-delivery.js","sourceRoot":"","sources":["../../../src/core/people/open-delivery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAmB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAU7C;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0H;IAC3J,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,kBAAkB,EAAE,eAAe,UAAU,uCAAuC,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;YACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7H,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type DomainError } from '../shared/errors.js';
|
|
2
|
+
import { type Result } from '../shared/result.js';
|
|
3
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
4
|
+
import { type PersonCaller, type PersonCrewError } from './person-crew.js';
|
|
5
|
+
import type { OpenedDeliveries, OpenedDelivery, PersonCrews, PersonShipDoor } from './ports.js';
|
|
6
|
+
/** What a person dealt with a delivery as: answered, or done with it. */
|
|
7
|
+
export interface Dealt {
|
|
8
|
+
readonly deliveryId: string;
|
|
9
|
+
readonly isHandled: true;
|
|
10
|
+
}
|
|
11
|
+
export type DealtError = PersonCrewError | DomainError<'NO_SUCH_DELIVERY'>;
|
|
12
|
+
/** A delivery the caller opened on their person ship. */
|
|
13
|
+
export declare function openedOf(deps: {
|
|
14
|
+
crewPersonShip: CrewPersonShip;
|
|
15
|
+
opened: OpenedDeliveries;
|
|
16
|
+
}, asked: {
|
|
17
|
+
caller: PersonCaller;
|
|
18
|
+
deliveryId: string;
|
|
19
|
+
}): Promise<Result<OpenedDelivery, DealtError>>;
|
|
20
|
+
/** Reports the delivery handled, then forgets it; kept while the fleet does not take it, so the person can go on again. */
|
|
21
|
+
export declare function handledOf(deps: {
|
|
22
|
+
crewPersonShip: CrewPersonShip;
|
|
23
|
+
crews: PersonCrews;
|
|
24
|
+
door: PersonShipDoor;
|
|
25
|
+
opened: OpenedDeliveries;
|
|
26
|
+
}, dealt: {
|
|
27
|
+
caller: PersonCaller;
|
|
28
|
+
delivery: OpenedDelivery;
|
|
29
|
+
}): Promise<Result<Dealt, DealtError>>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { asPersonCrew, personCrewOf, withOwnRefusal } from './person-crew.js';
|
|
4
|
+
/** A delivery the caller opened on their person ship. */
|
|
5
|
+
export async function openedOf(deps, asked) {
|
|
6
|
+
const { caller, deliveryId } = asked;
|
|
7
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
8
|
+
if (!crew.isOk) {
|
|
9
|
+
return crew;
|
|
10
|
+
}
|
|
11
|
+
const delivery = await deps.opened.find(caller.fleetId, { shipId: crew.value.shipId, deliveryId });
|
|
12
|
+
if (!delivery) {
|
|
13
|
+
return refuse('NO_SUCH_DELIVERY', `You have no opened delivery ${deliveryId}: open it from your inbox first`);
|
|
14
|
+
}
|
|
15
|
+
return ok(delivery);
|
|
16
|
+
}
|
|
17
|
+
/** Reports the delivery handled, then forgets it; kept while the fleet does not take it, so the person can go on again. */
|
|
18
|
+
export async function handledOf(deps, dealt) {
|
|
19
|
+
const { caller, delivery } = dealt;
|
|
20
|
+
const handled = await asPersonCrew(deps, { caller, run: (crew) => withOwnRefusal(deps.door.handled(crew.crewToken, delivery.deliveryId)) });
|
|
21
|
+
if (!handled.isOk) {
|
|
22
|
+
return handled;
|
|
23
|
+
}
|
|
24
|
+
if (!handled.value.value.isOk) {
|
|
25
|
+
return refuse('FLEET_UNAVAILABLE', `The fleet did not take that you dealt with it: ${handled.value.value.error.message}. Try again`);
|
|
26
|
+
}
|
|
27
|
+
await deps.opened.remove(delivery.fleetId, { shipId: delivery.shipId, deliveryId: delivery.deliveryId });
|
|
28
|
+
return ok({ deliveryId: delivery.deliveryId, isHandled: true });
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=opened-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opened-of.js","sourceRoot":"","sources":["../../../src/core/people/opened-of.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAA2C,MAAM,kBAAkB,CAAC;AAWvH,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAkE,EAClE,KAAmD;IAEnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACnG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,kBAAkB,EAAE,+BAA+B,UAAU,iCAAiC,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC;AAED,2HAA2H;AAC3H,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAA4G,EAC5G,KAAyD;IAEzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5I,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;IACvI,CAAC;IACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACzG,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { FleetRefusal } from '../connection/ports.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
6
|
+
import type { PersonCrews } from './ports.js';
|
|
7
|
+
/** Who calls from a signed-in person's MCP client: the account grant its token stands for. */
|
|
8
|
+
export interface PersonCaller {
|
|
9
|
+
readonly fleetId: FleetId;
|
|
10
|
+
readonly grantId: string;
|
|
11
|
+
}
|
|
12
|
+
/** The person ship the gateway crews for the caller, and its crew token. */
|
|
13
|
+
export interface PersonCrewToken {
|
|
14
|
+
readonly shipId: ShipId;
|
|
15
|
+
readonly crewToken: string;
|
|
16
|
+
}
|
|
17
|
+
export type PersonCrewError = DomainError<'NOT_A_PERSON' | 'SIGNED_OUT' | 'FLEET_UNAVAILABLE'>;
|
|
18
|
+
/** The crew of the caller's person ship, or why there is none, said so the person's model can tell them. */
|
|
19
|
+
export declare function personCrewOf(crewPersonShip: CrewPersonShip, caller: PersonCaller): Promise<Result<PersonCrewToken, PersonCrewError>>;
|
|
20
|
+
/**
|
|
21
|
+
* Makes a call as the crew of the caller's person ship. A crew that no
|
|
22
|
+
* longer works, as when its lease ended, is forgotten and the ship crewed
|
|
23
|
+
* again, once, so the person never deals with a lease.
|
|
24
|
+
*/
|
|
25
|
+
export declare function asPersonCrew<T>(deps: {
|
|
26
|
+
crewPersonShip: CrewPersonShip;
|
|
27
|
+
crews: PersonCrews;
|
|
28
|
+
}, call: {
|
|
29
|
+
caller: PersonCaller;
|
|
30
|
+
run: (crew: PersonCrewToken) => Promise<Result<T, FleetRefusal>>;
|
|
31
|
+
}): Promise<Result<{
|
|
32
|
+
crew: PersonCrewToken;
|
|
33
|
+
value: T;
|
|
34
|
+
}, PersonCrewError>>;
|
|
35
|
+
/**
|
|
36
|
+
* A fleet call whose refusal the caller says itself, as a value: only a crew
|
|
37
|
+
* that no longer works stays a refusal, so asPersonCrew crews again.
|
|
38
|
+
*/
|
|
39
|
+
export declare function withOwnRefusal<T>(called: Promise<Result<T, FleetRefusal>>): Promise<Result<Result<T, FleetRefusal>, FleetRefusal>>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
/** The fleet's codes for a crew token that no longer works: its lease ended, or it is unknown. */
|
|
4
|
+
const ENDED_CREW = new Set(['LEASE_ENDED', 'UNAUTHORIZED']);
|
|
5
|
+
/** The crew of the caller's person ship, or why there is none, said so the person's model can tell them. */
|
|
6
|
+
export async function personCrewOf(crewPersonShip, caller) {
|
|
7
|
+
const crewed = await crewPersonShip(caller);
|
|
8
|
+
if (crewed.isOk) {
|
|
9
|
+
return crewed;
|
|
10
|
+
}
|
|
11
|
+
switch (crewed.error.kind) {
|
|
12
|
+
case 'noPersonShip':
|
|
13
|
+
return refuse('NOT_A_PERSON', 'You have no person ship in this fleet: your rights there do not let you message');
|
|
14
|
+
case 'signedOut':
|
|
15
|
+
return refuse('SIGNED_OUT', 'Your sign-in ended: sign in again from your MCP client');
|
|
16
|
+
case 'pagasaeUnavailable':
|
|
17
|
+
return refuse('FLEET_UNAVAILABLE', 'The sign-in service did not answer: try again');
|
|
18
|
+
case 'notConnected':
|
|
19
|
+
return refuse('FLEET_UNAVAILABLE', 'The gateway is not connected to this fleet now: try again later');
|
|
20
|
+
case 'fleetRefused':
|
|
21
|
+
return refuse('FLEET_UNAVAILABLE', `The fleet did not crew your person ship: ${crewed.error.message}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Makes a call as the crew of the caller's person ship. A crew that no
|
|
26
|
+
* longer works, as when its lease ended, is forgotten and the ship crewed
|
|
27
|
+
* again, once, so the person never deals with a lease.
|
|
28
|
+
*/
|
|
29
|
+
export async function asPersonCrew(deps, call) {
|
|
30
|
+
const { caller, run } = call;
|
|
31
|
+
const crew = await personCrewOf(deps.crewPersonShip, caller);
|
|
32
|
+
if (!crew.isOk) {
|
|
33
|
+
return crew;
|
|
34
|
+
}
|
|
35
|
+
const answered = await run(crew.value);
|
|
36
|
+
if (answered.isOk) {
|
|
37
|
+
return ok({ crew: crew.value, value: answered.value });
|
|
38
|
+
}
|
|
39
|
+
if (!ENDED_CREW.has(answered.error.code)) {
|
|
40
|
+
return fleetDidNotAnswer(answered.error);
|
|
41
|
+
}
|
|
42
|
+
await deps.crews.drop(caller.fleetId, crew.value.shipId);
|
|
43
|
+
const again = await personCrewOf(deps.crewPersonShip, caller);
|
|
44
|
+
if (!again.isOk) {
|
|
45
|
+
return again;
|
|
46
|
+
}
|
|
47
|
+
const retried = await run(again.value);
|
|
48
|
+
return retried.isOk ? ok({ crew: again.value, value: retried.value }) : fleetDidNotAnswer(retried.error);
|
|
49
|
+
}
|
|
50
|
+
function fleetDidNotAnswer(refusal) {
|
|
51
|
+
return refuse('FLEET_UNAVAILABLE', `The fleet did not answer: ${refusal.message}`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A fleet call whose refusal the caller says itself, as a value: only a crew
|
|
55
|
+
* that no longer works stays a refusal, so asPersonCrew crews again.
|
|
56
|
+
*/
|
|
57
|
+
export async function withOwnRefusal(called) {
|
|
58
|
+
const answered = await called;
|
|
59
|
+
return !answered.isOk && ENDED_CREW.has(answered.error.code) ? answered : ok(answered);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=person-crew.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"person-crew.js","sourceRoot":"","sources":["../../../src/core/people/person-crew.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A signed-in person's person ship, which the gateway crews for their
|
|
3
|
+
* messaging (decisions 0054, 0057): the fleet's calls it makes as their
|
|
4
|
+
* account, and the one crew every client of the person shares.
|
|
5
|
+
*/
|
|
6
|
+
import type { DeliveryId, FleetId, MessageId, ShipId } from '@aeolus-fleet/common';
|
|
7
|
+
import type { FleetRefusal } from '../connection/ports.js';
|
|
8
|
+
import type { Result } from '../shared/result.js';
|
|
9
|
+
/** A call the gateway makes for an account: the account's token beside the gateway's own crew token, so the account acts through the gateway's ship. */
|
|
10
|
+
export interface AccountCall {
|
|
11
|
+
readonly crewToken: string;
|
|
12
|
+
readonly accountToken: string;
|
|
13
|
+
readonly shipId: ShipId;
|
|
14
|
+
}
|
|
15
|
+
/** Outbound port: the fleet's calls for an account's own person ship (aeolus-fleet #990). */
|
|
16
|
+
export interface AccountDoor {
|
|
17
|
+
/** A new starting prompt for the ship while it awaits crew: its secret. */
|
|
18
|
+
startingPrompt(call: AccountCall): Promise<Result<{
|
|
19
|
+
secret: string;
|
|
20
|
+
}, FleetRefusal>>;
|
|
21
|
+
/** Frees the ship from the crew that has it, so it can be crewed again. */
|
|
22
|
+
release(call: AccountCall): Promise<Result<undefined, FleetRefusal>>;
|
|
23
|
+
}
|
|
24
|
+
/** The crew token the gateway holds for a person ship: one crew, shared by every client of its person. */
|
|
25
|
+
export interface PersonCrew {
|
|
26
|
+
readonly fleetId: FleetId;
|
|
27
|
+
readonly shipId: ShipId;
|
|
28
|
+
readonly crewToken: string;
|
|
29
|
+
readonly crewedAt: Date;
|
|
30
|
+
}
|
|
31
|
+
export interface PersonCrews {
|
|
32
|
+
find(fleetId: FleetId, shipId: ShipId): Promise<PersonCrew | undefined>;
|
|
33
|
+
save(crew: PersonCrew): Promise<void>;
|
|
34
|
+
/** Forgets a crew that no longer works, as when its lease ended, so the ship is crewed again. */
|
|
35
|
+
drop(fleetId: FleetId, shipId: ShipId): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
/** A delivery to the person ship, as the fleet's push receive hands it. */
|
|
38
|
+
export interface PersonDelivery {
|
|
39
|
+
readonly deliveryId: DeliveryId;
|
|
40
|
+
readonly messageId: MessageId;
|
|
41
|
+
readonly senderShipId: ShipId;
|
|
42
|
+
readonly senderName: string;
|
|
43
|
+
readonly contentType: string;
|
|
44
|
+
readonly payload: string;
|
|
45
|
+
/** The title of a question (the question content type), read at the edge; none for any other message. */
|
|
46
|
+
readonly questionTitle: string | null;
|
|
47
|
+
readonly sentAt: Date;
|
|
48
|
+
readonly inReplyTo: MessageId | null;
|
|
49
|
+
}
|
|
50
|
+
/** Outbound port: the fleet's calls the gateway makes as the crew of a person ship. */
|
|
51
|
+
export interface PersonShipDoor {
|
|
52
|
+
/** How many deliveries wait for the ship, without waiting. */
|
|
53
|
+
inbox(crewToken: string): Promise<Result<{
|
|
54
|
+
waiting: number;
|
|
55
|
+
}, FleetRefusal>>;
|
|
56
|
+
/** The ship's deliveries, up to max, its own held ones again first. */
|
|
57
|
+
pushReceive(crewToken: string, take: {
|
|
58
|
+
max: number;
|
|
59
|
+
}): Promise<Result<PersonDelivery[], FleetRefusal>>;
|
|
60
|
+
/** Acknowledges a delivery the person opened: their own act confirms it (interop 5.1). */
|
|
61
|
+
ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
|
|
62
|
+
/** Sends the person's answer to the sender, in reply to its message, once under its key. */
|
|
63
|
+
reply(crewToken: string, reply: {
|
|
64
|
+
to: ShipId;
|
|
65
|
+
inReplyTo: MessageId;
|
|
66
|
+
contentType: string;
|
|
67
|
+
payload: string;
|
|
68
|
+
idempotencyKey: string;
|
|
69
|
+
}): Promise<Result<undefined, FleetRefusal>>;
|
|
70
|
+
/** Reports the person dealt with the delivery. */
|
|
71
|
+
handled(crewToken: string, deliveryId: DeliveryId): Promise<Result<undefined, FleetRefusal>>;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* A delivery a person opened, as the gateway keeps it until they deal with
|
|
75
|
+
* it (Q28 (a)): what their answer needs once the delivery is acknowledged,
|
|
76
|
+
* its message and sender, and its title, never its payload. It is the person
|
|
77
|
+
* ship's, so every client of the person finds it.
|
|
78
|
+
*/
|
|
79
|
+
export interface OpenedDelivery {
|
|
80
|
+
readonly fleetId: FleetId;
|
|
81
|
+
readonly shipId: ShipId;
|
|
82
|
+
readonly deliveryId: DeliveryId;
|
|
83
|
+
readonly messageId: MessageId;
|
|
84
|
+
readonly senderShipId: ShipId;
|
|
85
|
+
readonly from: string;
|
|
86
|
+
readonly title: string;
|
|
87
|
+
readonly openedAt: Date;
|
|
88
|
+
}
|
|
89
|
+
/** Outbound port: the deliveries people opened, by fleet, person ship and delivery. */
|
|
90
|
+
export interface OpenedDeliveries {
|
|
91
|
+
/** Keeps it, or keeps it as last opened when it was opened before. */
|
|
92
|
+
save(opened: OpenedDelivery): Promise<void>;
|
|
93
|
+
find(fleetId: FleetId, opened: {
|
|
94
|
+
shipId: ShipId;
|
|
95
|
+
deliveryId: string;
|
|
96
|
+
}): Promise<OpenedDelivery | undefined>;
|
|
97
|
+
/** Forgets it once the person dealt with it. */
|
|
98
|
+
remove(fleetId: FleetId, opened: {
|
|
99
|
+
shipId: ShipId;
|
|
100
|
+
deliveryId: string;
|
|
101
|
+
}): Promise<void>;
|
|
102
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/people/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Result } from '../shared/result.js';
|
|
2
|
+
import type { CrewPersonShip } from './crew-person-ship.js';
|
|
3
|
+
import { type InboxEntry } from './inbox-entry.js';
|
|
4
|
+
import { type PersonCaller, type PersonCrewError, type PersonCrewToken } from './person-crew.js';
|
|
5
|
+
import type { PersonCrews, PersonDelivery, PersonShipDoor } from './ports.js';
|
|
6
|
+
/** The most deliveries an inbox lists at once: as many as one receive takes. */
|
|
7
|
+
export declare const INBOX_LIST_MAX = 10;
|
|
8
|
+
export type ReadInbox = (caller: PersonCaller) => Promise<Result<{
|
|
9
|
+
waiting: number;
|
|
10
|
+
deliveries: InboxEntry[];
|
|
11
|
+
}, PersonCrewError>>;
|
|
12
|
+
/**
|
|
13
|
+
* What waits for the caller's person ship: how many, and up to the most an
|
|
14
|
+
* inbox lists, taken as received, the crew's own held ones again first. It
|
|
15
|
+
* asks how many wait first, so the person is never kept waiting while none
|
|
16
|
+
* does.
|
|
17
|
+
*/
|
|
18
|
+
export declare function waitingFor(deps: {
|
|
19
|
+
crewPersonShip: CrewPersonShip;
|
|
20
|
+
crews: PersonCrews;
|
|
21
|
+
door: PersonShipDoor;
|
|
22
|
+
}, caller: PersonCaller): Promise<Result<{
|
|
23
|
+
crew: PersonCrewToken;
|
|
24
|
+
waiting: number;
|
|
25
|
+
deliveries: PersonDelivery[];
|
|
26
|
+
}, PersonCrewError>>;
|
|
27
|
+
/**
|
|
28
|
+
* Use case: a person reads their own person ship's inbox (Q20): what waits,
|
|
29
|
+
* by titles only. The gateway takes the waiting deliveries as the ship's
|
|
30
|
+
* crew, so nothing is stored in the gateway, and a delivery listed is listed
|
|
31
|
+
* again until the person deals with it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createReadInbox(deps: {
|
|
34
|
+
crewPersonShip: CrewPersonShip;
|
|
35
|
+
crews: PersonCrews;
|
|
36
|
+
door: PersonShipDoor;
|
|
37
|
+
}): ReadInbox;
|