@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,337 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { REQUEST_LIFETIME_MS } from '../../core/requests/open-request.js';
|
|
3
|
+
import { FIRST_PAGE } from '../../core/sign-in/start-page-sign-in.js';
|
|
4
|
+
import { SIGN_IN_LIFETIME_MS } from '../../core/sign-in/start-sign-in.js';
|
|
5
|
+
import { PAGE_SESSION_COOKIE } from '../crypto/page-sessions.js';
|
|
6
|
+
import { acceptForms, escaped, isSameOrigin } from './html.js';
|
|
7
|
+
import { acceptWebsockets } from './live.js';
|
|
8
|
+
import { handshake, icon, ring, signInPage, statusBadge } from './signal.js';
|
|
9
|
+
const HTTP_FOUND = 302;
|
|
10
|
+
const HTTP_SEE_OTHER = 303;
|
|
11
|
+
const HTTP_BAD_REQUEST = 400;
|
|
12
|
+
const HTTP_UNAUTHORIZED = 401;
|
|
13
|
+
const HTTP_FORBIDDEN = 403;
|
|
14
|
+
const HTTP_NOT_FOUND = 404;
|
|
15
|
+
const HTTP_BAD_GATEWAY = 502;
|
|
16
|
+
const MS_PER_SECOND = 1000;
|
|
17
|
+
/** Why the waiting page's live channel was closed: it does not open again. */
|
|
18
|
+
const CLOSE_OTHER_ORIGIN = 4403;
|
|
19
|
+
/** Whether the gateway is served over HTTPS, so its cookies go over HTTPS only. */
|
|
20
|
+
const isHttps = (issuer) => new URL(issuer).protocol === 'https:';
|
|
21
|
+
/** The parameters of an authorization request the page carries from its query to its form. */
|
|
22
|
+
const AUTHORIZATION_PARAMETERS = ['response_type', 'client_id', 'redirect_uri', 'code_challenge', 'code_challenge_method', 'resource', 'state', 'scope'];
|
|
23
|
+
const fieldsSchema = z.record(z.string(), z.unknown()).transform((fields) => Object.fromEntries(Object.entries(fields).flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : []))));
|
|
24
|
+
/** What the person may pick the client to act as. */
|
|
25
|
+
const holderSchema = z.enum(['account', 'party']);
|
|
26
|
+
function fieldsOf(value) {
|
|
27
|
+
const fields = fieldsSchema.safeParse(value);
|
|
28
|
+
return fields.success ? fields.data : {};
|
|
29
|
+
}
|
|
30
|
+
function authorizationRequestOf(fields) {
|
|
31
|
+
return Object.fromEntries(AUTHORIZATION_PARAMETERS.map((name) => [name, fields[name]]));
|
|
32
|
+
}
|
|
33
|
+
/** A page of the gateway, never cached. */
|
|
34
|
+
function htmlPage(reply, page) {
|
|
35
|
+
return reply.code(page.status).type('text/html; charset=utf-8').header('cache-control', 'no-store').send(signInPage({ title: page.title, body: page.body }));
|
|
36
|
+
}
|
|
37
|
+
/** How an error page leads (design B): one ring in its tone around one icon, dashed for what ended, and one title. */
|
|
38
|
+
const ERROR_LOOKS = {
|
|
39
|
+
invalidClient: { tone: 'attention', icon: 'alert', heading: 'This client cannot connect' },
|
|
40
|
+
noPick: { tone: 'attention', icon: 'alert', heading: 'Pick how to connect' },
|
|
41
|
+
signInEnded: { tone: 'ended', icon: 'timerOff', heading: 'Sign-in ended', isDashed: true },
|
|
42
|
+
otherBrowser: { tone: 'attention', icon: 'shieldX', heading: 'Not this browser' },
|
|
43
|
+
noFleet: { tone: 'attention', icon: 'shieldX', heading: 'No fleet for you' },
|
|
44
|
+
outsidePartiesOff: { tone: 'ended', icon: 'powerOff', heading: 'Outside parties are off' },
|
|
45
|
+
signInFailed: { tone: 'attention', icon: 'alert', heading: 'Sign-in did not go through' },
|
|
46
|
+
requestEnded: { tone: 'ended', icon: 'timerOff', heading: 'Request ended', isDashed: true },
|
|
47
|
+
noSignIn: { tone: 'ended', icon: 'ban', heading: 'No sign-in here' },
|
|
48
|
+
};
|
|
49
|
+
/** A page that tells a person why their client got nothing, sending them nowhere. */
|
|
50
|
+
function errorPage(reply, page) {
|
|
51
|
+
const look = ERROR_LOOKS[page.look];
|
|
52
|
+
const lead = ring({ tone: look.tone, center: { icon: look.icon }, label: look.heading, size: 144, ...(look.isDashed === undefined ? {} : { isDashed: look.isDashed }) });
|
|
53
|
+
return htmlPage(reply, { status: page.status, title: page.title, body: `${lead}<h1>${escaped(look.heading)}</h1><p class="muted">${escaped(page.message)}</p>` });
|
|
54
|
+
}
|
|
55
|
+
/** The cookie the browser that started a sign-in holds its secret in, sent back to the callback only. */
|
|
56
|
+
const SIGN_IN_COOKIE = { name: 'aeolus_sign_in', path: '/pagasae/callback' };
|
|
57
|
+
/** The cookie the browser that asked for a client holds the same secret in, sent back to the waiting page only. */
|
|
58
|
+
const WAITING_COOKIE = { name: 'aeolus_waiting', path: '/authorize/waiting' };
|
|
59
|
+
/**
|
|
60
|
+
* The page session cookie: every page and the API under it, for the browser's
|
|
61
|
+
* session. Lax, so a link to a page from elsewhere arrives signed in, while a
|
|
62
|
+
* form from another site does not (and each page form checks its origin too).
|
|
63
|
+
*/
|
|
64
|
+
const PAGE_SESSION = { name: PAGE_SESSION_COOKIE, path: '/' };
|
|
65
|
+
function pageSessionHeader(set) {
|
|
66
|
+
return `${PAGE_SESSION.name}=${set.value}; Path=${PAGE_SESSION.path};${set.isEnding ? ' Max-Age=0;' : ''} HttpOnly;${set.isSecure ? ' Secure;' : ''} SameSite=Lax`;
|
|
67
|
+
}
|
|
68
|
+
function cookieHeader(cookie, set) {
|
|
69
|
+
return `${cookie.name}=${set.value}; Path=${cookie.path}; Max-Age=${String(set.maxAgeSeconds)}; HttpOnly;${set.isSecure ? ' Secure;' : ''} SameSite=Lax`;
|
|
70
|
+
}
|
|
71
|
+
/** The cookie's value from a Cookie header, if the browser sent it. */
|
|
72
|
+
function cookieValue(cookie, header) {
|
|
73
|
+
const prefix = `${cookie.name}=`;
|
|
74
|
+
return header
|
|
75
|
+
?.split(';')
|
|
76
|
+
.map((part) => part.trim())
|
|
77
|
+
.find((part) => part.startsWith(prefix))
|
|
78
|
+
?.slice(prefix.length);
|
|
79
|
+
}
|
|
80
|
+
function sendBack(reply, answer) {
|
|
81
|
+
const { refusal, issuer } = answer;
|
|
82
|
+
if (refusal.kind === 'invalidClient') {
|
|
83
|
+
return errorPage(reply, { status: HTTP_BAD_REQUEST, title: 'Connect an MCP client', look: 'invalidClient', message: refusal.message });
|
|
84
|
+
}
|
|
85
|
+
const url = new URL(refusal.redirectUri);
|
|
86
|
+
url.searchParams.append('error', refusal.error);
|
|
87
|
+
url.searchParams.append('error_description', refusal.description);
|
|
88
|
+
if (refusal.state !== null) {
|
|
89
|
+
url.searchParams.append('state', refusal.state);
|
|
90
|
+
}
|
|
91
|
+
url.searchParams.append('iss', issuer);
|
|
92
|
+
return reply.code(HTTP_FOUND).header('location', url.toString()).send();
|
|
93
|
+
}
|
|
94
|
+
/** The page at /authorize: the client, and the two picks (Q1 a), each starting a sign-in through pagasae. */
|
|
95
|
+
function pickPage(request, authorization) {
|
|
96
|
+
const hidden = Object.entries(request)
|
|
97
|
+
.flatMap(([name, value]) => (value === undefined ? [] : [`<input type="hidden" name="${escaped(name)}" value="${escaped(value)}">`]))
|
|
98
|
+
.join('');
|
|
99
|
+
return `${handshake({ name: authorization.clientName, fleet: 'Aeolus' })}
|
|
100
|
+
<h1>Connect an MCP client</h1>
|
|
101
|
+
<p><strong>${escaped(authorization.clientName)}</strong> asks to call your fleet's ships through the gateway.</p>
|
|
102
|
+
<form method="get" action="/authorize/sign-in">${hidden}<div class="tiles">
|
|
103
|
+
<button class="tile" name="holder" value="account">${icon('signIn', 20)}<strong>Sign in as yourself</strong><span class="muted">The client acts as you.</span></button>
|
|
104
|
+
<button class="tile" name="holder" value="party">${icon('hourglass', 20)}<strong>Ask for access for this client</strong><span class="muted">An approver of your fleet decides; the client then acts as its own party.</span></button>
|
|
105
|
+
</div></form>
|
|
106
|
+
<p class="muted">Client ${escaped(authorization.clientId)}, sent back to ${escaped(authorization.redirectUri)}.</p>`;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* What the waiting page runs: it follows its request on the live channel
|
|
110
|
+
* and goes to its own address again once told to, there to be sent on; it
|
|
111
|
+
* goes there too when the request expires. A dropped socket opens again
|
|
112
|
+
* with backoff. It never reloads on a timer.
|
|
113
|
+
*/
|
|
114
|
+
const WAITING_SCRIPT = `(function () {
|
|
115
|
+
var wait = 500, expiry, HOUR = 3600000;
|
|
116
|
+
function goOn() { location.replace(location.href); }
|
|
117
|
+
function countDown() {
|
|
118
|
+
var holder = document.querySelector('[data-expires-at]'), text = document.querySelector('[data-time-left]');
|
|
119
|
+
if (!holder || !text) return;
|
|
120
|
+
var hours = Math.max(0, Math.floor((Date.parse(holder.getAttribute('data-expires-at')) - Date.now()) / HOUR));
|
|
121
|
+
text.textContent = Math.floor(hours / 24) + ' d ' + (hours % 24) + ' h';
|
|
122
|
+
}
|
|
123
|
+
setInterval(countDown, 60000);
|
|
124
|
+
function open() {
|
|
125
|
+
var socket = new WebSocket((location.protocol === 'https:' ? 'wss://' : 'ws://') + location.host + '${WAITING_COOKIE.path}/live' + location.search);
|
|
126
|
+
socket.onopen = function () { wait = 500; };
|
|
127
|
+
socket.onmessage = function (event) {
|
|
128
|
+
var told = JSON.parse(event.data);
|
|
129
|
+
if (told.go) return goOn();
|
|
130
|
+
if (told.expiresAt) { clearTimeout(expiry); expiry = setTimeout(goOn, Math.max(0, Date.parse(told.expiresAt) - Date.now())); }
|
|
131
|
+
};
|
|
132
|
+
socket.onclose = function (event) {
|
|
133
|
+
if (event.code === ${String(CLOSE_OTHER_ORIGIN)}) return;
|
|
134
|
+
setTimeout(open, wait);
|
|
135
|
+
wait = Math.min(wait * 2, 10000);
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
open();
|
|
139
|
+
})();`;
|
|
140
|
+
const MS_PER_HOUR = 3_600_000;
|
|
141
|
+
const HOURS_PER_DAY = 24;
|
|
142
|
+
/** The time left of a request, in days and hours, as the waiting page's ring shows it. */
|
|
143
|
+
function timeLeft(expiresAt, now) {
|
|
144
|
+
const hours = Math.max(0, Math.floor((expiresAt.getTime() - now.getTime()) / MS_PER_HOUR));
|
|
145
|
+
return `${String(Math.floor(hours / HOURS_PER_DAY))} d ${String(hours % HOURS_PER_DAY)} h`;
|
|
146
|
+
}
|
|
147
|
+
/** The waiting page: the client waits for approval, the ring counting its time left, and the page goes on by itself once it is decided. */
|
|
148
|
+
function waitingPage(waiting) {
|
|
149
|
+
const left = timeLeft(waiting.expiresAt, waiting.now);
|
|
150
|
+
return `${handshake({ name: waiting.clientName, fleet: 'Aeolus' })}
|
|
151
|
+
<div data-expires-at="${waiting.expiresAt.toISOString()}">${ring({ tone: 'waiting', center: { text: left, icon: 'hourglass' }, label: `${left} left`, size: 176 })}</div>
|
|
152
|
+
${statusBadge({ tone: 'waiting', icon: 'hourglass', label: 'Waiting for approval' })}
|
|
153
|
+
<p><strong>${escaped(waiting.clientName)}</strong> waits for an approver of your fleet.</p>
|
|
154
|
+
<p><span class="going-on">Goes on by itself</span></p>
|
|
155
|
+
<p class="muted">Closed this page? Connect again later.</p>
|
|
156
|
+
<script>${WAITING_SCRIPT}</script>`;
|
|
157
|
+
}
|
|
158
|
+
/** Client credentials in an HTTP Basic header (RFC 6749, 2.3.1): each part form-urlencoded. */
|
|
159
|
+
function basicCredentials(header) {
|
|
160
|
+
if (header?.startsWith('Basic ') !== true) {
|
|
161
|
+
return {};
|
|
162
|
+
}
|
|
163
|
+
const decoded = Buffer.from(header.slice('Basic '.length), 'base64').toString('utf8');
|
|
164
|
+
const separator = decoded.indexOf(':');
|
|
165
|
+
if (separator < 0) {
|
|
166
|
+
return {};
|
|
167
|
+
}
|
|
168
|
+
const decode = (part) => decodeURIComponent(part.replaceAll('+', ' '));
|
|
169
|
+
return { client_id: decode(decoded.slice(0, separator)), client_secret: decode(decoded.slice(separator + 1)) };
|
|
170
|
+
}
|
|
171
|
+
/** Signing people in through pagasae, and the waiting page (decisions 0054, 0056). */
|
|
172
|
+
function registerSignIn(server, deps) {
|
|
173
|
+
const { issuer, signIn } = deps;
|
|
174
|
+
const isSecure = isHttps(issuer);
|
|
175
|
+
server.get('/authorize/sign-in', async (request, reply) => {
|
|
176
|
+
const fields = fieldsOf(request.query);
|
|
177
|
+
const holder = holderSchema.safeParse(fields.holder);
|
|
178
|
+
if (!holder.success) {
|
|
179
|
+
return errorPage(reply, { status: HTTP_BAD_REQUEST, title: 'Connect an MCP client', look: 'noPick', message: 'Pick on the page whether to sign in as yourself or to ask for access for the client.' });
|
|
180
|
+
}
|
|
181
|
+
const started = await signIn.start({ request: authorizationRequestOf(fields), holder: holder.data });
|
|
182
|
+
if (!started.isOk) {
|
|
183
|
+
return sendBack(reply, { refusal: started.error, issuer });
|
|
184
|
+
}
|
|
185
|
+
const cookie = cookieHeader(SIGN_IN_COOKIE, { value: started.value.browserSecret, maxAgeSeconds: SIGN_IN_LIFETIME_MS / MS_PER_SECOND, isSecure });
|
|
186
|
+
return reply.code(HTTP_FOUND).header('location', started.value.redirectTo).header('set-cookie', cookie).send();
|
|
187
|
+
});
|
|
188
|
+
server.get('/sign-in', (request, reply) => {
|
|
189
|
+
const { return_to: returnTo } = fieldsOf(request.query);
|
|
190
|
+
const started = signIn.pages.start({ returnTo });
|
|
191
|
+
const cookie = cookieHeader(SIGN_IN_COOKIE, { value: started.browserSecret, maxAgeSeconds: SIGN_IN_LIFETIME_MS / MS_PER_SECOND, isSecure });
|
|
192
|
+
return reply.code(HTTP_FOUND).header('location', started.redirectTo).header('set-cookie', cookie).send();
|
|
193
|
+
});
|
|
194
|
+
server.post('/sign-out', async (request, reply) => {
|
|
195
|
+
if (!isSameOrigin(request)) {
|
|
196
|
+
return reply.code(HTTP_FORBIDDEN).type('text/plain; charset=utf-8').send('Signing out is sent only from the gateway\'s own pages.');
|
|
197
|
+
}
|
|
198
|
+
const session = request.headers.cookie === undefined ? undefined : signIn.pages.sessions.inCookie(request.headers.cookie);
|
|
199
|
+
if (session !== undefined) {
|
|
200
|
+
await signIn.pages.signOut(session);
|
|
201
|
+
}
|
|
202
|
+
return reply.code(HTTP_SEE_OTHER).header('location', FIRST_PAGE).header('set-cookie', pageSessionHeader({ value: '', isSecure, isEnding: true })).send();
|
|
203
|
+
});
|
|
204
|
+
/** Where the browser goes next: back to the client or the page, or, holding the secret in its waiting cookie, to the waiting page. */
|
|
205
|
+
const goOn = (reply, { answer, browserSecret }) => {
|
|
206
|
+
const cleared = cookieHeader(SIGN_IN_COOKIE, { value: '', maxAgeSeconds: 0, isSecure });
|
|
207
|
+
if (answer.kind === 'answered') {
|
|
208
|
+
return reply.code(HTTP_FOUND).header('location', answer.redirectTo).header('set-cookie', cleared).send();
|
|
209
|
+
}
|
|
210
|
+
if (answer.kind === 'signedIn') {
|
|
211
|
+
const session = pageSessionHeader({ value: answer.session, isSecure, isEnding: false });
|
|
212
|
+
return reply.code(HTTP_FOUND).header('location', answer.redirectTo).header('set-cookie', [cleared, session]).send();
|
|
213
|
+
}
|
|
214
|
+
const waiting = cookieHeader(WAITING_COOKIE, { value: browserSecret ?? '', maxAgeSeconds: REQUEST_LIFETIME_MS / MS_PER_SECOND, isSecure });
|
|
215
|
+
return reply.code(HTTP_FOUND).header('location', `${WAITING_COOKIE.path}?${new URLSearchParams({ waiting: answer.waiting }).toString()}`).header('set-cookie', [cleared, waiting]).send();
|
|
216
|
+
};
|
|
217
|
+
server.get(SIGN_IN_COOKIE.path, async (request, reply) => {
|
|
218
|
+
const { state, code, error } = fieldsOf(request.query);
|
|
219
|
+
const browserSecret = cookieValue(SIGN_IN_COOKIE, request.headers.cookie);
|
|
220
|
+
const completed = await signIn.complete({ state, code, error, browserSecret });
|
|
221
|
+
if (completed.isOk) {
|
|
222
|
+
return goOn(reply, { answer: completed.value, browserSecret });
|
|
223
|
+
}
|
|
224
|
+
void reply.header('set-cookie', cookieHeader(SIGN_IN_COOKIE, { value: '', maxAgeSeconds: 0, isSecure }));
|
|
225
|
+
const refusal = completed.error;
|
|
226
|
+
const title = 'Sign in';
|
|
227
|
+
switch (refusal.kind) {
|
|
228
|
+
case 'invalidClient':
|
|
229
|
+
case 'redirect':
|
|
230
|
+
return sendBack(reply, { refusal, issuer });
|
|
231
|
+
case 'unknownSignIn':
|
|
232
|
+
return errorPage(reply, { status: HTTP_BAD_REQUEST, title, look: 'signInEnded', message: 'This sign-in is unknown, or took over 10 minutes. Start again from your MCP client.' });
|
|
233
|
+
case 'otherBrowser':
|
|
234
|
+
return errorPage(reply, { status: HTTP_BAD_REQUEST, title, look: 'otherBrowser', message: 'This sign-in was started in another browser, so it is not yours to finish. Start again from your MCP client.' });
|
|
235
|
+
case 'fleetNotServed':
|
|
236
|
+
return errorPage(reply, { status: HTTP_FORBIDDEN, title, look: 'noFleet', message: 'This gateway does not serve the fleet you signed in to.' });
|
|
237
|
+
case 'outsidePartiesOff':
|
|
238
|
+
return errorPage(reply, { status: HTTP_FORBIDDEN, title, look: 'outsidePartiesOff', message: "Your fleet's outside parties are off, so no MCP client can ask for access. Sign in as yourself instead, or ask whoever runs your fleet." });
|
|
239
|
+
case 'pagasaeRefused':
|
|
240
|
+
return errorPage(reply, { status: HTTP_BAD_GATEWAY, title, look: 'signInFailed', message: `The sign-in did not go through: ${refusal.message}. Start again from your MCP client.` });
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
// The sealed waiting goes in the query, as it is longer than a path parameter may be.
|
|
244
|
+
server.get(WAITING_COOKIE.path, async (request, reply) => {
|
|
245
|
+
const { waiting = '' } = fieldsOf(request.query);
|
|
246
|
+
const read = await signIn.readWaiting({ waiting, browserSecret: cookieValue(WAITING_COOKIE, request.headers.cookie) });
|
|
247
|
+
const title = 'Waiting for approval';
|
|
248
|
+
if (read.isOk) {
|
|
249
|
+
if (read.value.kind === 'waiting') {
|
|
250
|
+
return htmlPage(reply, { status: 200, title, body: waitingPage({ ...read.value, now: signIn.clock.now() }) });
|
|
251
|
+
}
|
|
252
|
+
const cleared = cookieHeader(WAITING_COOKIE, { value: '', maxAgeSeconds: 0, isSecure });
|
|
253
|
+
return reply.code(HTTP_FOUND).header('location', read.value.redirectTo).header('set-cookie', cleared).send();
|
|
254
|
+
}
|
|
255
|
+
const refusal = read.error;
|
|
256
|
+
switch (refusal.kind) {
|
|
257
|
+
case 'invalidClient':
|
|
258
|
+
case 'redirect':
|
|
259
|
+
return sendBack(reply, { refusal, issuer });
|
|
260
|
+
case 'unknownWaiting':
|
|
261
|
+
return errorPage(reply, { status: HTTP_NOT_FOUND, title, look: 'requestEnded', message: 'This request is unknown, or ended long ago. Start again from your MCP client.' });
|
|
262
|
+
case 'otherBrowser':
|
|
263
|
+
return errorPage(reply, { status: HTTP_BAD_REQUEST, title, look: 'otherBrowser', message: 'This request was made in another browser, so it is not yours to follow. Start again from your MCP client.' });
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
// The waiting page's live channel: told when its request expires, and to go on once the request no longer waits.
|
|
267
|
+
acceptWebsockets(server, () => {
|
|
268
|
+
server.get(`${WAITING_COOKIE.path}/live`, { websocket: true }, async (socket, request) => {
|
|
269
|
+
if (!isSameOrigin(request)) {
|
|
270
|
+
socket.close(CLOSE_OTHER_ORIGIN, 'Opened only from the waiting page');
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const opened = { waiting: fieldsOf(request.query).waiting ?? '', browserSecret: cookieValue(WAITING_COOKIE, request.headers.cookie) };
|
|
274
|
+
const watched = await signIn.watchWaiting(opened);
|
|
275
|
+
// Whatever does not wait, refused or decided, the page's own address says.
|
|
276
|
+
if (!watched.isOk || !watched.value.isWaiting) {
|
|
277
|
+
socket.send(JSON.stringify({ go: true }));
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
socket.send(JSON.stringify({ expiresAt: watched.value.expiresAt.toISOString() }));
|
|
281
|
+
const unsubscribe = signIn.hub.subscribe({
|
|
282
|
+
fleetId: watched.value.fleetId,
|
|
283
|
+
read: () => {
|
|
284
|
+
void signIn.watchWaiting(opened).then((again) => {
|
|
285
|
+
if (!again.isOk || !again.value.isWaiting) {
|
|
286
|
+
socket.send(JSON.stringify({ go: true }));
|
|
287
|
+
unsubscribe();
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
socket.on('close', unsubscribe);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
export function registerOAuthRoutes(server, deps) {
|
|
297
|
+
acceptForms(server);
|
|
298
|
+
const protectedResource = { resource: deps.resource, authorization_servers: [deps.issuer], bearer_methods_supported: ['header'] };
|
|
299
|
+
server.get('/.well-known/oauth-protected-resource', () => protectedResource);
|
|
300
|
+
server.get(`/.well-known/oauth-protected-resource${new URL(deps.resource).pathname}`, () => protectedResource);
|
|
301
|
+
server.get('/.well-known/oauth-authorization-server', () => ({
|
|
302
|
+
issuer: deps.issuer,
|
|
303
|
+
authorization_endpoint: `${deps.issuer}/authorize`,
|
|
304
|
+
token_endpoint: `${deps.issuer}/token`,
|
|
305
|
+
response_types_supported: ['code'],
|
|
306
|
+
grant_types_supported: ['authorization_code', 'refresh_token'],
|
|
307
|
+
code_challenge_methods_supported: ['S256'],
|
|
308
|
+
token_endpoint_auth_methods_supported: ['none', 'client_secret_basic', 'client_secret_post'],
|
|
309
|
+
client_id_metadata_document_supported: true,
|
|
310
|
+
authorization_response_iss_parameter_supported: true,
|
|
311
|
+
}));
|
|
312
|
+
server.get('/authorize', async (request, reply) => {
|
|
313
|
+
if (deps.signIn === undefined) {
|
|
314
|
+
return errorPage(reply, { status: HTTP_FORBIDDEN, title: 'Connect an MCP client', look: 'noSignIn', message: 'This gateway signs no one in, so no MCP client can connect to it: its operator sets pagasae first.' });
|
|
315
|
+
}
|
|
316
|
+
const parameters = authorizationRequestOf(fieldsOf(request.query));
|
|
317
|
+
const read = await deps.readAuthorization(parameters);
|
|
318
|
+
if (!read.isOk) {
|
|
319
|
+
return sendBack(reply, { refusal: read.error, issuer: deps.issuer });
|
|
320
|
+
}
|
|
321
|
+
return htmlPage(reply, { status: 200, title: 'Connect an MCP client', body: pickPage(parameters, read.value) });
|
|
322
|
+
});
|
|
323
|
+
if (deps.signIn !== undefined) {
|
|
324
|
+
registerSignIn(server, { issuer: deps.issuer, signIn: deps.signIn });
|
|
325
|
+
}
|
|
326
|
+
server.post('/token', async (request, reply) => {
|
|
327
|
+
const exchanged = await deps.exchangeToken({ ...fieldsOf(request.body), ...basicCredentials(request.headers.authorization) });
|
|
328
|
+
void reply.header('cache-control', 'no-store').header('pragma', 'no-cache');
|
|
329
|
+
if (!exchanged.isOk) {
|
|
330
|
+
const status = exchanged.error.error === 'invalid_client' ? HTTP_UNAUTHORIZED : HTTP_BAD_REQUEST;
|
|
331
|
+
return reply.code(status).send({ error: exchanged.error.error, error_description: exchanged.error.description });
|
|
332
|
+
}
|
|
333
|
+
const { accessToken, refreshToken, expiresInSeconds, scope } = exchanged.value;
|
|
334
|
+
return { access_token: accessToken, token_type: 'Bearer', expires_in: expiresInSeconds, refresh_token: refreshToken, ...(scope === null ? {} : { scope }) };
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=oauth-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-routes.js","sourceRoot":"","sources":["../../../src/adapters/http/oauth-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import type { inferRouterOutputs } from '@trpc/server';
|
|
3
|
+
import { type Context, type GatewayRouter } from '../trpc/router.js';
|
|
4
|
+
import { type Icon, type SignInWay, type Tone } from './signal.js';
|
|
5
|
+
/** An outside party as the API shows it. */
|
|
6
|
+
type ShownParty = inferRouterOutputs<GatewayRouter>['parties']['list'][number];
|
|
7
|
+
/** Which side an outside party is on: a server the fleet's ships call, or a client that calls them. */
|
|
8
|
+
export type Side = 'server' | 'client';
|
|
9
|
+
/**
|
|
10
|
+
* An outside party is a party and its protocol (design B, How A2A slots in):
|
|
11
|
+
* the protocol is a tag on every card and the list counts per protocol, so
|
|
12
|
+
* an A2A agent joins as one more row here.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PARTY_KINDS: Record<ShownParty['kind'], {
|
|
15
|
+
protocol: string;
|
|
16
|
+
side: Side;
|
|
17
|
+
}>;
|
|
18
|
+
export declare const SIDES: Record<Side, {
|
|
19
|
+
icon: Icon;
|
|
20
|
+
one: string;
|
|
21
|
+
many: string;
|
|
22
|
+
}>;
|
|
23
|
+
/** A proxy ship's state as the console shows a status: tone, icon and label. */
|
|
24
|
+
export declare const PARTY_STATES: Record<ShownParty['state'], {
|
|
25
|
+
tone: Tone;
|
|
26
|
+
icon: Icon;
|
|
27
|
+
label: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function registerOutsidePartiesPage(server: FastifyInstance, deps: {
|
|
30
|
+
contextFor: (cookie: string | undefined) => Context;
|
|
31
|
+
signIn: SignInWay;
|
|
32
|
+
}): void;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Outside parties page: whether the fleet's outside parties are on, and
|
|
3
|
+
* the switch for an actor holding fleet:network (interop I-3, decision
|
|
4
|
+
* 0056). Turning them on in a fleet with no network rules shows the API's
|
|
5
|
+
* warning, and only a second, confirmed form turns them on. The page calls
|
|
6
|
+
* the gateway's own API as the caller, so it checks nothing the API does
|
|
7
|
+
* not; it shows the switch only to an actor holding its scope and refuses a
|
|
8
|
+
* form sent from another origin.
|
|
9
|
+
*/
|
|
10
|
+
import { TRPCError } from '@trpc/server';
|
|
11
|
+
import { getHTTPStatusCodeFromError } from '@trpc/server/http';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { SWITCHING_SCOPE } from '../../core/outside-parties/set-outside-parties.js';
|
|
14
|
+
import { gatewayRouter } from '../trpc/router.js';
|
|
15
|
+
import { acceptForms, escaped, isSameOrigin } from './html.js';
|
|
16
|
+
import { icon, partyMark, ring, signalPage, signInPrompt, statusBadge } from './signal.js';
|
|
17
|
+
/**
|
|
18
|
+
* An outside party is a party and its protocol (design B, How A2A slots in):
|
|
19
|
+
* the protocol is a tag on every card and the list counts per protocol, so
|
|
20
|
+
* an A2A agent joins as one more row here.
|
|
21
|
+
*/
|
|
22
|
+
export const PARTY_KINDS = {
|
|
23
|
+
mcpServer: { protocol: 'MCP', side: 'server' },
|
|
24
|
+
mcpClient: { protocol: 'MCP', side: 'client' },
|
|
25
|
+
};
|
|
26
|
+
export const SIDES = {
|
|
27
|
+
server: { icon: 'server', one: 'server', many: 'servers' },
|
|
28
|
+
client: { icon: 'laptop', one: 'client', many: 'clients' },
|
|
29
|
+
};
|
|
30
|
+
/** A proxy ship's state as the console shows a status: tone, icon and label. */
|
|
31
|
+
export const PARTY_STATES = {
|
|
32
|
+
commissioning: { tone: 'active', icon: 'hourglass', label: 'Commissioning' },
|
|
33
|
+
awaitingCrew: { tone: 'waiting', icon: 'hourglass', label: 'Awaiting crew' },
|
|
34
|
+
crewed: { tone: 'ok', icon: 'check', label: 'Crewed' },
|
|
35
|
+
};
|
|
36
|
+
const sideSchema = z.object({ kind: z.enum(['server', 'client']).optional() });
|
|
37
|
+
const HTTP_FORBIDDEN = 403;
|
|
38
|
+
const HTTP_SEE_OTHER = 303;
|
|
39
|
+
const HTTP_INTERNAL_ERROR = 500;
|
|
40
|
+
const PAGE = '/outside-parties';
|
|
41
|
+
/** The scope that adds an outside MCP server: approving one needs it (0056). */
|
|
42
|
+
const ADDING_SCOPE = 'fleet:manage';
|
|
43
|
+
const TITLE = 'Outside parties';
|
|
44
|
+
const switchFormSchema = z.object({ isOn: z.enum(['true', 'false']), isOpenNetworkConfirmed: z.enum(['true', 'false']).optional() });
|
|
45
|
+
function switchCard(shown) {
|
|
46
|
+
const { isOn, canSwitch } = shown;
|
|
47
|
+
const status = isOn ? statusBadge({ tone: 'ok', icon: 'power', label: 'On' }) : statusBadge({ tone: 'ended', icon: 'powerOff', label: 'Off' });
|
|
48
|
+
const explained = isOn
|
|
49
|
+
? 'Approved outside MCP servers and clients reach the fleet, as its network rules allow.'
|
|
50
|
+
: 'No outside MCP server or client reaches the fleet, and no request for one can be approved.';
|
|
51
|
+
const control = canSwitch
|
|
52
|
+
? `<form method="post" action="${PAGE}/switch"><input type="hidden" name="isOn" value="${String(!isOn)}"><button class="${isOn ? '' : 'primary'}">${icon(isOn ? 'powerOff' : 'power', 14)}${isOn ? 'Turn off' : 'Turn on'}</button></form>`
|
|
53
|
+
: `<p class="muted">Turning them on or off needs ${SWITCHING_SCOPE}.</p>`;
|
|
54
|
+
return `<section class="card"><h2>Outside parties are ${isOn ? 'on' : 'off'} ${status}</h2><p class="muted">${explained}</p><div class="actions">${control}</div></section>`;
|
|
55
|
+
}
|
|
56
|
+
function noticeCard(notice) {
|
|
57
|
+
switch (notice.kind) {
|
|
58
|
+
case 'openNetwork':
|
|
59
|
+
return `<section class="card alert tone-attention" role="alert"><h2>${icon('alert', 16)} Open network</h2><p>${escaped(notice.message)}</p><div class="actions"><form method="post" action="${PAGE}/switch"><input type="hidden" name="isOn" value="true"><input type="hidden" name="isOpenNetworkConfirmed" value="true"><button class="destructive">Turn on anyway</button></form><a class="button" href="${PAGE}">Keep off</a></div></section>`;
|
|
60
|
+
case 'refused':
|
|
61
|
+
return `<section class="card alert tone-attention" role="alert"><p>${escaped(notice.message)}</p></section>`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function counted(count, side) {
|
|
65
|
+
return `${icon(SIDES[side].icon, 14)} ${String(count)} ${count === 1 ? SIDES[side].one : SIDES[side].many}`;
|
|
66
|
+
}
|
|
67
|
+
/** How many outside parties the fleet has, per side and per protocol, under one ring. */
|
|
68
|
+
function lead(parties) {
|
|
69
|
+
const sides = ['server', 'client'].map((side) => counted(parties.filter((party) => PARTY_KINDS[party.kind].side === side).length, side));
|
|
70
|
+
const protocols = [...new Set(parties.map((party) => PARTY_KINDS[party.kind].protocol))].map((protocol) => `<span>${escaped(protocol)} ${String(parties.filter((party) => PARTY_KINDS[party.kind].protocol === protocol).length)}</span>`);
|
|
71
|
+
const count = parties.length;
|
|
72
|
+
return `<div class="lead">${ring({ tone: count === 0 ? 'ended' : 'active', center: { count }, label: `${String(count)} outside parties` })}<div><h1>${TITLE}</h1><p class="muted counts">${[...sides, ...protocols].join(' · ')}</p></div></div>`;
|
|
73
|
+
}
|
|
74
|
+
function partyCard(party) {
|
|
75
|
+
const { protocol, side } = PARTY_KINDS[party.kind];
|
|
76
|
+
const where = party.kind === 'mcpServer' ? party.url : party.clientId;
|
|
77
|
+
return `<a class="party-card" href="${PAGE}/${encodeURIComponent(party.name)}">${partyMark(party.name)}<div class="text"><span><strong>${escaped(party.name)}</strong> <span class="tag protocol">${escaped(protocol)}</span></span><span class="tag">${icon(SIDES[side].icon, 12)}${escaped(protocol)} ${SIDES[side].one}</span><span class="tag mono" title="${escaped(where)}">${escaped(where)}</span></div><div class="facts">${statusBadge(PARTY_STATES[party.state])}${party.ownerShipId === null ? '' : `<span class="tag">${icon('users', 12)}<span class="mono">${escaped(party.ownerShipId)}</span></span>`}</div></a>`;
|
|
78
|
+
}
|
|
79
|
+
function partyList(parties, side) {
|
|
80
|
+
const filters = [
|
|
81
|
+
{ label: 'All', href: PAGE, isCurrent: side === undefined },
|
|
82
|
+
{ label: 'Servers', href: `${PAGE}?kind=server`, isCurrent: side === 'server' },
|
|
83
|
+
{ label: 'Clients', href: `${PAGE}?kind=client`, isCurrent: side === 'client' },
|
|
84
|
+
]
|
|
85
|
+
.map((filter) => `<a class="tab" href="${filter.href}"${filter.isCurrent ? ' aria-current="page"' : ''}>${filter.label}</a>`)
|
|
86
|
+
.join('');
|
|
87
|
+
const shown = side === undefined ? parties : parties.filter((party) => PARTY_KINDS[party.kind].side === side);
|
|
88
|
+
const cards = shown.length === 0 ? '<p class="muted">No outside party yet.</p>' : `<div class="party-cards">${shown.map(partyCard).join('')}</div>`;
|
|
89
|
+
return `<section style="display:grid;gap:12px"><nav class="tabs" aria-label="Show">${filters}</nav>${cards}</section>`;
|
|
90
|
+
}
|
|
91
|
+
async function renderPage(reply, page) {
|
|
92
|
+
const { context, notice } = page;
|
|
93
|
+
const caller = gatewayRouter.createCaller(context);
|
|
94
|
+
const { isOn } = await caller.outsideParties.status();
|
|
95
|
+
const parties = await caller.parties.list();
|
|
96
|
+
const actor = await context.authenticateActor({ cookie: context.cookie, crewToken: context.crewToken });
|
|
97
|
+
const canSwitch = actor.isOk && actor.value.scopes.includes(SWITCHING_SCOPE);
|
|
98
|
+
const isSignedIn = actor.isOk && actor.value.kind === 'account';
|
|
99
|
+
const canAdd = actor.isOk && actor.value.scopes.includes(ADDING_SCOPE);
|
|
100
|
+
const add = canAdd ? `<div class="actions"><a class="button primary" href="${PAGE}/add">${icon('plug', 14)}Add server</a></div>` : '';
|
|
101
|
+
const body = [lead(parties), add, notice ? noticeCard(notice) : '', switchCard({ isOn, canSwitch }), partyList(parties, page.side)].join('');
|
|
102
|
+
return reply.code(page.status ?? 200).type('text/html; charset=utf-8').header('cache-control', 'no-store').send(signalPage({ title: TITLE, tab: 'outsideParties', body, isSignedIn }));
|
|
103
|
+
}
|
|
104
|
+
function signInPage(reply, refusal) {
|
|
105
|
+
const body = signInPrompt({ message: refusal.error.message, way: refusal.way, returnTo: PAGE });
|
|
106
|
+
return reply.code(getHTTPStatusCodeFromError(refusal.error)).type('text/html; charset=utf-8').send(signalPage({ title: TITLE, body }));
|
|
107
|
+
}
|
|
108
|
+
export function registerOutsidePartiesPage(server, deps) {
|
|
109
|
+
acceptForms(server);
|
|
110
|
+
const answer = async (exchange, act) => {
|
|
111
|
+
const { request, reply } = exchange;
|
|
112
|
+
const context = deps.contextFor(request.headers.cookie);
|
|
113
|
+
try {
|
|
114
|
+
if (act) {
|
|
115
|
+
await act(gatewayRouter.createCaller(context));
|
|
116
|
+
return await reply.code(HTTP_SEE_OTHER).header('location', PAGE).send();
|
|
117
|
+
}
|
|
118
|
+
const side = sideSchema.safeParse(request.query);
|
|
119
|
+
return await renderPage(reply, { context, ...(side.success && side.data.kind !== undefined ? { side: side.data.kind } : {}) });
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (!(error instanceof TRPCError)) {
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
if (error.code === 'UNAUTHORIZED') {
|
|
126
|
+
return signInPage(reply, { way: deps.signIn, error });
|
|
127
|
+
}
|
|
128
|
+
const isInternal = error.code === 'INTERNAL_SERVER_ERROR';
|
|
129
|
+
const status = isInternal ? HTTP_INTERNAL_ERROR : getHTTPStatusCodeFromError(error);
|
|
130
|
+
const message = isInternal ? 'Internal error' : error.message;
|
|
131
|
+
const notice = error.code === 'PRECONDITION_FAILED' ? { kind: 'openNetwork', message } : { kind: 'refused', message };
|
|
132
|
+
try {
|
|
133
|
+
return await renderPage(reply, { context, status, notice });
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return reply.code(status).type('text/html; charset=utf-8').send(signalPage({ title: TITLE, body: noticeCard(notice) }));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
server.get(PAGE, (request, reply) => answer({ request, reply }));
|
|
141
|
+
server.post(`${PAGE}/switch`, (request, reply) => {
|
|
142
|
+
if (!isSameOrigin(request)) {
|
|
143
|
+
return reply.code(HTTP_FORBIDDEN).type('text/plain; charset=utf-8').send('A form for this page is sent only from this page.');
|
|
144
|
+
}
|
|
145
|
+
const form = switchFormSchema.safeParse(request.body);
|
|
146
|
+
if (!form.success) {
|
|
147
|
+
return answer({ request, reply }, () => Promise.reject(new TRPCError({ code: 'BAD_REQUEST', message: 'The form is not valid' })));
|
|
148
|
+
}
|
|
149
|
+
const input = { isOn: form.data.isOn === 'true', isOpenNetworkConfirmed: form.data.isOpenNetworkConfirmed === 'true' };
|
|
150
|
+
return answer({ request, reply }, (caller) => caller.outsideParties.set(input));
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=outside-parties-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outside-parties-page.js","sourceRoot":"","sources":["../../../src/adapters/http/outside-parties-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import { type Context } from '../trpc/router.js';
|
|
3
|
+
import { type SignInWay } from './signal.js';
|
|
4
|
+
export declare function registerOutsidePartyPage(server: FastifyInstance, deps: {
|
|
5
|
+
contextFor: (cookie: string | undefined) => Context;
|
|
6
|
+
signIn: SignInWay;
|
|
7
|
+
}): void;
|