@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 @@
|
|
|
1
|
+
{"version":3,"file":"run-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/run-party.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { FleetRefusal } from '../connection/ports.js';
|
|
3
|
+
import type { PartyStore } from '../parties/ports.js';
|
|
4
|
+
import { type DomainError } from '../shared/errors.js';
|
|
5
|
+
import { type Result } from '../shared/result.js';
|
|
6
|
+
import type { McpServers } from './ports.js';
|
|
7
|
+
import { type CallTiming, type Statement } from './statement.js';
|
|
8
|
+
/** Outbound port: the fleet's `setStatement`, called as a proxy ship's crew. */
|
|
9
|
+
export interface StatementDoor {
|
|
10
|
+
setStatement(crewToken: string, statement: Statement): Promise<Result<void, FleetRefusal>>;
|
|
11
|
+
}
|
|
12
|
+
/** Outbound port: argo's repeatable marks, by party and tool. */
|
|
13
|
+
export interface ToolMarks {
|
|
14
|
+
/** The tools of the party argo marked repeatable. */
|
|
15
|
+
repeatable(fleetId: FleetId, party: string): Promise<ReadonlySet<string>>;
|
|
16
|
+
mark(fleetId: FleetId, mark: {
|
|
17
|
+
party: string;
|
|
18
|
+
tool: string;
|
|
19
|
+
isRepeatable: boolean;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export type StateParty = (input: {
|
|
23
|
+
fleetId: FleetId;
|
|
24
|
+
name: string;
|
|
25
|
+
}) => Promise<Result<{
|
|
26
|
+
capabilities: string[];
|
|
27
|
+
}, DomainError<'NO_SUCH_PARTY' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED'>>>;
|
|
28
|
+
/**
|
|
29
|
+
* Use case: the gateway states what a party's proxy ship offers, as its
|
|
30
|
+
* crew: the tools its server lists now, with argo's marks. The whole
|
|
31
|
+
* statement replaces the one before, so a tool the server dropped is gone.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createStateParty(deps: {
|
|
34
|
+
parties: PartyStore;
|
|
35
|
+
servers: McpServers;
|
|
36
|
+
door: StatementDoor;
|
|
37
|
+
marks: ToolMarks;
|
|
38
|
+
timing: CallTiming;
|
|
39
|
+
}): StateParty;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { statementOf } from './statement.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: the gateway states what a party's proxy ship offers, as its
|
|
6
|
+
* crew: the tools its server lists now, with argo's marks. The whole
|
|
7
|
+
* statement replaces the one before, so a tool the server dropped is gone.
|
|
8
|
+
*/
|
|
9
|
+
export function createStateParty(deps) {
|
|
10
|
+
return async ({ fleetId, name }) => {
|
|
11
|
+
const party = await deps.parties.find(fleetId, name);
|
|
12
|
+
if (party?.kind !== 'mcpServer') {
|
|
13
|
+
return refuse('NO_SUCH_PARTY', `No party named ${name}`);
|
|
14
|
+
}
|
|
15
|
+
if (party.state !== 'crewed' || party.crewToken === null) {
|
|
16
|
+
return refuse('NOT_CREWED', `The gateway does not crew the proxy ship of ${name} yet`);
|
|
17
|
+
}
|
|
18
|
+
const listed = await deps.servers.listTools({ url: party.url, credential: party.credential });
|
|
19
|
+
if (!listed.isOk) {
|
|
20
|
+
return refuse('SERVER_UNREACHABLE', `The MCP server of ${name} could not be listed: ${listed.error.reason}`);
|
|
21
|
+
}
|
|
22
|
+
const statement = statementOf({ partyName: name, tools: listed.value, repeatable: await deps.marks.repeatable(fleetId, name), timing: deps.timing });
|
|
23
|
+
const stated = await deps.door.setStatement(party.crewToken, statement);
|
|
24
|
+
if (!stated.isOk) {
|
|
25
|
+
return refuse('STATEMENT_REFUSED', `The fleet refused the statement: ${stated.error.message}`);
|
|
26
|
+
}
|
|
27
|
+
return ok({ capabilities: statement.capabilities.map((capability) => capability.name) });
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=state-party.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/state-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAmC,MAAM,gBAAgB,CAAC;AAkB9E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6G;IAC5I,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,eAAe,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,YAAY,EAAE,+CAA+C,IAAI,MAAM,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,oBAAoB,EAAE,qBAAqB,IAAI,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { OutsideTool, ToolAnnotations } from './ports.js';
|
|
2
|
+
export interface Capability {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly title?: string;
|
|
5
|
+
readonly description?: string;
|
|
6
|
+
readonly inputSchema: Readonly<Record<string, unknown>>;
|
|
7
|
+
readonly outputSchema?: Readonly<Record<string, unknown>>;
|
|
8
|
+
readonly inputModes: readonly string[];
|
|
9
|
+
readonly outputModes: readonly string[];
|
|
10
|
+
readonly annotations?: ToolAnnotations;
|
|
11
|
+
/** How long a caller waits for the answer before it is answered a handle or task (interop 5.3). */
|
|
12
|
+
readonly waitMs: number;
|
|
13
|
+
/** How long a call may take before it fails: when the gateway gives up on the server (interop 3.4). */
|
|
14
|
+
readonly deadlineMs: number;
|
|
15
|
+
/** argo's mark that a call may be handed again when it died unanswered; the server's hints never set it. */
|
|
16
|
+
readonly repeatable?: true;
|
|
17
|
+
}
|
|
18
|
+
export interface Statement {
|
|
19
|
+
readonly summary: string;
|
|
20
|
+
readonly capabilities: readonly Capability[];
|
|
21
|
+
}
|
|
22
|
+
/** The gateway's own timing for a call to an outside server: how long a caller waits, and when the call fails. */
|
|
23
|
+
export interface CallTiming {
|
|
24
|
+
readonly waitMs: number;
|
|
25
|
+
readonly deadlineMs: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The statement of a party's proxy ship. Its summary names the party only:
|
|
29
|
+
* the server's URL and credential stay in the gateway (NAT both ways).
|
|
30
|
+
*/
|
|
31
|
+
export declare function statementOf(input: {
|
|
32
|
+
partyName: string;
|
|
33
|
+
tools: readonly OutsideTool[];
|
|
34
|
+
repeatable: ReadonlySet<string>;
|
|
35
|
+
timing: CallTiming;
|
|
36
|
+
}): Statement;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A proxy ship's statement (decision 0047), written from its outside MCP
|
|
3
|
+
* server's `tools/list`: each tool is one capability, with MCP's fields as
|
|
4
|
+
* the server states them (decision 0048), the content types that call it
|
|
5
|
+
* and carry its result, argo's repeatable mark (interop 5.2), and the
|
|
6
|
+
* gateway's own wait and deadline for a call (interop 3.4, 5.3).
|
|
7
|
+
*/
|
|
8
|
+
import { toolInputType, toolResultType } from './content-types.js';
|
|
9
|
+
function capabilityOf(tool, marked) {
|
|
10
|
+
return {
|
|
11
|
+
name: tool.name,
|
|
12
|
+
...(tool.title === undefined ? {} : { title: tool.title }),
|
|
13
|
+
...(tool.description === undefined ? {} : { description: tool.description }),
|
|
14
|
+
inputSchema: tool.inputSchema,
|
|
15
|
+
...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),
|
|
16
|
+
inputModes: [toolInputType(tool.name)],
|
|
17
|
+
outputModes: [toolResultType(tool.name)],
|
|
18
|
+
...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),
|
|
19
|
+
...(marked.isRepeatable ? { repeatable: true } : {}),
|
|
20
|
+
waitMs: marked.timing.waitMs,
|
|
21
|
+
deadlineMs: marked.timing.deadlineMs,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The statement of a party's proxy ship. Its summary names the party only:
|
|
26
|
+
* the server's URL and credential stay in the gateway (NAT both ways).
|
|
27
|
+
*/
|
|
28
|
+
export function statementOf(input) {
|
|
29
|
+
return {
|
|
30
|
+
summary: `${input.partyName}, an outside MCP server reached through the Aeolus gateway. Each capability is one of its tools: send its input type with the tool arguments as a JSON object, and the reply carries the tool result.`,
|
|
31
|
+
capabilities: input.tools.map((tool) => capabilityOf(tool, { isRepeatable: input.repeatable.has(tool.name), timing: input.timing })),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=statement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgCnE,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqD;IAC5F,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/E,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgH;IAC1I,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uMAAuM;QAClO,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KACrI,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { IssuedTokens, OAuthSecrets, TokenHolder } from './ports.js';
|
|
5
|
+
/** Who calls with an access token: the fleet and the client it was issued to, and whom it stands for. */
|
|
6
|
+
export type AccessTokenHolder = {
|
|
7
|
+
readonly fleetId: FleetId;
|
|
8
|
+
readonly clientId: string;
|
|
9
|
+
readonly scope: string | null;
|
|
10
|
+
} & TokenHolder;
|
|
11
|
+
export type AuthenticateAccessToken = (accessToken: string) => Promise<Result<AccessTokenHolder, {
|
|
12
|
+
kind: 'invalidToken';
|
|
13
|
+
}>>;
|
|
14
|
+
/** Whom a code or a pair stands for, alone. */
|
|
15
|
+
export declare function holderOf(held: TokenHolder): TokenHolder;
|
|
16
|
+
/**
|
|
17
|
+
* Use case: the gateway knows an MCP client by its access token: active,
|
|
18
|
+
* not expired, and issued for the gateway's own MCP endpoint (RFC 8707).
|
|
19
|
+
*/
|
|
20
|
+
export declare function createAuthenticateAccessToken(deps: {
|
|
21
|
+
tokens: IssuedTokens;
|
|
22
|
+
secrets: OAuthSecrets;
|
|
23
|
+
clock: Clock;
|
|
24
|
+
resource: string;
|
|
25
|
+
}): AuthenticateAccessToken;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { err, ok } from '../shared/result.js';
|
|
2
|
+
/** Whom a code or a pair stands for, alone. */
|
|
3
|
+
export function holderOf(held) {
|
|
4
|
+
return held.kind === 'party' ? { kind: 'party', party: held.party } : { kind: 'account', grantId: held.grantId };
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Use case: the gateway knows an MCP client by its access token: active,
|
|
8
|
+
* not expired, and issued for the gateway's own MCP endpoint (RFC 8707).
|
|
9
|
+
*/
|
|
10
|
+
export function createAuthenticateAccessToken(deps) {
|
|
11
|
+
return async (accessToken) => {
|
|
12
|
+
const pair = await deps.tokens.findByAccess(deps.secrets.hashOf(accessToken));
|
|
13
|
+
if (pair?.state !== 'active' || pair.resource !== deps.resource || pair.accessExpiresAt.getTime() <= deps.clock.now().getTime()) {
|
|
14
|
+
return err({ kind: 'invalidToken' });
|
|
15
|
+
}
|
|
16
|
+
return ok({ fleetId: pair.fleetId, clientId: pair.clientId, scope: pair.scope, ...holderOf(pair) });
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=authenticate-access-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate-access-token.js","sourceRoot":"","sources":["../../../src/core/oauth/authenticate-access-token.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAY3D,+CAA+C;AAC/C,MAAM,UAAU,QAAQ,CAAC,IAAiB;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACnH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAqF;IACjI,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9E,IAAI,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAChI,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Clock } from '../shared/clock.js';
|
|
2
|
+
import { type Result } from '../shared/result.js';
|
|
3
|
+
import type { AuthorizationCodes, IssuedTokens, OAuthClients, OAuthError, OAuthSecrets } from './ports.js';
|
|
4
|
+
/** An access token works one hour; its refresh token 30 days (orchestrator-1 on aeolus-fleet#877, Q13). */
|
|
5
|
+
export declare const ACCESS_TOKEN_LIFETIME_MS: number;
|
|
6
|
+
export declare const REFRESH_TOKEN_LIFETIME_MS: number;
|
|
7
|
+
/** The tokens a client gets. */
|
|
8
|
+
export interface IssuedPair {
|
|
9
|
+
readonly accessToken: string;
|
|
10
|
+
readonly refreshToken: string;
|
|
11
|
+
readonly expiresInSeconds: number;
|
|
12
|
+
readonly scope: string | null;
|
|
13
|
+
}
|
|
14
|
+
/** A token request's parameters, the client's credentials among them, however it sent them. */
|
|
15
|
+
export type TokenRequest = Readonly<Record<string, string | undefined>>;
|
|
16
|
+
export type ExchangeToken = (request: TokenRequest) => Promise<Result<IssuedPair, OAuthError>>;
|
|
17
|
+
/**
|
|
18
|
+
* Use case: a client takes its code for tokens, or refreshes them (OAuth
|
|
19
|
+
* 2.1). A confidential client proves its secret; a public one, or one known
|
|
20
|
+
* by its metadata document, needs none, as PKCE binds the code to it. A code
|
|
21
|
+
* is taken once: a second try revokes every token it gave. A refresh token
|
|
22
|
+
* is taken once too: the pair rotates, and a rotated one coming again
|
|
23
|
+
* revokes its whole family.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createExchangeToken(deps: {
|
|
26
|
+
clients: OAuthClients;
|
|
27
|
+
codes: AuthorizationCodes;
|
|
28
|
+
tokens: IssuedTokens;
|
|
29
|
+
secrets: OAuthSecrets;
|
|
30
|
+
clock: Clock;
|
|
31
|
+
resource: string;
|
|
32
|
+
}): ExchangeToken;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { err, ok } from '../shared/result.js';
|
|
2
|
+
import { holderOf } from './authenticate-access-token.js';
|
|
3
|
+
/** An access token works one hour; its refresh token 30 days (orchestrator-1 on aeolus-fleet#877, Q13). */
|
|
4
|
+
export const ACCESS_TOKEN_LIFETIME_MS = 60 * 60_000;
|
|
5
|
+
export const REFRESH_TOKEN_LIFETIME_MS = 30 * 24 * 60 * 60_000;
|
|
6
|
+
const MS_PER_SECOND = 1000;
|
|
7
|
+
function refusal(error, description) {
|
|
8
|
+
return err({ error, description });
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Use case: a client takes its code for tokens, or refreshes them (OAuth
|
|
12
|
+
* 2.1). A confidential client proves its secret; a public one, or one known
|
|
13
|
+
* by its metadata document, needs none, as PKCE binds the code to it. A code
|
|
14
|
+
* is taken once: a second try revokes every token it gave. A refresh token
|
|
15
|
+
* is taken once too: the pair rotates, and a rotated one coming again
|
|
16
|
+
* revokes its whole family.
|
|
17
|
+
*/
|
|
18
|
+
export function createExchangeToken(deps) {
|
|
19
|
+
/** The client is who it says, as far as it has a secret. */
|
|
20
|
+
const isAuthenticated = async (request) => {
|
|
21
|
+
const clientId = request.client_id;
|
|
22
|
+
if (clientId === undefined) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const secretHash = (await deps.clients.find(clientId))?.secretHash ?? null;
|
|
26
|
+
if (secretHash === null) {
|
|
27
|
+
return request.client_secret === undefined;
|
|
28
|
+
}
|
|
29
|
+
return request.client_secret !== undefined && deps.secrets.hashOf(request.client_secret) === secretHash;
|
|
30
|
+
};
|
|
31
|
+
const issue = async (from) => {
|
|
32
|
+
const accessToken = deps.secrets.newSecret();
|
|
33
|
+
const refreshToken = deps.secrets.newSecret();
|
|
34
|
+
const now = deps.clock.now().getTime();
|
|
35
|
+
await deps.tokens.save({
|
|
36
|
+
...from,
|
|
37
|
+
accessHash: deps.secrets.hashOf(accessToken),
|
|
38
|
+
accessExpiresAt: new Date(now + ACCESS_TOKEN_LIFETIME_MS),
|
|
39
|
+
refreshHash: deps.secrets.hashOf(refreshToken),
|
|
40
|
+
refreshExpiresAt: new Date(now + REFRESH_TOKEN_LIFETIME_MS),
|
|
41
|
+
});
|
|
42
|
+
return { accessToken, refreshToken, expiresInSeconds: ACCESS_TOKEN_LIFETIME_MS / MS_PER_SECOND, scope: from.scope };
|
|
43
|
+
};
|
|
44
|
+
const fromCode = async (request) => {
|
|
45
|
+
const { code, code_verifier: verifier } = request;
|
|
46
|
+
if (code === undefined || verifier === undefined) {
|
|
47
|
+
return refusal('invalid_request', 'A code and its PKCE verifier are required');
|
|
48
|
+
}
|
|
49
|
+
if (request.resource !== undefined && request.resource !== deps.resource) {
|
|
50
|
+
return refusal('invalid_target', `The resource must be ${deps.resource}`);
|
|
51
|
+
}
|
|
52
|
+
const taken = await deps.codes.take(deps.secrets.hashOf(code));
|
|
53
|
+
if (!taken) {
|
|
54
|
+
return refusal('invalid_grant', 'No such code');
|
|
55
|
+
}
|
|
56
|
+
if (taken.wasUsed) {
|
|
57
|
+
await deps.tokens.revokeIssuedBy(taken.code.codeHash);
|
|
58
|
+
return refusal('invalid_grant', 'The code was used before; the tokens it gave are revoked');
|
|
59
|
+
}
|
|
60
|
+
const issued = taken.code;
|
|
61
|
+
const isValid = issued.expiresAt.getTime() > deps.clock.now().getTime() &&
|
|
62
|
+
issued.clientId === request.client_id &&
|
|
63
|
+
issued.redirectUri === request.redirect_uri &&
|
|
64
|
+
deps.secrets.challengeOf(verifier) === issued.codeChallenge;
|
|
65
|
+
if (!isValid) {
|
|
66
|
+
return refusal('invalid_grant', 'The code is expired, or was issued to another client, redirect URI or verifier');
|
|
67
|
+
}
|
|
68
|
+
const { codeHash, fleetId, clientId, resource, scope } = issued;
|
|
69
|
+
return ok(await issue({ familyId: codeHash, codeHash, fleetId, clientId, resource, scope, ...holderOf(issued) }));
|
|
70
|
+
};
|
|
71
|
+
const fromRefreshToken = async (request) => {
|
|
72
|
+
if (request.refresh_token === undefined) {
|
|
73
|
+
return refusal('invalid_request', 'A refresh token is required');
|
|
74
|
+
}
|
|
75
|
+
const refreshHash = deps.secrets.hashOf(request.refresh_token);
|
|
76
|
+
const pair = await deps.tokens.findByRefresh(refreshHash);
|
|
77
|
+
if (!pair || pair.clientId !== request.client_id || pair.refreshExpiresAt.getTime() <= deps.clock.now().getTime() || pair.state === 'revoked') {
|
|
78
|
+
return refusal('invalid_grant', 'No such refresh token for this client, or it expired');
|
|
79
|
+
}
|
|
80
|
+
if (!(await deps.tokens.rotate(refreshHash))) {
|
|
81
|
+
await deps.tokens.revokeFamily(pair.familyId);
|
|
82
|
+
return refusal('invalid_grant', 'The refresh token was used before; its tokens are revoked');
|
|
83
|
+
}
|
|
84
|
+
const { familyId, codeHash, fleetId, clientId, resource, scope } = pair;
|
|
85
|
+
return ok(await issue({ familyId, codeHash, fleetId, clientId, resource, scope, ...holderOf(pair) }));
|
|
86
|
+
};
|
|
87
|
+
return async (request) => {
|
|
88
|
+
const grantType = request.grant_type;
|
|
89
|
+
if (grantType !== 'authorization_code' && grantType !== 'refresh_token') {
|
|
90
|
+
return refusal('unsupported_grant_type', 'Only authorization_code and refresh_token are served');
|
|
91
|
+
}
|
|
92
|
+
if (!(await isAuthenticated(request))) {
|
|
93
|
+
return refusal('invalid_client', 'The client could not be authenticated');
|
|
94
|
+
}
|
|
95
|
+
return grantType === 'authorization_code' ? fromCode(request) : fromRefreshToken(request);
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=exchange-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-token.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import type { AuthorizationCodes, OAuthSecrets, TokenHolder } from './ports.js';
|
|
4
|
+
import type { AuthorizationRequest } from './read-authorization.js';
|
|
5
|
+
/** How long a code may be taken for tokens: one minute, within OAuth's ten (RFC 6749, 4.1.2). */
|
|
6
|
+
export declare const CODE_LIFETIME_MS = 60000;
|
|
7
|
+
/** The client's redirect URI with the answer's parameters added, its own query kept. */
|
|
8
|
+
export declare function redirectWith(redirectUri: string, parameters: Record<string, string | null>): string;
|
|
9
|
+
/**
|
|
10
|
+
* Issues a code bound to the client, its redirect URI, its PKCE challenge,
|
|
11
|
+
* the resource and whom it stands for, in the fleet; answers where the client
|
|
12
|
+
* is sent back with it and with the issuer (RFC 9207).
|
|
13
|
+
*/
|
|
14
|
+
export declare function issueCode(deps: {
|
|
15
|
+
codes: AuthorizationCodes;
|
|
16
|
+
secrets: OAuthSecrets;
|
|
17
|
+
clock: Clock;
|
|
18
|
+
issuer: string;
|
|
19
|
+
}, issued: {
|
|
20
|
+
fleetId: FleetId;
|
|
21
|
+
authorization: AuthorizationRequest;
|
|
22
|
+
holder: TokenHolder;
|
|
23
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** How long a code may be taken for tokens: one minute, within OAuth's ten (RFC 6749, 4.1.2). */
|
|
2
|
+
export const CODE_LIFETIME_MS = 60_000;
|
|
3
|
+
/** The client's redirect URI with the answer's parameters added, its own query kept. */
|
|
4
|
+
export function redirectWith(redirectUri, parameters) {
|
|
5
|
+
const url = new URL(redirectUri);
|
|
6
|
+
for (const [name, value] of Object.entries(parameters)) {
|
|
7
|
+
if (value !== null) {
|
|
8
|
+
url.searchParams.append(name, value);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return url.toString();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Issues a code bound to the client, its redirect URI, its PKCE challenge,
|
|
15
|
+
* the resource and whom it stands for, in the fleet; answers where the client
|
|
16
|
+
* is sent back with it and with the issuer (RFC 9207).
|
|
17
|
+
*/
|
|
18
|
+
export async function issueCode(deps, issued) {
|
|
19
|
+
const { fleetId, authorization, holder } = issued;
|
|
20
|
+
const code = deps.secrets.newSecret();
|
|
21
|
+
await deps.codes.save({
|
|
22
|
+
codeHash: deps.secrets.hashOf(code),
|
|
23
|
+
fleetId,
|
|
24
|
+
clientId: authorization.clientId,
|
|
25
|
+
redirectUri: authorization.redirectUri,
|
|
26
|
+
codeChallenge: authorization.codeChallenge,
|
|
27
|
+
resource: authorization.resource,
|
|
28
|
+
scope: authorization.scope,
|
|
29
|
+
expiresAt: new Date(deps.clock.now().getTime() + CODE_LIFETIME_MS),
|
|
30
|
+
...holder,
|
|
31
|
+
});
|
|
32
|
+
return redirectWith(authorization.redirectUri, { code, state: authorization.state, iss: deps.issuer });
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=issue-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-code.js","sourceRoot":"","sources":["../../../src/core/oauth/issue-code.ts"],"names":[],"mappings":"AAMA,iGAAiG;AACjG,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,wFAAwF;AACxF,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,UAAyC;IACzF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAwF,EACxF,MAAsF;IAEtF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IACtC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,OAAO;QACP,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,aAAa,EAAE,aAAa,CAAC,aAAa;QAC1C,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC;QAClE,GAAG,MAAM;KACV,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACzG,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gateway's OAuth 2.1 authorization server for outside MCP clients
|
|
3
|
+
* (interop 3.1, MCP 2026-07-28 authorization): its clients, the codes it
|
|
4
|
+
* issues, the tokens it issues, and the secrets behind them.
|
|
5
|
+
*/
|
|
6
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
7
|
+
import type { Result } from '../shared/result.js';
|
|
8
|
+
/** A client argo pre-registered for its fleet. A confidential one has a secret, kept only as its hash. */
|
|
9
|
+
export interface OAuthClient {
|
|
10
|
+
readonly clientId: string;
|
|
11
|
+
readonly fleetId: FleetId;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly redirectUris: readonly string[];
|
|
14
|
+
readonly secretHash: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface OAuthClients {
|
|
17
|
+
find(clientId: string): Promise<OAuthClient | undefined>;
|
|
18
|
+
save(client: OAuthClient): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/** Outbound port: a client's metadata document (CIMD), fetched from its client id URL, as JSON not yet read. */
|
|
21
|
+
export interface ClientMetadataDocuments {
|
|
22
|
+
fetch(url: string): Promise<Result<unknown, {
|
|
23
|
+
reason: string;
|
|
24
|
+
}>>;
|
|
25
|
+
}
|
|
26
|
+
/** A code argo's approval issued: used once, within its minute, by the client and redirect URI it was issued to. */
|
|
27
|
+
/**
|
|
28
|
+
* Whom a code and the tokens it leads to stand for: a party argo approved,
|
|
29
|
+
* the proxy ship its client calls the fleet as; or an account a person
|
|
30
|
+
* signed in as through pagasae, by its grant (decision 0054).
|
|
31
|
+
*/
|
|
32
|
+
export type TokenHolder = {
|
|
33
|
+
readonly kind: 'party';
|
|
34
|
+
readonly party: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: 'account';
|
|
37
|
+
readonly grantId: string;
|
|
38
|
+
};
|
|
39
|
+
export type AuthorizationCode = {
|
|
40
|
+
readonly codeHash: string;
|
|
41
|
+
readonly fleetId: FleetId;
|
|
42
|
+
readonly clientId: string;
|
|
43
|
+
readonly redirectUri: string;
|
|
44
|
+
/** The PKCE challenge, S256. */
|
|
45
|
+
readonly codeChallenge: string;
|
|
46
|
+
readonly resource: string;
|
|
47
|
+
readonly scope: string | null;
|
|
48
|
+
readonly expiresAt: Date;
|
|
49
|
+
} & TokenHolder;
|
|
50
|
+
export interface AuthorizationCodes {
|
|
51
|
+
save(code: AuthorizationCode): Promise<void>;
|
|
52
|
+
/** Marks the code used, at most once even under a race: the code, and whether it had been used before. */
|
|
53
|
+
take(codeHash: string): Promise<{
|
|
54
|
+
code: AuthorizationCode;
|
|
55
|
+
wasUsed: boolean;
|
|
56
|
+
} | undefined>;
|
|
57
|
+
}
|
|
58
|
+
/** An access token and its refresh token, issued together; a family is every pair one code led to. */
|
|
59
|
+
export type TokenPair = {
|
|
60
|
+
readonly familyId: string;
|
|
61
|
+
readonly codeHash: string;
|
|
62
|
+
readonly fleetId: FleetId;
|
|
63
|
+
readonly clientId: string;
|
|
64
|
+
readonly resource: string;
|
|
65
|
+
readonly scope: string | null;
|
|
66
|
+
readonly accessHash: string;
|
|
67
|
+
readonly accessExpiresAt: Date;
|
|
68
|
+
readonly refreshHash: string;
|
|
69
|
+
readonly refreshExpiresAt: Date;
|
|
70
|
+
} & TokenHolder;
|
|
71
|
+
export interface IssuedTokens {
|
|
72
|
+
/** A new pair, active. */
|
|
73
|
+
save(pair: TokenPair): Promise<void>;
|
|
74
|
+
findByAccess(accessHash: string): Promise<(TokenPair & {
|
|
75
|
+
state: TokenState;
|
|
76
|
+
}) | undefined>;
|
|
77
|
+
findByRefresh(refreshHash: string): Promise<(TokenPair & {
|
|
78
|
+
state: TokenState;
|
|
79
|
+
}) | undefined>;
|
|
80
|
+
/** Marks an active pair rotated, at most once even under a race: whether this call did. */
|
|
81
|
+
rotate(refreshHash: string): Promise<boolean>;
|
|
82
|
+
revokeFamily(familyId: string): Promise<void>;
|
|
83
|
+
revokeIssuedBy(codeHash: string): Promise<void>;
|
|
84
|
+
/** Revokes every pair that stands for the account grant in the fleet: its person signs in again. */
|
|
85
|
+
revokeGrant(fleetId: FleetId, grantId: string): Promise<void>;
|
|
86
|
+
/** Revokes every pair that stands for the party in the fleet: its client is refused at its next call. */
|
|
87
|
+
revokeParty(fleetId: FleetId, party: string): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
/** active: in use; rotated: its refresh token was traded for a new pair; revoked: refused for good. */
|
|
90
|
+
export type TokenState = 'active' | 'rotated' | 'revoked';
|
|
91
|
+
/** Outbound port: the secrets the server issues, how it keeps them, and PKCE's S256. */
|
|
92
|
+
export interface OAuthSecrets {
|
|
93
|
+
/** A new random secret, safe in a URL. */
|
|
94
|
+
newSecret(): string;
|
|
95
|
+
/** The hash a secret is kept as, and looked up by. */
|
|
96
|
+
hashOf(secret: string): string;
|
|
97
|
+
/** PKCE S256: BASE64URL(SHA256(verifier)). */
|
|
98
|
+
challengeOf(verifier: string): string;
|
|
99
|
+
}
|
|
100
|
+
/** OAuth's error codes the gateway answers (RFC 6749, RFC 8707). */
|
|
101
|
+
export type OAuthErrorCode = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'unsupported_grant_type' | 'unsupported_response_type' | 'invalid_target' | 'access_denied';
|
|
102
|
+
export interface OAuthError {
|
|
103
|
+
readonly error: OAuthErrorCode;
|
|
104
|
+
readonly description: string;
|
|
105
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/oauth/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type Result } from '../shared/result.js';
|
|
3
|
+
import type { ClientMetadataDocuments, OAuthClients, OAuthErrorCode } from './ports.js';
|
|
4
|
+
/** An authorization request the gateway read and found valid, for argo to approve or deny. */
|
|
5
|
+
export interface AuthorizationRequest {
|
|
6
|
+
readonly clientId: string;
|
|
7
|
+
readonly clientName: string;
|
|
8
|
+
/** The fleet a pre-registered client belongs to; null for a client known by its metadata document. */
|
|
9
|
+
readonly clientFleetId: FleetId | null;
|
|
10
|
+
readonly redirectUri: string;
|
|
11
|
+
readonly codeChallenge: string;
|
|
12
|
+
readonly resource: string;
|
|
13
|
+
readonly scope: string | null;
|
|
14
|
+
readonly state: string | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Why a request is refused:
|
|
18
|
+
* - invalidClient: the client or its redirect URI is not known, so the page says so and sends nobody anywhere (RFC 6749, 4.1.2.1);
|
|
19
|
+
* - redirect: the client is known, so it is sent back to its redirect URI with the error.
|
|
20
|
+
*/
|
|
21
|
+
export type AuthorizationRefusal = {
|
|
22
|
+
readonly kind: 'invalidClient';
|
|
23
|
+
readonly message: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'redirect';
|
|
26
|
+
readonly redirectUri: string;
|
|
27
|
+
readonly error: OAuthErrorCode;
|
|
28
|
+
readonly description: string;
|
|
29
|
+
readonly state: string | null;
|
|
30
|
+
};
|
|
31
|
+
export type ReadAuthorization = (request: Readonly<Record<string, string | undefined>>) => Promise<Result<AuthorizationRequest, AuthorizationRefusal>>;
|
|
32
|
+
/**
|
|
33
|
+
* Use case: the gateway reads an authorization request from an MCP client
|
|
34
|
+
* (OAuth 2.1 with PKCE, MCP 2026-07-28). The client is pre-registered, or
|
|
35
|
+
* known by its metadata document (CIMD), fetched from its client id. Only
|
|
36
|
+
* the S256 challenge is taken, and the resource must be the gateway's MCP
|
|
37
|
+
* endpoint (RFC 8707), so a token is bound to it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createReadAuthorization(deps: {
|
|
40
|
+
clients: OAuthClients;
|
|
41
|
+
documents: ClientMetadataDocuments;
|
|
42
|
+
resource: string;
|
|
43
|
+
}): ReadAuthorization;
|