@aeolus-fleet/gateway 0.32.2 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -3
- package/dist/adapters/crypto/slack-install-seals.d.ts +3 -0
- package/dist/adapters/crypto/slack-install-seals.js +15 -0
- package/dist/adapters/crypto/slack-install-seals.js.map +1 -0
- package/dist/adapters/crypto/slack-link-seals.d.ts +3 -0
- package/dist/adapters/crypto/slack-link-seals.js +15 -0
- package/dist/adapters/crypto/slack-link-seals.js.map +1 -0
- package/dist/adapters/crypto/slack-signatures.d.ts +3 -0
- package/dist/adapters/crypto/slack-signatures.js +14 -0
- package/dist/adapters/crypto/slack-signatures.js.map +1 -0
- package/dist/adapters/fleet/slack-ships.d.ts +15 -0
- package/dist/adapters/fleet/slack-ships.js +32 -0
- package/dist/adapters/fleet/slack-ships.js.map +1 -0
- package/dist/adapters/http/mcp-endpoint.js +1 -1
- package/dist/adapters/http/mcp-endpoint.js.map +1 -1
- package/dist/adapters/http/oauth-routes.d.ts +4 -1
- package/dist/adapters/http/oauth-routes.js +21 -9
- package/dist/adapters/http/oauth-routes.js.map +1 -1
- package/dist/adapters/http/openai-apps-challenge.d.ts +10 -0
- package/dist/adapters/http/openai-apps-challenge.js +9 -0
- package/dist/adapters/http/openai-apps-challenge.js.map +1 -0
- package/dist/adapters/http/person-tools.d.ts +24 -1
- package/dist/adapters/http/person-tools.js +43 -11
- package/dist/adapters/http/person-tools.js.map +1 -1
- package/dist/adapters/http/slack-routes.d.ts +28 -0
- package/dist/adapters/http/slack-routes.js +173 -0
- package/dist/adapters/http/slack-routes.js.map +1 -0
- package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
- package/dist/adapters/prisma/fleet-forgetter.js +2 -2
- package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +25 -0
- package/dist/adapters/prisma/generated/client.d.ts +25 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +55 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +452 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +72 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +76 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +72 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/SlackApp.d.ts +1229 -0
- package/dist/adapters/prisma/generated/models/SlackApp.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackApp.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SlackEvent.d.ts +1229 -0
- package/dist/adapters/prisma/generated/models/SlackEvent.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackEvent.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SlackLink.d.ts +1126 -0
- package/dist/adapters/prisma/generated/models/SlackLink.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackLink.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SlackPost.d.ts +1174 -0
- package/dist/adapters/prisma/generated/models/SlackPost.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackPost.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SlackWorkspace.d.ts +1143 -0
- package/dist/adapters/prisma/generated/models/SlackWorkspace.js +2 -0
- package/dist/adapters/prisma/generated/models/SlackWorkspace.js.map +1 -0
- package/dist/adapters/prisma/generated/models.d.ts +5 -0
- package/dist/adapters/prisma/slack-events.d.ts +8 -0
- package/dist/adapters/prisma/slack-events.js +55 -0
- package/dist/adapters/prisma/slack-events.js.map +1 -0
- package/dist/adapters/prisma/slack-links.d.ts +8 -0
- package/dist/adapters/prisma/slack-links.js +49 -0
- package/dist/adapters/prisma/slack-links.js.map +1 -0
- package/dist/adapters/prisma/slack-posts.d.ts +4 -0
- package/dist/adapters/prisma/slack-posts.js +42 -0
- package/dist/adapters/prisma/slack-posts.js.map +1 -0
- package/dist/adapters/prisma/slack-stores.d.ts +6 -0
- package/dist/adapters/prisma/slack-stores.js +115 -0
- package/dist/adapters/prisma/slack-stores.js.map +1 -0
- package/dist/adapters/slack/slack-call.d.ts +15 -0
- package/dist/adapters/slack/slack-call.js +41 -0
- package/dist/adapters/slack/slack-call.js.map +1 -0
- package/dist/adapters/slack/slack-messages.d.ts +4 -0
- package/dist/adapters/slack/slack-messages.js +53 -0
- package/dist/adapters/slack/slack-messages.js.map +1 -0
- package/dist/adapters/slack/slack-sign-in.d.ts +4 -0
- package/dist/adapters/slack/slack-sign-in.js +33 -0
- package/dist/adapters/slack/slack-sign-in.js.map +1 -0
- package/dist/adapters/slack/slack-tooling.d.ts +6 -0
- package/dist/adapters/slack/slack-tooling.js +68 -0
- package/dist/adapters/slack/slack-tooling.js.map +1 -0
- package/dist/adapters/trpc/router.d.ts +149 -1
- package/dist/adapters/trpc/router.js +117 -6
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/app.d.ts +4 -0
- package/dist/app.js +143 -15
- package/dist/app.js.map +1 -1
- package/dist/bin/aeolus-gateway.js +2 -0
- package/dist/bin/aeolus-gateway.js.map +1 -1
- package/dist/config.d.ts +8 -0
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/core/connection/connect.d.ts +12 -0
- package/dist/core/connection/connect.js +11 -4
- package/dist/core/connection/connect.js.map +1 -1
- package/dist/core/connection/declare-gateway-scopes.d.ts +15 -0
- package/dist/core/connection/declare-gateway-scopes.js +23 -0
- package/dist/core/connection/declare-gateway-scopes.js.map +1 -0
- package/dist/core/oauth/exchange-token.d.ts +1 -0
- package/dist/core/oauth/exchange-token.js +4 -3
- package/dist/core/oauth/exchange-token.js.map +1 -1
- package/dist/core/oauth/read-authorization.d.ts +3 -3
- package/dist/core/oauth/read-authorization.js +6 -5
- package/dist/core/oauth/read-authorization.js.map +1 -1
- package/dist/core/people/ports.d.ts +23 -2
- package/dist/core/people/wake-person.d.ts +9 -2
- package/dist/core/people/wake-person.js +33 -9
- package/dist/core/people/wake-person.js.map +1 -1
- package/dist/core/shared/errors.d.ts +1 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/sign-in/start-sign-in.d.ts +4 -1
- package/dist/core/sign-in/start-sign-in.js +8 -2
- package/dist/core/sign-in/start-sign-in.js.map +1 -1
- package/dist/core/slack/answer-in-slack.d.ts +36 -0
- package/dist/core/slack/answer-in-slack.js +51 -0
- package/dist/core/slack/answer-in-slack.js.map +1 -0
- package/dist/core/slack/complete-install.d.ts +27 -0
- package/dist/core/slack/complete-install.js +36 -0
- package/dist/core/slack/complete-install.js.map +1 -0
- package/dist/core/slack/complete-link.d.ts +41 -0
- package/dist/core/slack/complete-link.js +64 -0
- package/dist/core/slack/complete-link.js.map +1 -0
- package/dist/core/slack/connect-slack.d.ts +34 -0
- package/dist/core/slack/connect-slack.js +54 -0
- package/dist/core/slack/connect-slack.js.map +1 -0
- package/dist/core/slack/disconnect-slack.d.ts +21 -0
- package/dist/core/slack/disconnect-slack.js +31 -0
- package/dist/core/slack/disconnect-slack.js.map +1 -0
- package/dist/core/slack/expose-ship.d.ts +35 -0
- package/dist/core/slack/expose-ship.js +59 -0
- package/dist/core/slack/expose-ship.js.map +1 -0
- package/dist/core/slack/follow-exposed-ships.d.ts +20 -0
- package/dist/core/slack/follow-exposed-ships.js +43 -0
- package/dist/core/slack/follow-exposed-ships.js.map +1 -0
- package/dist/core/slack/gateway-bot.d.ts +20 -0
- package/dist/core/slack/gateway-bot.js +22 -0
- package/dist/core/slack/gateway-bot.js.map +1 -0
- package/dist/core/slack/kept-slack-event.d.ts +30 -0
- package/dist/core/slack/kept-slack-event.js +5 -0
- package/dist/core/slack/kept-slack-event.js.map +1 -0
- package/dist/core/slack/list-exposable.d.ts +25 -0
- package/dist/core/slack/list-exposable.js +32 -0
- package/dist/core/slack/list-exposable.js.map +1 -0
- package/dist/core/slack/ports.d.ts +288 -0
- package/dist/core/slack/ports.js +2 -0
- package/dist/core/slack/ports.js.map +1 -0
- package/dist/core/slack/read-slack-link.d.ts +23 -0
- package/dist/core/slack/read-slack-link.js +20 -0
- package/dist/core/slack/read-slack-link.js.map +1 -0
- package/dist/core/slack/read-slack.d.ts +42 -0
- package/dist/core/slack/read-slack.js +35 -0
- package/dist/core/slack/read-slack.js.map +1 -0
- package/dist/core/slack/remove-bot.d.ts +24 -0
- package/dist/core/slack/remove-bot.js +33 -0
- package/dist/core/slack/remove-bot.js.map +1 -0
- package/dist/core/slack/rotate-configuration-tokens.d.ts +13 -0
- package/dist/core/slack/rotate-configuration-tokens.js +14 -0
- package/dist/core/slack/rotate-configuration-tokens.js.map +1 -0
- package/dist/core/slack/send-slack-events.d.ts +29 -0
- package/dist/core/slack/send-slack-events.js +78 -0
- package/dist/core/slack/send-slack-events.js.map +1 -0
- package/dist/core/slack/ship-bot.d.ts +23 -0
- package/dist/core/slack/ship-bot.js +25 -0
- package/dist/core/slack/ship-bot.js.map +1 -0
- package/dist/core/slack/show-all-in-slack.d.ts +16 -0
- package/dist/core/slack/show-all-in-slack.js +18 -0
- package/dist/core/slack/show-all-in-slack.js.map +1 -0
- package/dist/core/slack/show-in-slack.d.ts +38 -0
- package/dist/core/slack/show-in-slack.js +154 -0
- package/dist/core/slack/show-in-slack.js.map +1 -0
- package/dist/core/slack/slack-app.d.ts +77 -0
- package/dist/core/slack/slack-app.js +53 -0
- package/dist/core/slack/slack-app.js.map +1 -0
- package/dist/core/slack/slack-event.d.ts +51 -0
- package/dist/core/slack/slack-event.js +18 -0
- package/dist/core/slack/slack-event.js.map +1 -0
- package/dist/core/slack/slack-link.d.ts +20 -0
- package/dist/core/slack/slack-link.js +2 -0
- package/dist/core/slack/slack-link.js.map +1 -0
- package/dist/core/slack/slack-markdown.d.ts +13 -0
- package/dist/core/slack/slack-markdown.js +27 -0
- package/dist/core/slack/slack-markdown.js.map +1 -0
- package/dist/core/slack/slack-post-of.d.ts +27 -0
- package/dist/core/slack/slack-post-of.js +71 -0
- package/dist/core/slack/slack-post-of.js.map +1 -0
- package/dist/core/slack/slack-post.d.ts +31 -0
- package/dist/core/slack/slack-post.js +5 -0
- package/dist/core/slack/slack-post.js.map +1 -0
- package/dist/core/slack/slack-request.d.ts +17 -0
- package/dist/core/slack/slack-request.js +10 -0
- package/dist/core/slack/slack-request.js.map +1 -0
- package/dist/core/slack/slack-workspace.d.ts +36 -0
- package/dist/core/slack/slack-workspace.js +7 -0
- package/dist/core/slack/slack-workspace.js.map +1 -0
- package/dist/core/slack/start-install.d.ts +43 -0
- package/dist/core/slack/start-install.js +57 -0
- package/dist/core/slack/start-install.js.map +1 -0
- package/dist/core/slack/start-link.d.ts +32 -0
- package/dist/core/slack/start-link.js +46 -0
- package/dist/core/slack/start-link.js.map +1 -0
- package/dist/core/slack/stop-slack-link.d.ts +16 -0
- package/dist/core/slack/stop-slack-link.js +9 -0
- package/dist/core/slack/stop-slack-link.js.map +1 -0
- package/dist/core/slack/take-access-token.d.ts +25 -0
- package/dist/core/slack/take-access-token.js +45 -0
- package/dist/core/slack/take-access-token.js.map +1 -0
- package/dist/core/slack/take-slack-event.d.ts +47 -0
- package/dist/core/slack/take-slack-event.js +75 -0
- package/dist/core/slack/take-slack-event.js.map +1 -0
- package/dist/core/slack/unlink-slack.d.ts +9 -0
- package/dist/core/slack/unlink-slack.js +9 -0
- package/dist/core/slack/unlink-slack.js.map +1 -0
- package/dist/slack-event-worker.d.ts +21 -0
- package/dist/slack-event-worker.js +38 -0
- package/dist/slack-event-worker.js.map +1 -0
- package/dist/slack-token-worker.d.ts +19 -0
- package/dist/slack-token-worker.js +24 -0
- package/dist/slack-token-worker.js.map +1 -0
- package/package.json +3 -2
- package/src/adapters/prisma/migrations/20261027090000_slack_workspaces/migration.sql +30 -0
- package/src/adapters/prisma/migrations/20261027150000_slack_bots/migration.sql +6 -0
- package/src/adapters/prisma/migrations/20261027200000_slack_links/migration.sql +15 -0
- package/src/adapters/prisma/migrations/20261028090000_slack_events/migration.sql +18 -0
- package/src/adapters/prisma/migrations/20261028150000_slack_posts/migration.sql +25 -0
- package/src/adapters/prisma/schema.prisma +103 -0
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +5 -0
- package/web/.next/build-manifest.json +51 -3
- package/web/.next/diagnostics/route-bundle-stats.json +143 -70
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/routes-manifest.json +30 -0
- package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +2 -2
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +2 -2
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +3 -3
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/(console)/outside-parties/add/page.js +2 -2
- package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/outside-parties/page.js +3 -3
- package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/changes/route.js +2 -2
- package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/focus/route.js +2 -2
- package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +27 -7
- package/web/.next/server/app/(console)/overview/page.js +2 -2
- package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
- package/web/.next/server/app/(console)/parties/page.js +3 -3
- package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/disconnect/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/slack/disconnect/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/slack/disconnect/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/slack/disconnect/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +65 -0
- package/web/.next/server/app/(console)/slack/disconnect/page.js +22 -0
- package/web/.next/server/app/(console)/slack/disconnect/page.js.map +5 -0
- package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/slack/expose/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/slack/expose/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/slack/expose/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/slack/expose/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +65 -0
- package/web/.next/server/app/(console)/slack/expose/page.js +22 -0
- package/web/.next/server/app/(console)/slack/expose/page.js.map +5 -0
- package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/slack/link/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/slack/link/route/build-manifest.json +12 -0
- package/web/.next/server/app/(console)/slack/link/route/server-reference-manifest.json +4 -0
- package/web/.next/server/app/(console)/slack/link/route.js +7 -0
- package/web/.next/server/app/(console)/slack/link/route.js.map +5 -0
- package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -0
- package/web/.next/server/app/(console)/slack/link/route_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/slack/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/slack/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/slack/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/slack/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +65 -0
- package/web/.next/server/app/(console)/slack/page.js +22 -0
- package/web/.next/server/app/(console)/slack/page.js.map +5 -0
- package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/(console)/slack/remove/page/app-paths-manifest.json +3 -0
- package/web/.next/server/app/(console)/slack/remove/page/build-manifest.json +23 -0
- package/web/.next/server/app/(console)/slack/remove/page/next-font-manifest.json +11 -0
- package/web/.next/server/app/(console)/slack/remove/page/react-loadable-manifest.json +1 -0
- package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +65 -0
- package/web/.next/server/app/(console)/slack/remove/page.js +22 -0
- package/web/.next/server/app/(console)/slack/remove/page.js.map +5 -0
- package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -0
- package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +3 -0
- package/web/.next/server/app/_global-error/page.js +1 -1
- package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +5 -0
- package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js +369 -0
- package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js +369 -0
- package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js.map +1 -0
- package/web/.next/server/chunks/_20ne4s-e_jzxp._.js +3 -0
- package/web/.next/server/chunks/_20ne4s-e_jzxp._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js → [root-of-the-server]__0a8db18tyk__5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js.map → [root-of-the-server]__0a8db18tyk__5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e59elwbtqr-6._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__10y66e1xx8xiq._.js.map → [root-of-the-server]__0e59elwbtqr-6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1-c9wugbbwsp3._.js → [root-of-the-server]__0kb1gl5t8kz4l._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js → [root-of-the-server]__0y0jwufd7xjsv._.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js → [root-of-the-server]__19ecatcacd6t9._.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0w2ptjht34s6t._.js → _0wukvn3-ht3ps._.js} +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
- package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js → _1e2o809f0ekry._.js} +2 -2
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +1 -1
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js +3 -0
- package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js +3 -0
- package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js +3 -0
- package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0qgev3ti257yj._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_0_jk9eione6lx._.js.map → web_0qgev3ti257yj._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
- package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_15vnjj3s0z3fa._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_1wcpaty_bz55q._.js.map → web_15vnjj3s0z3fa._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js +3 -0
- package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_10xz3ojtvfi7h._.js.map → web_features_0rd6357w-eo50._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_1m5g9a6mwrsd-._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_085cv0gogrxxf._.js.map → web_features_1m5g9a6mwrsd-._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_1rwkgka1xffb1._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1rwkgka1xffb1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js.map +1 -0
- package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js +3 -0
- package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +51 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +16 -0
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/preview-props.json +3 -3
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +174 -28
- package/web/.next/static/chunks/0nhopjmnw_dqt.js +1 -0
- package/web/.next/static/chunks/0zbcy0_3jemrv.js +1 -0
- package/web/.next/static/chunks/{0ke_2_la1glwa.js → 1-suv9wttlxqo.js} +1 -1
- package/web/.next/static/chunks/19kfx4qlur25a.js +1 -0
- package/web/.next/static/chunks/1a2-hkn-7471k.js +1 -0
- package/web/.next/static/chunks/{1tgs1j0j-1qlh.js → 1msggkwsn7vyq.js} +1 -1
- package/web/.next/static/chunks/{2hj3-kl1ggnu_.js → 2-kh9nbonee6w.js} +1 -1
- package/web/.next/static/chunks/2l92bozm8dcmo.js +1 -0
- package/web/.next/static/chunks/{2d283cu3en9cy.js → 310mio1zd_mw7.js} +1 -1
- package/web/.next/static/chunks/{07j7jnfe13wx6.js → 3d_sjtxh_vkr6.js} +1 -1
- package/web/.next/static/chunks/{0p_kl57bddsiy.js → 3dhy3jady0w6a.js} +1 -1
- package/web/.next/static/chunks/3efghx8whwnok.js +1 -0
- package/web/.next/static/chunks/3hvo3apdq-ckk.js +1 -0
- package/web/.next/static/chunks/3rbzp0tdc1te-.js +1 -0
- package/web/.next/static/chunks/{2n4bf_2r9lysd.js → 455eobei0t6t9.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/routes.d.ts +7 -2
- package/web/.next/types/validator.ts +78 -0
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js +0 -369
- package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +0 -3
- package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +0 -3
- package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +0 -1
- package/web/.next/static/chunks/0ul9rtulfiph6.js +0 -1
- package/web/.next/static/chunks/19wvmglfgof0u.js +0 -1
- package/web/.next/static/chunks/2i3ydqqupow_x.js +0 -1
- package/web/.next/static/chunks/2ngyis59r3qta.js +0 -1
- package/web/.next/static/chunks/3bl-e3zhidrrz.js +0 -1
- package/web/.next/static/chunks/3x_8doukmdfpu.js +0 -1
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1-c9wugbbwsp3._.js.map → [root-of-the-server]__0kb1gl5t8kz4l._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js.map → [root-of-the-server]__0y0jwufd7xjsv._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js.map → [root-of-the-server]__19ecatcacd6t9._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{_0w2ptjht34s6t._.js.map → _0wukvn3-ht3ps._.js.map} +0 -0
- /package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js.map → _1e2o809f0ekry._.js.map} +0 -0
- /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → 87vMFs_KGRcFD40WWRkFR}/_buildManifest.js +0 -0
- /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → 87vMFs_KGRcFD40WWRkFR}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → 87vMFs_KGRcFD40WWRkFR}/_ssgManifest.js +0 -0
|
@@ -7,11 +7,18 @@ import { ok } from '../shared/result.js';
|
|
|
7
7
|
* each proxy ship.
|
|
8
8
|
*/
|
|
9
9
|
const GATEWAY_SCOPES = ['fleet:read', 'fleet:commission', 'fleet:on-behalf', 'scopes:declare', 'fleet:verify'];
|
|
10
|
-
/**
|
|
11
|
-
|
|
10
|
+
/**
|
|
11
|
+
* The gateway's own scopes, under its namespace: approving is a scope any
|
|
12
|
+
* actor may hold (decision 0056); Slack is apart from it (gateway scopes B6).
|
|
13
|
+
*/
|
|
14
|
+
export const GATEWAY_NAMESPACE = {
|
|
12
15
|
namespace: 'gateway',
|
|
13
|
-
scopes: [
|
|
16
|
+
scopes: [
|
|
17
|
+
{ scope: 'gateway:approve', description: 'Approve outside parties: outside MCP clients and servers, each acting in the fleet as its proxy ship' },
|
|
18
|
+
{ scope: 'gateway:slack', description: 'Connect the fleet to a Slack workspace, and expose ships within manage reach as Slack bots' },
|
|
19
|
+
],
|
|
14
20
|
};
|
|
21
|
+
export const DECLARED_SCOPES = GATEWAY_NAMESPACE.scopes.map(({ scope }) => scope).join(', ');
|
|
15
22
|
/**
|
|
16
23
|
* Use case: argo connects the gateway, as the other plugins are connected.
|
|
17
24
|
* The console's server hands it its ship's secret, server to server; the
|
|
@@ -49,7 +56,7 @@ export function createConnect(deps) {
|
|
|
49
56
|
}
|
|
50
57
|
const declared = await deps.door.declareScopes(crewToken, GATEWAY_NAMESPACE);
|
|
51
58
|
if (!declared.isOk) {
|
|
52
|
-
return letGo('SCOPE_REFUSED', `The fleet did not take the gateway's
|
|
59
|
+
return letGo('SCOPE_REFUSED', `The fleet did not take the gateway's scopes ${DECLARED_SCOPES}: ${declared.error.message}`);
|
|
53
60
|
}
|
|
54
61
|
await deps.store.save({ fleetId: who.value.fleetId, shipId, name: who.value.name, crewToken, crewedAt: deps.clock.now() });
|
|
55
62
|
return ok({ state: 'connected', ship: { shipId, name: who.value.name }, lastShipId: shipId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/core/connection/connect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAOtD;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAE/G
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/core/connection/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import { type DomainError } from '../shared/errors.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { ConnectionStore, FleetDoor } from './ports.js';
|
|
5
|
+
export type DeclareGatewayScopes = (fleetId: FleetId) => Promise<Result<undefined, DomainError<'NOT_CONNECTED' | 'SCOPE_REFUSED'>>>;
|
|
6
|
+
/**
|
|
7
|
+
* Use case: the gateway declares its whole namespace again in a fleet it is
|
|
8
|
+
* connected to, as it starts, so a scope added since that fleet connected
|
|
9
|
+
* (gateway:slack) is offered there too. A refusal keeps the connection: the
|
|
10
|
+
* fleet keeps the list it took before.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDeclareGatewayScopes(deps: {
|
|
13
|
+
door: Pick<FleetDoor, 'declareScopes'>;
|
|
14
|
+
store: Pick<ConnectionStore, 'find'>;
|
|
15
|
+
}): DeclareGatewayScopes;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { DECLARED_SCOPES, GATEWAY_NAMESPACE } from './connect.js';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: the gateway declares its whole namespace again in a fleet it is
|
|
6
|
+
* connected to, as it starts, so a scope added since that fleet connected
|
|
7
|
+
* (gateway:slack) is offered there too. A refusal keeps the connection: the
|
|
8
|
+
* fleet keeps the list it took before.
|
|
9
|
+
*/
|
|
10
|
+
export function createDeclareGatewayScopes(deps) {
|
|
11
|
+
return async (fleetId) => {
|
|
12
|
+
const crew = await deps.store.find(fleetId);
|
|
13
|
+
if (crew === undefined) {
|
|
14
|
+
return refuse('NOT_CONNECTED', 'The gateway is not connected to this fleet');
|
|
15
|
+
}
|
|
16
|
+
const declared = await deps.door.declareScopes(crew.crewToken, GATEWAY_NAMESPACE);
|
|
17
|
+
if (!declared.isOk) {
|
|
18
|
+
return refuse('SCOPE_REFUSED', `The fleet did not take the gateway's scopes ${DECLARED_SCOPES}: ${declared.error.message}`);
|
|
19
|
+
}
|
|
20
|
+
return ok(undefined);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=declare-gateway-scopes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare-gateway-scopes.js","sourceRoot":"","sources":["../../../src/core/connection/declare-gateway-scopes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKlE;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAsF;IAC/H,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAClF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,eAAe,EAAE,+CAA+C,eAAe,KAAK,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9H,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -24,6 +24,7 @@ interface ExchangeTokenDeps {
|
|
|
24
24
|
tokens: IssuedTokens;
|
|
25
25
|
secrets: OAuthSecrets;
|
|
26
26
|
clock: Clock;
|
|
27
|
+
/** The MCP endpoint a client signed in by client credentials is bound to; a code keeps the resource it was issued for. */
|
|
27
28
|
resource: string;
|
|
28
29
|
/** The parties argo's approvers added: a client signed in by client credentials is one. */
|
|
29
30
|
parties: Pick<PartyStore, 'findByClient'>;
|
|
@@ -87,9 +87,6 @@ export function createExchangeToken(deps) {
|
|
|
87
87
|
if (code === undefined || verifier === undefined) {
|
|
88
88
|
return refusal('invalid_request', 'A code and its PKCE verifier are required');
|
|
89
89
|
}
|
|
90
|
-
if (request.resource !== undefined && request.resource !== deps.resource) {
|
|
91
|
-
return refusal('invalid_target', `The resource must be ${deps.resource}`);
|
|
92
|
-
}
|
|
93
90
|
const taken = await deps.codes.take(deps.secrets.hashOf(code));
|
|
94
91
|
if (!taken) {
|
|
95
92
|
return refusal('invalid_grant', 'No such code');
|
|
@@ -99,6 +96,10 @@ export function createExchangeToken(deps) {
|
|
|
99
96
|
return refusal('invalid_grant', 'The code was used before; the tokens it gave are revoked');
|
|
100
97
|
}
|
|
101
98
|
const issued = taken.code;
|
|
99
|
+
// A code is taken for the resource it was issued for, one of the gateway's addresses (RFC 8707).
|
|
100
|
+
if (request.resource !== undefined && request.resource !== issued.resource) {
|
|
101
|
+
return refusal('invalid_target', `The resource must be ${issued.resource}`);
|
|
102
|
+
}
|
|
102
103
|
const isValid = issued.expiresAt.getTime() > deps.clock.now().getTime() &&
|
|
103
104
|
issued.clientId === request.client_id &&
|
|
104
105
|
issued.redirectUri === request.redirect_uri &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exchange-token.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-token.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG1D,2GAA2G;AAC3G,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,MAAM,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAE/D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAG,6CAA6C,CAAC;AAe9E,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,SAAS,OAAO,CAAC,KAAqB,EAAE,WAAmB;IACzD,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AACrC,CAAC;
|
|
1
|
+
{"version":3,"file":"exchange-token.js","sourceRoot":"","sources":["../../../src/core/oauth/exchange-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,11 +33,11 @@ export type ReadAuthorization = (request: Readonly<Record<string, string | undef
|
|
|
33
33
|
* Use case: the gateway reads an authorization request from an MCP client
|
|
34
34
|
* (OAuth 2.1 with PKCE, MCP 2026-07-28). The client is pre-registered, or
|
|
35
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
|
|
37
|
-
*
|
|
36
|
+
* the S256 challenge is taken, and the resource must be one of the addresses
|
|
37
|
+
* the gateway serves its MCP tools at (RFC 8707), so a token is bound to it.
|
|
38
38
|
*/
|
|
39
39
|
export declare function createReadAuthorization(deps: {
|
|
40
40
|
clients: OAuthClients;
|
|
41
41
|
documents: ClientMetadataDocuments;
|
|
42
|
-
|
|
42
|
+
resources: readonly string[];
|
|
43
43
|
}): ReadAuthorization;
|
|
@@ -23,8 +23,8 @@ function metadataDocumentUrl(clientId) {
|
|
|
23
23
|
* Use case: the gateway reads an authorization request from an MCP client
|
|
24
24
|
* (OAuth 2.1 with PKCE, MCP 2026-07-28). The client is pre-registered, or
|
|
25
25
|
* known by its metadata document (CIMD), fetched from its client id. Only
|
|
26
|
-
* the S256 challenge is taken, and the resource must be the
|
|
27
|
-
*
|
|
26
|
+
* the S256 challenge is taken, and the resource must be one of the addresses
|
|
27
|
+
* the gateway serves its MCP tools at (RFC 8707), so a token is bound to it.
|
|
28
28
|
*/
|
|
29
29
|
export function createReadAuthorization(deps) {
|
|
30
30
|
const knownClient = async (clientId) => {
|
|
@@ -65,10 +65,11 @@ export function createReadAuthorization(deps) {
|
|
|
65
65
|
if (codeChallenge === undefined || codeChallenge === '' || request.code_challenge_method !== 'S256') {
|
|
66
66
|
return sendBack('invalid_request', 'A PKCE code challenge with the S256 method is required');
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
const { resource } = request;
|
|
69
|
+
if (resource === undefined || !deps.resources.includes(resource)) {
|
|
70
|
+
return sendBack('invalid_target', `The resource must be one of ${deps.resources.join(', ')}`);
|
|
70
71
|
}
|
|
71
|
-
return ok({ clientId, clientName: client.value.name, clientFleetId: client.value.fleetId, redirectUri, codeChallenge, resource
|
|
72
|
+
return ok({ clientId, clientName: client.value.name, clientFleetId: client.value.fleetId, redirectUri, codeChallenge, resource, scope: request.scope ?? null, state });
|
|
72
73
|
};
|
|
73
74
|
}
|
|
74
75
|
//# sourceMappingURL=read-authorization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-authorization.js","sourceRoot":"","sources":["../../../src/core/oauth/read-authorization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AA0BvF,2EAA2E;AAC3E,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAC;AAEH,kGAAkG;AAClG,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5F,OAAO,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"read-authorization.js","sourceRoot":"","sources":["../../../src/core/oauth/read-authorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -196,8 +196,29 @@ export interface OpenedDeliveries {
|
|
|
196
196
|
}
|
|
197
197
|
/** The channels a person may turn on to be woken (wake a person, W1), as a hand-over names them. */
|
|
198
198
|
export type WakeChannelName = 'email' | 'web-push';
|
|
199
|
-
/**
|
|
200
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Outbound port: a place beyond the gateway's pages that shows the person's
|
|
201
|
+
* deliveries itself, as Slack does for a linked person (gateway scopes
|
|
202
|
+
* 9.5): it hands each one it shows, so no channel wakes for it (W3).
|
|
203
|
+
*/
|
|
204
|
+
export interface ShownElsewhere {
|
|
205
|
+
/**
|
|
206
|
+
* Finishes what an earlier wake left unfinished, then shows what it shows
|
|
207
|
+
* of the fresh deliveries: the ones it showed, and whether any is left
|
|
208
|
+
* unfinished, so the wake is tried again.
|
|
209
|
+
*/
|
|
210
|
+
show(ship: PersonShip, wake: {
|
|
211
|
+
crewToken: string;
|
|
212
|
+
fresh: readonly PushedPersonDelivery[];
|
|
213
|
+
}): Promise<Result<ShownThere, FleetRefusal>>;
|
|
214
|
+
}
|
|
215
|
+
/** What a place beyond the pages showed at a wake. */
|
|
216
|
+
export interface ShownThere {
|
|
217
|
+
readonly shown: ReadonlySet<DeliveryId>;
|
|
218
|
+
readonly isAnyUnfinished: boolean;
|
|
219
|
+
}
|
|
220
|
+
/** What a delivery is handed to the person through: a wake's channel, a page of theirs in focus, which shows it (W6), or Slack, which shows it (gateway scopes 9.5). */
|
|
221
|
+
export type HandOverChannel = WakeChannelName | 'page' | 'slack';
|
|
201
222
|
/**
|
|
202
223
|
* Outbound port: one way to wake a person (wake a person, W1, W4): it says
|
|
203
224
|
* only that something waits in the fleet, with the overview's link, and
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FleetRefusal } from "../connection/ports.js";
|
|
2
2
|
import type { Clock } from "../shared/clock.js";
|
|
3
3
|
import { type Result } from "../shared/result.js";
|
|
4
|
-
import type { FocusedPages, PersonShip, PersonShipDoor, WakeChannel, WakeChannelName, WakesSent } from "./ports.js";
|
|
4
|
+
import type { FocusedPages, PersonShip, PersonShipDoor, ShownElsewhere, WakeChannel, WakeChannelName, WakesSent } from "./ports.js";
|
|
5
5
|
/**
|
|
6
6
|
* What a wake came to: nothing left to wake (settled), a wake held back
|
|
7
7
|
* until the earliest window of a channel turned on ends (inWindow), or no
|
|
@@ -33,10 +33,17 @@ export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result
|
|
|
33
33
|
* told, as asking again cannot help; while another channel's wake fails and is
|
|
34
34
|
* tried again, that channel is not asked again. While a page of the person is in focus, the page
|
|
35
35
|
* shows what arrives (W6): each fresh delivery is handed through it and no
|
|
36
|
-
* wake goes out.
|
|
36
|
+
* wake goes out. Before all that, a place beyond the pages that shows
|
|
37
|
+
* deliveries itself, as Slack does for a linked person, shows what it
|
|
38
|
+
* shows, even while a page is in focus; nothing wakes for those
|
|
39
|
+
* (gateway scopes 9.5 step 5). It is asked at every wake, fresh deliveries
|
|
40
|
+
* or none, so what it left unfinished is finished, and while anything is
|
|
41
|
+
* left the wake counts as failed, so it is tried again.
|
|
37
42
|
*/
|
|
38
43
|
export declare function createWakePerson(deps: {
|
|
39
44
|
door: Pick<PersonShipDoor, "pushReceive" | "handed">;
|
|
45
|
+
/** Slack, where the person linked it; none where nothing beyond the pages shows deliveries. */
|
|
46
|
+
shownElsewhere?: ShownElsewhere;
|
|
40
47
|
channels: readonly WakeChannel[];
|
|
41
48
|
wakesSent: WakesSent;
|
|
42
49
|
focused: FocusedPages;
|
|
@@ -17,13 +17,45 @@ import { err, ok } from "../shared/result.js";
|
|
|
17
17
|
* told, as asking again cannot help; while another channel's wake fails and is
|
|
18
18
|
* tried again, that channel is not asked again. While a page of the person is in focus, the page
|
|
19
19
|
* shows what arrives (W6): each fresh delivery is handed through it and no
|
|
20
|
-
* wake goes out.
|
|
20
|
+
* wake goes out. Before all that, a place beyond the pages that shows
|
|
21
|
+
* deliveries itself, as Slack does for a linked person, shows what it
|
|
22
|
+
* shows, even while a page is in focus; nothing wakes for those
|
|
23
|
+
* (gateway scopes 9.5 step 5). It is asked at every wake, fresh deliveries
|
|
24
|
+
* or none, so what it left unfinished is finished, and while anything is
|
|
25
|
+
* left the wake counts as failed, so it is tried again.
|
|
21
26
|
*/
|
|
22
27
|
export function createWakePerson(deps) {
|
|
23
28
|
/** Channels that refused for good during an attempt still failing, by person ship: a retry of that attempt does not ask them again. */
|
|
24
29
|
const refusedInAttempt = new Map();
|
|
25
30
|
const attemptKey = (ship) => `${ship.fleetId}/${ship.shipId}`;
|
|
26
31
|
const wakePerson = async (ship, crewToken) => {
|
|
32
|
+
const taken = await deps.door.pushReceive(crewToken, {
|
|
33
|
+
max: RECEIVE_MAX_UPPER_BOUND,
|
|
34
|
+
shouldSkipHanded: true,
|
|
35
|
+
});
|
|
36
|
+
if (!taken.isOk) {
|
|
37
|
+
return taken;
|
|
38
|
+
}
|
|
39
|
+
const everyFresh = taken.value.filter(({ handOverNumber }) => handOverNumber === null);
|
|
40
|
+
// Asked even with nothing fresh: it finishes what an earlier wake left unfinished, as after a restart.
|
|
41
|
+
const shownElsewhere = deps.shownElsewhere === undefined
|
|
42
|
+
? ok({ shown: new Set(), isAnyUnfinished: false })
|
|
43
|
+
: await deps.shownElsewhere.show(ship, { crewToken, fresh: everyFresh });
|
|
44
|
+
if (!shownElsewhere.isOk) {
|
|
45
|
+
return shownElsewhere;
|
|
46
|
+
}
|
|
47
|
+
const { shown, isAnyUnfinished } = shownElsewhere.value;
|
|
48
|
+
const woken = await wakeFor(ship, {
|
|
49
|
+
crewToken,
|
|
50
|
+
allFresh: everyFresh.filter(({ deliveryId }) => !shown.has(deliveryId)),
|
|
51
|
+
});
|
|
52
|
+
// What it left unfinished is finished at a wake tried again.
|
|
53
|
+
return isAnyUnfinished && woken.isOk && woken.value.kind === "settled"
|
|
54
|
+
? ok({ kind: "failed" })
|
|
55
|
+
: woken;
|
|
56
|
+
};
|
|
57
|
+
/** Wakes the person for the fresh deliveries nothing beyond the pages showed. */
|
|
58
|
+
const wakeFor = async (ship, { crewToken, allFresh }) => {
|
|
27
59
|
/** Hands each fresh delivery no. 1 through the channel, up to the first refusal: that refusal, or none. */
|
|
28
60
|
const handEach = async (fresh, channel) => {
|
|
29
61
|
for (const { deliveryId } of fresh) {
|
|
@@ -38,14 +70,6 @@ export function createWakePerson(deps) {
|
|
|
38
70
|
}
|
|
39
71
|
return undefined;
|
|
40
72
|
};
|
|
41
|
-
const taken = await deps.door.pushReceive(crewToken, {
|
|
42
|
-
max: RECEIVE_MAX_UPPER_BOUND,
|
|
43
|
-
shouldSkipHanded: true,
|
|
44
|
-
});
|
|
45
|
-
if (!taken.isOk) {
|
|
46
|
-
return taken;
|
|
47
|
-
}
|
|
48
|
-
const allFresh = taken.value.filter(({ handOverNumber }) => handOverNumber === null);
|
|
49
73
|
if (allFresh.length === 0) {
|
|
50
74
|
return ok({ kind: "settled" });
|
|
51
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Err } from './result.js';
|
|
2
2
|
/** Every reason the gateway's core refuses a request. */
|
|
3
|
-
export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED' | 'SCOPE_NOT_LISTED' | 'CONFLICT';
|
|
3
|
+
export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION' | 'NO_SUCH_MEETING' | 'MIC_REFUSED' | 'SCOPE_NOT_LISTED' | 'SLACK_SCOPE_NOT_HELD' | 'SLACK_NOT_CONNECTED' | 'SLACK_TOKEN_REFUSED' | 'SLACK_UNAVAILABLE' | 'OTHER_WORKSPACE' | 'INSTALL_REFUSED' | 'NOT_EXPOSABLE' | 'NO_SUCH_BOT' | 'LINK_REFUSED' | 'SLACK_USER_LINKED' | 'ACCOUNT_LINKED' | 'NOT_LINKED' | 'CONFLICT';
|
|
4
4
|
/** Why the core refused a request. Adapters map the kind to their own error shape; the message is safe to show. */
|
|
5
5
|
export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
|
|
6
6
|
readonly kind: K;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAkF5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -19,10 +19,13 @@ export type StartSignIn = (picked: {
|
|
|
19
19
|
* gateway's own PKCE verifier into the state, and the person is sent to
|
|
20
20
|
* pagasae naming no fleet, so pagasae answers their only fleet or asks
|
|
21
21
|
* which (decision 0054). The browser is given a secret of its own, sealed
|
|
22
|
-
* too, so only it finishes the sign-in.
|
|
22
|
+
* too, so only it finishes the sign-in. The plugin's address signs the
|
|
23
|
+
* person in as themselves only: no one asks for access for a client there
|
|
24
|
+
* (chatgpt-plugin design, 6).
|
|
23
25
|
*/
|
|
24
26
|
export declare function createStartSignIn(deps: {
|
|
25
27
|
readAuthorization: ReadAuthorization;
|
|
28
|
+
pluginResource: string;
|
|
26
29
|
seals: SignInSeals;
|
|
27
30
|
pagasae: Pagasae;
|
|
28
31
|
secrets: OAuthSecrets;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ok } from '../shared/result.js';
|
|
1
|
+
import { err, ok } from '../shared/result.js';
|
|
2
2
|
/** How long a person has to sign in at pagasae and come back. */
|
|
3
3
|
export const SIGN_IN_LIFETIME_MS = 10 * 60_000;
|
|
4
4
|
/**
|
|
@@ -8,7 +8,9 @@ export const SIGN_IN_LIFETIME_MS = 10 * 60_000;
|
|
|
8
8
|
* gateway's own PKCE verifier into the state, and the person is sent to
|
|
9
9
|
* pagasae naming no fleet, so pagasae answers their only fleet or asks
|
|
10
10
|
* which (decision 0054). The browser is given a secret of its own, sealed
|
|
11
|
-
* too, so only it finishes the sign-in.
|
|
11
|
+
* too, so only it finishes the sign-in. The plugin's address signs the
|
|
12
|
+
* person in as themselves only: no one asks for access for a client there
|
|
13
|
+
* (chatgpt-plugin design, 6).
|
|
12
14
|
*/
|
|
13
15
|
export function createStartSignIn(deps) {
|
|
14
16
|
return async ({ request, holder }) => {
|
|
@@ -16,6 +18,10 @@ export function createStartSignIn(deps) {
|
|
|
16
18
|
if (!read.isOk) {
|
|
17
19
|
return read;
|
|
18
20
|
}
|
|
21
|
+
if (holder === 'party' && read.value.resource === deps.pluginResource) {
|
|
22
|
+
const { redirectUri, state } = read.value;
|
|
23
|
+
return err({ kind: 'redirect', redirectUri, error: 'invalid_request', description: 'The plugin address signs in as yourself only', state });
|
|
24
|
+
}
|
|
19
25
|
const verifier = deps.secrets.newSecret();
|
|
20
26
|
const browserSecret = deps.secrets.newSecret();
|
|
21
27
|
const state = deps.seals.seal({ verifier, browserSecret, request, holder, expiresAt: new Date(deps.clock.now().getTime() + SIGN_IN_LIFETIME_MS) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start-sign-in.js","sourceRoot":"","sources":["../../../src/core/sign-in/start-sign-in.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"start-sign-in.js","sourceRoot":"","sources":["../../../src/core/sign-in/start-sign-in.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAG3D,iEAAiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AAI/C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiJ;IACjL,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1C,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,8CAA8C,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9I,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACnJ,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;IACpI,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { PersonCrews, PersonShipDoor } from '../people/ports.js';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import type { SlackApps, SlackLinks, SlackMessages, SlackPosts, SlackSignatures } from './ports.js';
|
|
5
|
+
import { type SignedRequest } from './slack-request.js';
|
|
6
|
+
export type AnswerInSlack = (press: SignedRequest & {
|
|
7
|
+
appId: string;
|
|
8
|
+
teamId: string;
|
|
9
|
+
userId: string;
|
|
10
|
+
channel: string;
|
|
11
|
+
messageTs: string;
|
|
12
|
+
option: number;
|
|
13
|
+
}) => Promise<Result<{
|
|
14
|
+
kind: 'answered' | 'refused' | 'ignored';
|
|
15
|
+
}, {
|
|
16
|
+
kind: 'notSigned';
|
|
17
|
+
}>>;
|
|
18
|
+
/**
|
|
19
|
+
* Use case: the person presses an option's button under a question the
|
|
20
|
+
* gateway posted to them in Slack (gateway scopes 9.5 step 2). Signed as an
|
|
21
|
+
* event is, by the person the question was posted to, the press sends the
|
|
22
|
+
* answer as their person ship, to the question's sender in reply to it,
|
|
23
|
+
* keyed as an answer on the gateway's page is; then the delivery is handled
|
|
24
|
+
* and the question reacted to, as a message core stored is. Core's refusal
|
|
25
|
+
* is said in the question's thread.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createAnswerInSlack(deps: {
|
|
28
|
+
apps: Pick<SlackApps, 'findByAppId'>;
|
|
29
|
+
links: Pick<SlackLinks, 'find'>;
|
|
30
|
+
posts: Pick<SlackPosts, 'atSlackMessage'>;
|
|
31
|
+
crews: Pick<PersonCrews, 'find'>;
|
|
32
|
+
door: Pick<PersonShipDoor, 'delivery' | 'reply' | 'handled'>;
|
|
33
|
+
slack: Pick<SlackMessages, 'react' | 'postInThread'>;
|
|
34
|
+
signatures: SlackSignatures;
|
|
35
|
+
clock: Clock;
|
|
36
|
+
}): AnswerInSlack;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ANSWER_CONTENT_TYPE, questionSchema } from '@aeolus-fleet/common';
|
|
2
|
+
import { err, ok } from '../shared/result.js';
|
|
3
|
+
import { isSignedBy } from './slack-request.js';
|
|
4
|
+
import { STORED_REACTION } from './send-slack-events.js';
|
|
5
|
+
/** The question's id in a delivery's payload; none when it is no question. */
|
|
6
|
+
function questionIdOf(payload) {
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(payload);
|
|
9
|
+
return questionSchema.safeParse(parsed).data?.id;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Use case: the person presses an option's button under a question the
|
|
17
|
+
* gateway posted to them in Slack (gateway scopes 9.5 step 2). Signed as an
|
|
18
|
+
* event is, by the person the question was posted to, the press sends the
|
|
19
|
+
* answer as their person ship, to the question's sender in reply to it,
|
|
20
|
+
* keyed as an answer on the gateway's page is; then the delivery is handled
|
|
21
|
+
* and the question reacted to, as a message core stored is. Core's refusal
|
|
22
|
+
* is said in the question's thread.
|
|
23
|
+
*/
|
|
24
|
+
export function createAnswerInSlack(deps) {
|
|
25
|
+
return async ({ appId, teamId, userId, channel, messageTs, option, body, timestamp, signature }) => {
|
|
26
|
+
const app = await deps.apps.findByAppId(appId);
|
|
27
|
+
if (!isSignedBy(app, { request: { body, timestamp, signature }, signatures: deps.signatures, clock: deps.clock })) {
|
|
28
|
+
return err({ kind: 'notSigned' });
|
|
29
|
+
}
|
|
30
|
+
const link = await deps.links.find(app.fleetId, { teamId, userId });
|
|
31
|
+
const post = link?.stoppedAt === null ? await deps.posts.atSlackMessage(app.fleetId, { personShipId: link.personShipId, appId, channel, ts: messageTs }) : undefined;
|
|
32
|
+
const crew = post === undefined ? undefined : await deps.crews.find(app.fleetId, post.personShipId);
|
|
33
|
+
if (post === undefined || post.deliveryId === null || post.senderShipId === null || crew === undefined || app.bot === null) {
|
|
34
|
+
return ok({ kind: 'ignored' });
|
|
35
|
+
}
|
|
36
|
+
const delivery = await deps.door.delivery(crew.crewToken, post.deliveryId);
|
|
37
|
+
const questionId = delivery.isOk ? questionIdOf(delivery.value.payload) : undefined;
|
|
38
|
+
if (!delivery.isOk || questionId === undefined) {
|
|
39
|
+
return ok({ kind: 'ignored' });
|
|
40
|
+
}
|
|
41
|
+
const replied = await deps.door.reply(crew.crewToken, { to: post.senderShipId, inReplyTo: post.messageId, contentType: ANSWER_CONTENT_TYPE, payload: JSON.stringify({ questionId, option }), idempotencyKey: `answer-${post.deliveryId}` });
|
|
42
|
+
if (!replied.isOk) {
|
|
43
|
+
await deps.slack.postInThread(app.bot.token, { channel, threadTs: messageTs, text: `${delivery.value.senderName} did not take your answer: ${replied.error.message}` });
|
|
44
|
+
return ok({ kind: 'refused' });
|
|
45
|
+
}
|
|
46
|
+
await deps.door.handled(crew.crewToken, post.deliveryId);
|
|
47
|
+
await deps.slack.react(app.bot.token, { channel, ts: messageTs, name: STORED_REACTION });
|
|
48
|
+
return ok({ kind: 'answered' });
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=answer-in-slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"answer-in-slack.js","sourceRoot":"","sources":["../../../src/core/slack/answer-in-slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { Clock } from '../shared/clock.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { InstallStates, SlackApps, SlackTooling, SlackWorkspaces } from './ports.js';
|
|
6
|
+
export type CompleteInstallRefusal = DomainError<'INSTALL_REFUSED' | 'SLACK_NOT_CONNECTED' | 'OTHER_WORKSPACE' | 'SLACK_UNAVAILABLE'>;
|
|
7
|
+
export type CompleteInstall = (input: {
|
|
8
|
+
code: string;
|
|
9
|
+
state: string;
|
|
10
|
+
}) => Promise<Result<{
|
|
11
|
+
fleetId: FleetId;
|
|
12
|
+
}, CompleteInstallRefusal>>;
|
|
13
|
+
/**
|
|
14
|
+
* Use case: Slack's install screen sends the person back with a code and
|
|
15
|
+
* the state the gateway sealed (gateway scopes 9.1). Within its ten minutes,
|
|
16
|
+
* the code is turned into the app's bot token, kept in the vault, and the
|
|
17
|
+
* workspace's name kept as Slack says it. An install into another workspace
|
|
18
|
+
* than the fleet's keeps nothing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createCompleteInstall(deps: {
|
|
21
|
+
slack: Pick<SlackTooling, 'completeInstall'>;
|
|
22
|
+
apps: Pick<SlackApps, 'find' | 'save'>;
|
|
23
|
+
workspaces: Pick<SlackWorkspaces, 'find' | 'change'>;
|
|
24
|
+
states: InstallStates;
|
|
25
|
+
clock: Clock;
|
|
26
|
+
installRedirectUrl: string;
|
|
27
|
+
}): CompleteInstall;
|