@aeolus-fleet/gateway 0.33.0 → 0.34.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 +12 -2
- package/dist/adapters/crypto/party-sign-in-seals.d.ts +3 -0
- package/dist/adapters/crypto/party-sign-in-seals.js +15 -0
- package/dist/adapters/crypto/party-sign-in-seals.js.map +1 -0
- package/dist/adapters/fleet/rest-fleet-door.js +2 -2
- package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
- package/dist/adapters/fleet/ship-names.d.ts +7 -0
- package/dist/adapters/fleet/ship-names.js +25 -0
- package/dist/adapters/fleet/ship-names.js.map +1 -0
- package/dist/adapters/http/party-sign-in-routes.d.ts +25 -0
- package/dist/adapters/http/party-sign-in-routes.js +45 -0
- package/dist/adapters/http/party-sign-in-routes.js.map +1 -0
- package/dist/adapters/http/slack-routes.d.ts +0 -13
- package/dist/adapters/http/slack-routes.js +19 -4
- package/dist/adapters/http/slack-routes.js.map +1 -1
- package/dist/adapters/mcp/mcp-servers.js +22 -4
- package/dist/adapters/mcp/mcp-servers.js.map +1 -1
- package/dist/adapters/oauth/authorization-servers.d.ts +2 -0
- package/dist/adapters/oauth/authorization-servers.js +127 -0
- package/dist/adapters/oauth/authorization-servers.js.map +1 -0
- package/dist/adapters/oauth/party-sign-ins.d.ts +2 -0
- package/dist/adapters/oauth/party-sign-ins.js +152 -0
- package/dist/adapters/oauth/party-sign-ins.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 +10 -0
- package/dist/adapters/prisma/generated/client.d.ts +10 -0
- package/dist/adapters/prisma/generated/internal/class.d.ts +22 -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 +178 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +26 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +27 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +26 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/PartyGrant.d.ts +1276 -0
- package/dist/adapters/prisma/generated/models/PartyGrant.js +2 -0
- package/dist/adapters/prisma/generated/models/PartyGrant.js.map +1 -0
- package/dist/adapters/prisma/generated/models/PartySignInNotice.d.ts +1003 -0
- package/dist/adapters/prisma/generated/models/PartySignInNotice.js +2 -0
- package/dist/adapters/prisma/generated/models/PartySignInNotice.js.map +1 -0
- package/dist/adapters/prisma/generated/models/SlackEvent.d.ts +17 -14
- package/dist/adapters/prisma/generated/models.d.ts +2 -0
- package/dist/adapters/prisma/party-grants.d.ts +10 -0
- package/dist/adapters/prisma/party-grants.js +118 -0
- package/dist/adapters/prisma/party-grants.js.map +1 -0
- package/dist/adapters/prisma/party-store.js +21 -2
- package/dist/adapters/prisma/party-store.js.map +1 -1
- package/dist/adapters/prisma/sign-in-notices.d.ts +8 -0
- package/dist/adapters/prisma/sign-in-notices.js +22 -0
- package/dist/adapters/prisma/sign-in-notices.js.map +1 -0
- package/dist/adapters/prisma/slack-events.js +1 -1
- package/dist/adapters/prisma/slack-events.js.map +1 -1
- package/dist/adapters/prisma/slack-posts.js +0 -4
- package/dist/adapters/prisma/slack-posts.js.map +1 -1
- package/dist/adapters/slack/slack-messages.js +2 -2
- package/dist/adapters/slack/slack-messages.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +138 -10
- package/dist/adapters/trpc/router.js +147 -6
- package/dist/adapters/trpc/router.js.map +1 -1
- package/dist/app.d.ts +2 -0
- package/dist/app.js +82 -6
- package/dist/app.js.map +1 -1
- package/dist/core/connection/ports.d.ts +5 -0
- package/dist/core/mcp-out/grant-calls.d.ts +69 -0
- package/dist/core/mcp-out/grant-calls.js +98 -0
- package/dist/core/mcp-out/grant-calls.js.map +1 -0
- package/dist/core/mcp-out/hand-call.d.ts +6 -1
- package/dist/core/mcp-out/hand-call.js +23 -2
- package/dist/core/mcp-out/hand-call.js.map +1 -1
- package/dist/core/mcp-out/ports.d.ts +6 -2
- package/dist/core/mcp-out/state-party.d.ts +5 -2
- package/dist/core/mcp-out/state-party.js +7 -2
- package/dist/core/mcp-out/state-party.js.map +1 -1
- package/dist/core/parties/add-sign-in-server.d.ts +25 -0
- package/dist/core/parties/add-sign-in-server.js +70 -0
- package/dist/core/parties/add-sign-in-server.js.map +1 -0
- package/dist/core/parties/approve-party.d.ts +2 -2
- package/dist/core/parties/check-approving.d.ts +3 -3
- package/dist/core/parties/check-approving.js +2 -2
- package/dist/core/parties/check-approving.js.map +1 -1
- package/dist/core/parties/party.d.ts +3 -2
- package/dist/core/parties/party.js +4 -1
- package/dist/core/parties/party.js.map +1 -1
- package/dist/core/parties/ports.d.ts +49 -0
- package/dist/core/parties/read-party-tools.d.ts +5 -2
- package/dist/core/parties/read-party-tools.js +7 -2
- package/dist/core/parties/read-party-tools.js.map +1 -1
- package/dist/core/parties/retire-party.d.ts +5 -1
- package/dist/core/parties/retire-party.js +6 -1
- package/dist/core/parties/retire-party.js.map +1 -1
- package/dist/core/parties/shown-party.d.ts +2 -2
- package/dist/core/parties/sign-in-servers.d.ts +4 -0
- package/dist/core/parties/sign-in-servers.js +13 -0
- package/dist/core/parties/sign-in-servers.js.map +1 -0
- package/dist/core/parties/switch-tools.d.ts +3 -1
- package/dist/core/parties/switch-tools.js +5 -1
- package/dist/core/parties/switch-tools.js.map +1 -1
- package/dist/core/party-grants/approved-sign-in-party.d.ts +17 -0
- package/dist/core/party-grants/approved-sign-in-party.js +21 -0
- package/dist/core/party-grants/approved-sign-in-party.js.map +1 -0
- package/dist/core/party-grants/call-grant.d.ts +46 -0
- package/dist/core/party-grants/call-grant.js +30 -0
- package/dist/core/party-grants/call-grant.js.map +1 -0
- package/dist/core/party-grants/complete-party-sign-in.d.ts +52 -0
- package/dist/core/party-grants/complete-party-sign-in.js +95 -0
- package/dist/core/party-grants/complete-party-sign-in.js.map +1 -0
- package/dist/core/party-grants/end-account-grants.d.ts +18 -0
- package/dist/core/party-grants/end-account-grants.js +16 -0
- package/dist/core/party-grants/end-account-grants.js.map +1 -0
- package/dist/core/party-grants/end-grant.d.ts +23 -0
- package/dist/core/party-grants/end-grant.js +33 -0
- package/dist/core/party-grants/end-grant.js.map +1 -0
- package/dist/core/party-grants/end-party-grants.d.ts +19 -0
- package/dist/core/party-grants/end-party-grants.js +31 -0
- package/dist/core/party-grants/end-party-grants.js.map +1 -0
- package/dist/core/party-grants/end-retired-persons-grants.d.ts +19 -0
- package/dist/core/party-grants/end-retired-persons-grants.js +30 -0
- package/dist/core/party-grants/end-retired-persons-grants.js.map +1 -0
- package/dist/core/party-grants/keep-grants-alive.d.ts +18 -0
- package/dist/core/party-grants/keep-grants-alive.js +19 -0
- package/dist/core/party-grants/keep-grants-alive.js.map +1 -0
- package/dist/core/party-grants/list-grants.d.ts +30 -0
- package/dist/core/party-grants/list-grants.js +34 -0
- package/dist/core/party-grants/list-grants.js.map +1 -0
- package/dist/core/party-grants/listing-connection.d.ts +29 -0
- package/dist/core/party-grants/listing-connection.js +17 -0
- package/dist/core/party-grants/listing-connection.js.map +1 -0
- package/dist/core/party-grants/party-grant.d.ts +50 -0
- package/dist/core/party-grants/party-grant.js +26 -0
- package/dist/core/party-grants/party-grant.js.map +1 -0
- package/dist/core/party-grants/ports.d.ts +180 -0
- package/dist/core/party-grants/ports.js +2 -0
- package/dist/core/party-grants/ports.js.map +1 -0
- package/dist/core/party-grants/read-own-grant.d.ts +33 -0
- package/dist/core/party-grants/read-own-grant.js +23 -0
- package/dist/core/party-grants/read-own-grant.js.map +1 -0
- package/dist/core/party-grants/refresh-grant.d.ts +41 -0
- package/dist/core/party-grants/refresh-grant.js +58 -0
- package/dist/core/party-grants/refresh-grant.js.map +1 -0
- package/dist/core/party-grants/remove-grant.d.ts +21 -0
- package/dist/core/party-grants/remove-grant.js +25 -0
- package/dist/core/party-grants/remove-grant.js.map +1 -0
- package/dist/core/party-grants/remove-own-grant.d.ts +17 -0
- package/dist/core/party-grants/remove-own-grant.js +21 -0
- package/dist/core/party-grants/remove-own-grant.js.map +1 -0
- package/dist/core/party-grants/sign-in-party.d.ts +23 -0
- package/dist/core/party-grants/sign-in-party.js +22 -0
- package/dist/core/party-grants/sign-in-party.js.map +1 -0
- package/dist/core/party-grants/start-party-sign-in.d.ts +31 -0
- package/dist/core/party-grants/start-party-sign-in.js +31 -0
- package/dist/core/party-grants/start-party-sign-in.js.map +1 -0
- package/dist/core/party-grants/tell-sign-in-needed.d.ts +29 -0
- package/dist/core/party-grants/tell-sign-in-needed.js +27 -0
- package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -0
- package/dist/core/shared/errors.d.ts +1 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/slack/answer-in-slack.d.ts +8 -3
- package/dist/core/slack/answer-in-slack.js +11 -3
- package/dist/core/slack/answer-in-slack.js.map +1 -1
- package/dist/core/slack/kept-slack-event.d.ts +5 -3
- package/dist/core/slack/kept-slack-event.js.map +1 -1
- package/dist/core/slack/ports.d.ts +7 -8
- package/dist/core/slack/send-slack-events.d.ts +6 -3
- package/dist/core/slack/send-slack-events.js +32 -4
- package/dist/core/slack/send-slack-events.js.map +1 -1
- package/dist/core/slack/show-in-slack.js +2 -2
- package/dist/core/slack/show-in-slack.js.map +1 -1
- package/dist/core/slack/slack-post.d.ts +9 -0
- package/dist/core/slack/slack-post.js +8 -0
- package/dist/core/slack/slack-post.js.map +1 -1
- package/dist/core/slack/take-slack-event.d.ts +4 -2
- package/dist/core/slack/take-slack-event.js +8 -2
- package/dist/core/slack/take-slack-event.js.map +1 -1
- package/dist/core/vault/credential.d.ts +34 -0
- package/dist/grant-worker.d.ts +20 -0
- package/dist/grant-worker.js +24 -0
- package/dist/grant-worker.js.map +1 -0
- package/package.json +1 -1
- package/src/adapters/prisma/migrations/20261028230000_party_grants/migration.sql +18 -0
- package/src/adapters/prisma/migrations/20261029080000_party_sign_in_notices/migration.sql +10 -0
- package/src/adapters/prisma/migrations/20261029120000_party_grants_lost/migration.sql +3 -0
- package/src/adapters/prisma/migrations/20261029130000_party_grants_refreshed/migration.sql +6 -0
- package/src/adapters/prisma/migrations/20261030090000_party_grants_of_account/migration.sql +2 -0
- package/src/adapters/prisma/migrations/20261030100000_slack_events_unmatched_answers/migration.sql +2 -0
- package/src/adapters/prisma/schema.prisma +46 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +3 -1
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/diagnostics/route-bundle-stats.json +55 -55
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +67 -3
- package/web/.next/routes-manifest.json +12 -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 +6 -6
- 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 +6 -6
- 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 +49 -9
- package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +6 -6
- 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 +44 -4
- package/web/.next/server/app/(console)/outside-parties/[name]/page.js +7 -7
- 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 +49 -9
- package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +6 -6
- 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 +46 -6
- package/web/.next/server/app/(console)/outside-parties/add/page.js +8 -7
- 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 +7 -7
- 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 +6 -6
- 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 +6 -6
- 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 -1
- 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 -1
- 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 +9 -9
- package/web/.next/server/app/(console)/overview/page.js +6 -6
- 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 +5 -5
- 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 +6 -6
- 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 +6 -6
- 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/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/disconnect/page.js +5 -5
- package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/expose/page.js +5 -5
- package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/link/route.js +2 -1
- package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/page.js +5 -5
- package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/remove/page.js +5 -5
- package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +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 +6 -6
- 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/apple-icon.png/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/apple-icon.png/route/build-manifest.json +12 -0
- package/web/.next/server/app/apple-icon.png/route.js +8 -0
- package/web/.next/server/app/apple-icon.png/route.js.map +5 -0
- package/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
- package/web/.next/server/app/apple-icon.png.body +0 -0
- package/web/.next/server/app/apple-icon.png.meta +1 -0
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js +5 -5
- 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 +4 -4
- 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 +6 -6
- 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/icon.svg/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/icon.svg/route/build-manifest.json +12 -0
- package/web/.next/server/app/icon.svg/route.js +8 -0
- package/web/.next/server/app/icon.svg/route.js.map +5 -0
- package/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
- package/web/.next/server/app/icon.svg.body +19 -0
- package/web/.next/server/app/icon.svg.meta +1 -0
- package/web/.next/server/app-paths-manifest.json +3 -1
- package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js +315 -0
- package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js.map +1 -0
- package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js +315 -0
- package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js.map +1 -0
- package/web/.next/server/chunks/_0_um96p6psnqx._.js +57 -0
- package/web/.next/server/chunks/_0_um96p6psnqx._.js.map +1 -0
- package/web/.next/server/chunks/_0xw0b7avhvg75._.js +3 -0
- package/web/.next/server/chunks/_0xw0b7avhvg75._.js.map +1 -0
- package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +3 -0
- package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js.map +1 -0
- package/web/.next/server/chunks/_1xf83h9norhws._.js +57 -0
- package/web/.next/server/chunks/_1xf83h9norhws._.js.map +1 -0
- package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js +10 -0
- package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.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 +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__14w0fxvc_of17._.js → [root-of-the-server]__07ba2bfe20c_p._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a8db18tyk__5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +1 -1
- 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]__0k6a9o0872_0x._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -1
- 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]__1aojrh3-9jh9r._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__1w5swo8gmjyx6._.js → [root-of-the-server]__1kynqd8xcwg2b._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__160zc0ja_jjnu._.js → [root-of-the-server]__1q14l5_4hp9h3._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1q14l5_4hp9h3._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js +3 -0
- package/web/.next/server/chunks/ssr/{_0wukvn3-ht3ps._.js.map → _0-boiqan2j4tr._.js.map} +1 -1
- 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/_03lk54yp-yhw3._.js +1 -1
- package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js +3 -0
- package/web/.next/server/chunks/ssr/{_00dg5cvqofspn._.js.map → _0bizyb21i2sl8._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js +3 -0
- package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js.map +1 -0
- 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/_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/_1cnvrfjlqx00k._.js +3 -0
- package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1e2o809f0ekry._.js +1 -1
- 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/_1yqu7dcxs2-so._.js +3 -0
- package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js.map +1 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js.map +1 -0
- 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__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_features_077oo3gzcibvf._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_08yw0utky5j17._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_19v3mlx8c_h1-._.js.map → web_features_08yw0utky5j17._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js +3 -0
- package/web/.next/server/chunks/ssr/{web_features_1rwkgka1xffb1._.js.map → web_features_0mi9a9pdzkdji._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.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_forms_1d1jyea2jni9o._.js → web_features_forms_1muc8tmsxjj_k._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js.map → web_features_forms_1muc8tmsxjj_k._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.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_1-lre9nfakki7._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js +3 -0
- package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js.map +1 -0
- 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_state_00l0wkgvv9y6j._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +1 -1
- 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 +1 -1
- package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js +3 -0
- package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js.map +1 -0
- package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js +3 -0
- package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +3 -3
- 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 +130 -42
- package/web/.next/static/chunks/015ume9uk4hla.js +1 -0
- package/web/.next/static/chunks/{3d_sjtxh_vkr6.js → 07j7jnfe13wx6.js} +1 -1
- package/web/.next/static/chunks/0ji7rkz0ll9gh.js +1 -0
- package/web/.next/static/chunks/{3dhy3jady0w6a.js → 0p_kl57bddsiy.js} +1 -1
- package/web/.next/static/chunks/{3efghx8whwnok.js → 0psup8zn8e6k5.js} +1 -1
- package/web/.next/static/chunks/0vlawcs6_kjs1.js +1 -0
- package/web/.next/static/chunks/1s8b8jpg4jai9.js +1 -0
- package/web/.next/static/chunks/20t1nmdiq805b.js +1 -0
- package/web/.next/static/chunks/26vlpatu47xtw.css +3 -0
- package/web/.next/static/chunks/2gghdkr64z9f9.js +1 -0
- package/web/.next/static/chunks/{3rbzp0tdc1te-.js → 2s_dov6h7kus5.js} +1 -1
- package/web/.next/static/chunks/{1jvae6c-4jwji.js → 2x86i673xcv4t.js} +1 -1
- package/web/.next/static/chunks/{1msggkwsn7vyq.js → 31-hltzmw_9fi.js} +1 -1
- package/web/.next/static/chunks/35bmc8wm29tr6.js +1 -0
- package/web/.next/static/chunks/3rxg2mdhxd6yt.js +1 -0
- package/web/.next/static/chunks/42cpzi5s1o44m.js +1 -0
- package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
- package/web/.next/static/media/icon.0h5hy2etdmq_n.svg +19 -0
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js +0 -369
- package/web/.next/server/chunks/[root-of-the-server]__01ghdzznyfucm._.js.map +0 -1
- package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js +0 -369
- package/web/.next/server/chunks/[root-of-the-server]__0mbwomk4pjrl7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__04e53giy2-2tm._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e59elwbtqr-6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0e59elwbtqr-6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0kb1gl5t8kz4l._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0kb1gl5t8kz4l._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1hfashtn1ee82._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +0 -3
- package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +0 -3
- package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0wukvn3-ht3ps._.js +0 -3
- package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js +0 -3
- package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +0 -3
- package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0t6vd5zwkqjs1.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1cwvrsosahx6q.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1jbr52uzx5cc7.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xhjyaxgorqkx.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_15vnjj3s0z3fa._.js +0 -3
- package/web/.next/server/chunks/ssr/web_15vnjj3s0z3fa._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_1rwkgka1xffb1._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js +0 -3
- package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +0 -1
- package/web/.next/static/chunks/1-suv9wttlxqo.js +0 -1
- package/web/.next/static/chunks/19kfx4qlur25a.js +0 -1
- package/web/.next/static/chunks/1a2-hkn-7471k.js +0 -1
- package/web/.next/static/chunks/1yj875esaesyh.css +0 -3
- package/web/.next/static/chunks/2-kh9nbonee6w.js +0 -1
- package/web/.next/static/chunks/2l92bozm8dcmo.js +0 -1
- package/web/.next/static/chunks/2riya89_i0je8.js +0 -1
- package/web/.next/static/chunks/310mio1zd_mw7.js +0 -1
- package/web/.next/static/chunks/3_pwm8b3mf4mf.js +0 -1
- package/web/.next/static/chunks/455eobei0t6t9.js +0 -1
- /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_buildManifest.js +0 -0
- /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → yf1Q3fTAV4eQiroxoYbih}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ok } from '../shared/result.js';
|
|
2
|
+
import { signInPartyOf } from './sign-in-party.js';
|
|
3
|
+
/** How long a sign-in the gateway started may take to come back from the outside authorization server. */
|
|
4
|
+
export const PARTY_SIGN_IN_MS = 10 * 60 * 1000;
|
|
5
|
+
/**
|
|
6
|
+
* Use case: a person presses Sign in on an outside MCP server's page, for
|
|
7
|
+
* themselves (decision 0067, Q16): every account of the fleet with a person
|
|
8
|
+
* ship may. The gateway seals whose sign-in it is and its PKCE verifier into
|
|
9
|
+
* the state, for ten minutes, and sends the person to the party's
|
|
10
|
+
* authorization server under the party's client.
|
|
11
|
+
*/
|
|
12
|
+
export function createStartPartySignIn(deps) {
|
|
13
|
+
return async ({ actor, name }) => {
|
|
14
|
+
const signingIn = await signInPartyOf(deps.servers, { actor, name });
|
|
15
|
+
if (!signingIn.isOk) {
|
|
16
|
+
return signingIn;
|
|
17
|
+
}
|
|
18
|
+
const { client, accountId, personShipId } = signingIn.value;
|
|
19
|
+
const verifier = deps.secrets.newSecret();
|
|
20
|
+
const state = deps.seals.seal({
|
|
21
|
+
fleetId: actor.fleetId,
|
|
22
|
+
party: name,
|
|
23
|
+
accountId,
|
|
24
|
+
personShipId,
|
|
25
|
+
verifier,
|
|
26
|
+
expiresAt: new Date(deps.clock.now().getTime() + PARTY_SIGN_IN_MS),
|
|
27
|
+
});
|
|
28
|
+
return ok({ url: deps.signIns.authorizeUrl(client, { state, codeChallenge: deps.secrets.challengeOf(verifier), redirectUri: deps.redirectUri }) });
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=start-party-sign-in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-party-sign-in.js","sourceRoot":"","sources":["../../../src/core/party-grants/start-party-sign-in.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAE5E,0GAA0G;AAC1G,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAM/C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAQtC;IACC,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,IAAI;YACX,SAAS;YACT,YAAY;YACZ,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,gBAAgB,CAAC;SACnE,CAAC,CAAC;QACH,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IACrJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { ConnectionStore } from '../connection/ports.js';
|
|
3
|
+
import type { CallSender } from '../mcp-in/ports.js';
|
|
4
|
+
import type { GrantLost } from './party-grant.js';
|
|
5
|
+
import type { SignInNotices } from './ports.js';
|
|
6
|
+
/** Tells a person a call needs their sign-in to a party, or that their grant of it was lost, unless they were told since their last sign-in. */
|
|
7
|
+
export type TellSignInNeeded = (input: {
|
|
8
|
+
fleetId: FleetId;
|
|
9
|
+
party: string;
|
|
10
|
+
personShipId: ShipId;
|
|
11
|
+
lost: GrantLost | null;
|
|
12
|
+
}) => Promise<void>;
|
|
13
|
+
/** The page a person signs in to a party on, in a fleet. */
|
|
14
|
+
export type PageUrlOf = (fleetId: FleetId, party: string) => string;
|
|
15
|
+
/**
|
|
16
|
+
* Use case: the gateway's ship tells a person, by a text message to their
|
|
17
|
+
* person ship, that a call needs their sign-in to a party, or that their
|
|
18
|
+
* grant of it was lost, with the page to sign in on (decision 0067, Q6, Q9): once per party, and again only after a
|
|
19
|
+
* sign-in in between closes the notice. The notice's id keys the message, so
|
|
20
|
+
* one the fleet did not answer is sent again at the next call and stored
|
|
21
|
+
* once; one it refused is not tried again.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createTellSignInNeeded(deps: {
|
|
24
|
+
notices: SignInNotices;
|
|
25
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
26
|
+
sender: CallSender;
|
|
27
|
+
newNoticeId: () => string;
|
|
28
|
+
pageUrlOf: PageUrlOf;
|
|
29
|
+
}): TellSignInNeeded;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
function textOf({ party, lost }, pageUrl) {
|
|
2
|
+
return lost === null
|
|
3
|
+
? `A ship of yours called ${party}, which calls under each person's own sign-in, and you are not signed in to it. Sign in on ${pageUrl}; until then your ships' calls to ${party} are refused.`
|
|
4
|
+
: `Your sign-in to ${party} ended: ${party} refused to refresh it (${lost.why}). Sign in again on ${pageUrl}; until then your ships' calls to ${party} are refused.`;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Use case: the gateway's ship tells a person, by a text message to their
|
|
8
|
+
* person ship, that a call needs their sign-in to a party, or that their
|
|
9
|
+
* grant of it was lost, with the page to sign in on (decision 0067, Q6, Q9): once per party, and again only after a
|
|
10
|
+
* sign-in in between closes the notice. The notice's id keys the message, so
|
|
11
|
+
* one the fleet did not answer is sent again at the next call and stored
|
|
12
|
+
* once; one it refused is not tried again.
|
|
13
|
+
*/
|
|
14
|
+
export function createTellSignInNeeded(deps) {
|
|
15
|
+
return async ({ fleetId, party, personShipId, lost }) => {
|
|
16
|
+
const notice = await deps.notices.open(fleetId, { party, personShipId, noticeId: deps.newNoticeId() });
|
|
17
|
+
const gateway = await deps.connections.find(fleetId);
|
|
18
|
+
if (notice.isTold || gateway === undefined) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const sent = await deps.sender.send(gateway.crewToken, { to: personShipId, contentType: 'text/plain', payload: textOf({ party, lost }, deps.pageUrlOf(fleetId, party)), idempotencyKey: `party-sign-in:${notice.noticeId}` });
|
|
22
|
+
if (sent.isOk || sent.error.code !== 'UNAVAILABLE') {
|
|
23
|
+
await deps.notices.markTold(fleetId, { party, personShipId });
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=tell-sign-in-needed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tell-sign-in-needed.js","sourceRoot":"","sources":["../../../src/core/party-grants/tell-sign-in-needed.ts"],"names":[],"mappings":"AAaA,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAA6C,EAAE,OAAe;IACzF,OAAO,IAAI,KAAK,IAAI;QAClB,CAAC,CAAC,0BAA0B,KAAK,8FAA8F,OAAO,qCAAqC,KAAK,eAAe;QAC/L,CAAC,CAAC,mBAAmB,KAAK,WAAW,KAAK,2BAA2B,IAAI,CAAC,GAAG,uBAAuB,OAAO,qCAAqC,KAAK,eAAe,CAAC;AACzK,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiJ;IACtL,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvG,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,cAAc,EAAE,iBAAiB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9N,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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' | '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';
|
|
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' | 'NO_AUTHORIZATION_SERVER' | 'SIGN_IN_CHECK_FAILED' | 'NOT_SIGNED_IN' | 'NO_SIGN_IN' | 'SIGN_IN_FAILED' | 'TURNED_AWAY' | 'AUTHORIZATION_SERVER_UNREACHABLE' | 'NO_DYNAMIC_REGISTRATION' | 'REGISTRATION_REFUSED' | '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;AA2F5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type MessageId } from '@aeolus-fleet/common';
|
|
1
2
|
import type { PersonCrews, PersonShipDoor } from '../people/ports.js';
|
|
2
3
|
import type { Clock } from '../shared/clock.js';
|
|
3
4
|
import { type Result } from '../shared/result.js';
|
|
@@ -9,6 +10,7 @@ export type AnswerInSlack = (press: SignedRequest & {
|
|
|
9
10
|
userId: string;
|
|
10
11
|
channel: string;
|
|
11
12
|
messageTs: string;
|
|
13
|
+
messageId: MessageId;
|
|
12
14
|
option: number;
|
|
13
15
|
}) => Promise<Result<{
|
|
14
16
|
kind: 'answered' | 'refused' | 'ignored';
|
|
@@ -22,14 +24,17 @@ export type AnswerInSlack = (press: SignedRequest & {
|
|
|
22
24
|
* answer as their person ship, to the question's sender in reply to it,
|
|
23
25
|
* keyed as an answer on the gateway's page is; then the delivery is handled
|
|
24
26
|
* and the question reacted to, as a message core stored is. Core's refusal
|
|
25
|
-
* is said in the question's thread.
|
|
27
|
+
* is said in the question's thread. The press names the question's fleet
|
|
28
|
+
* message, as its button carries it, so a press that comes before the
|
|
29
|
+
* gateway kept the post's Slack message is answered too; the delivery not
|
|
30
|
+
* acknowledged yet, the press, the person's own act, acknowledges it.
|
|
26
31
|
*/
|
|
27
32
|
export declare function createAnswerInSlack(deps: {
|
|
28
33
|
apps: Pick<SlackApps, 'findByAppId'>;
|
|
29
34
|
links: Pick<SlackLinks, 'find'>;
|
|
30
|
-
posts: Pick<SlackPosts, '
|
|
35
|
+
posts: Pick<SlackPosts, 'ofMessage'>;
|
|
31
36
|
crews: Pick<PersonCrews, 'find'>;
|
|
32
|
-
door: Pick<PersonShipDoor, 'delivery' | 'reply' | 'handled'>;
|
|
37
|
+
door: Pick<PersonShipDoor, 'ack' | 'delivery' | 'reply' | 'handled'>;
|
|
33
38
|
slack: Pick<SlackMessages, 'react' | 'postInThread'>;
|
|
34
39
|
signatures: SlackSignatures;
|
|
35
40
|
clock: Clock;
|
|
@@ -19,20 +19,28 @@ function questionIdOf(payload) {
|
|
|
19
19
|
* answer as their person ship, to the question's sender in reply to it,
|
|
20
20
|
* keyed as an answer on the gateway's page is; then the delivery is handled
|
|
21
21
|
* and the question reacted to, as a message core stored is. Core's refusal
|
|
22
|
-
* is said in the question's thread.
|
|
22
|
+
* is said in the question's thread. The press names the question's fleet
|
|
23
|
+
* message, as its button carries it, so a press that comes before the
|
|
24
|
+
* gateway kept the post's Slack message is answered too; the delivery not
|
|
25
|
+
* acknowledged yet, the press, the person's own act, acknowledges it.
|
|
23
26
|
*/
|
|
24
27
|
export function createAnswerInSlack(deps) {
|
|
25
|
-
return async ({ appId, teamId, userId, channel, messageTs, option, body, timestamp, signature }) => {
|
|
28
|
+
return async ({ appId, teamId, userId, channel, messageTs, messageId, option, body, timestamp, signature }) => {
|
|
26
29
|
const app = await deps.apps.findByAppId(appId);
|
|
27
30
|
if (!isSignedBy(app, { request: { body, timestamp, signature }, signatures: deps.signatures, clock: deps.clock })) {
|
|
28
31
|
return err({ kind: 'notSigned' });
|
|
29
32
|
}
|
|
30
33
|
const link = await deps.links.find(app.fleetId, { teamId, userId });
|
|
31
|
-
const
|
|
34
|
+
const kept = link?.stoppedAt === null ? await deps.posts.ofMessage(app.fleetId, { personShipId: link.personShipId, messageId }) : undefined;
|
|
35
|
+
const post = kept?.appId === appId && kept.channel === channel ? kept : undefined;
|
|
32
36
|
const crew = post === undefined ? undefined : await deps.crews.find(app.fleetId, post.personShipId);
|
|
33
37
|
if (post === undefined || post.deliveryId === null || post.senderShipId === null || crew === undefined || app.bot === null) {
|
|
34
38
|
return ok({ kind: 'ignored' });
|
|
35
39
|
}
|
|
40
|
+
if (post.ackedAt === null) {
|
|
41
|
+
// Core reads a delivery again only once acknowledged; a refusal leaves it unread, and the press ignored.
|
|
42
|
+
await deps.door.ack(crew.crewToken, post.deliveryId);
|
|
43
|
+
}
|
|
36
44
|
const delivery = await deps.door.delivery(crew.crewToken, post.deliveryId);
|
|
37
45
|
const questionId = delivery.isOk ? questionIdOf(delivery.value.payload) : undefined;
|
|
38
46
|
if (!delivery.isOk || questionId === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"answer-in-slack.js","sourceRoot":"","sources":["../../../src/core/slack/answer-in-slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"answer-in-slack.js","sourceRoot":"","sources":["../../../src/core/slack/answer-in-slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,14 +5,16 @@ import type { DeliveryId, FleetId, MessageId, ShipId } from '@aeolus-fleet/commo
|
|
|
5
5
|
* the ship it goes to, the person ship it is sent as, where it was written
|
|
6
6
|
* in Slack, and the Markdown it is sent as. An answer in the thread under a
|
|
7
7
|
* posted delivery goes to its sender in reply to its message, and hands the
|
|
8
|
-
* delivery (9.5 step 4)
|
|
9
|
-
*
|
|
8
|
+
* delivery (9.5 step 4); one written before the gateway kept that
|
|
9
|
+
* delivery's Slack message is matched to it as it is sent. Once core took
|
|
10
|
+
* it, only its event id stays, for an hour, to answer Slack's retries.
|
|
10
11
|
*/
|
|
11
12
|
export interface KeptSlackEvent {
|
|
12
13
|
readonly fleetId: FleetId;
|
|
13
14
|
readonly eventId: string;
|
|
14
15
|
readonly appId: string;
|
|
15
|
-
|
|
16
|
+
/** None through the gateway's own bot for an answer in a thread not matched yet: it goes only as an answer. */
|
|
17
|
+
readonly shipId: ShipId | null;
|
|
16
18
|
readonly personShipId: ShipId;
|
|
17
19
|
readonly channel: string;
|
|
18
20
|
readonly ts: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kept-slack-event.js","sourceRoot":"","sources":["../../../src/core/slack/kept-slack-event.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kept-slack-event.js","sourceRoot":"","sources":["../../../src/core/slack/kept-slack-event.ts"],"names":[],"mappings":"AA8BA,wGAAwG;AACxG,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE5C,2FAA2F;AAC3F,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -207,8 +207,14 @@ export interface SlackMessages {
|
|
|
207
207
|
url: string;
|
|
208
208
|
};
|
|
209
209
|
}): Promise<Result<undefined, SlackRefusal>>;
|
|
210
|
-
/**
|
|
210
|
+
/**
|
|
211
|
+
* A message in a conversation, or a thread of it, with a button per option
|
|
212
|
+
* to answer (chat.postMessage): the Slack message it is. A press of a
|
|
213
|
+
* button names the fleet message it shows, so a press is matched before
|
|
214
|
+
* the gateway keeps the Slack message.
|
|
215
|
+
*/
|
|
211
216
|
post(botToken: string, message: {
|
|
217
|
+
messageId: MessageId;
|
|
212
218
|
channel: string;
|
|
213
219
|
threadTs: string | null;
|
|
214
220
|
text: string;
|
|
@@ -265,13 +271,6 @@ export interface SlackPosts {
|
|
|
265
271
|
personShipId: ShipId;
|
|
266
272
|
messageId: MessageId;
|
|
267
273
|
}): Promise<SlackPost | undefined>;
|
|
268
|
-
/** The delivery posted to the person ship as this Slack message. */
|
|
269
|
-
atSlackMessage(fleetId: FleetId, message: {
|
|
270
|
-
personShipId: ShipId;
|
|
271
|
-
appId: string;
|
|
272
|
-
channel: string;
|
|
273
|
-
ts: string;
|
|
274
|
-
}): Promise<SlackPost | undefined>;
|
|
275
274
|
/** The latest delivery posted to the person ship in the thread, the thread's first message included. */
|
|
276
275
|
lastInThread(fleetId: FleetId, thread: {
|
|
277
276
|
personShipId: ShipId;
|
|
@@ -11,7 +11,10 @@ export type SendSlackEvents = () => Promise<void>;
|
|
|
11
11
|
* (gateway scopes 9.4 steps 5 to 7, P-B2). Each kept event goes as the
|
|
12
12
|
* person ship, which the gateway crews, to the bot's ship by its id, as
|
|
13
13
|
* Markdown, keyed by Slack's event id so a send tried again is the same
|
|
14
|
-
* send.
|
|
14
|
+
* send. One in a thread kept unmatched is matched to the delivery the
|
|
15
|
+
* thread is under now: it waits while a delivery in that conversation is
|
|
16
|
+
* not yet in Slack, and through the gateway's own bot, answering none, it
|
|
17
|
+
* is not sent. Core stored it: the gateway reacts to the person's Slack message.
|
|
15
18
|
* Core refused it: the reason goes in its thread. Core did not answer: it
|
|
16
19
|
* goes again next round. Nothing builds up: a taken event's id goes an
|
|
17
20
|
* hour after core took it, and an event core has not taken in 24 hours
|
|
@@ -22,8 +25,8 @@ export declare function createSendSlackEvents(deps: {
|
|
|
22
25
|
apps: Pick<SlackApps, 'findByAppId'>;
|
|
23
26
|
crews: Pick<PersonCrews, 'find'>;
|
|
24
27
|
sender: Pick<CallSender, 'send'>;
|
|
25
|
-
door: Pick<PersonShipDoor, 'handled'>;
|
|
26
|
-
posts: Pick<SlackPosts, 'save'>;
|
|
28
|
+
door: Pick<PersonShipDoor, 'ack' | 'handled'>;
|
|
29
|
+
posts: Pick<SlackPosts, 'save' | 'lastInThread' | 'unfinished'>;
|
|
27
30
|
slack: Pick<SlackMessages, 'postInThread' | 'react'>;
|
|
28
31
|
clock: Clock;
|
|
29
32
|
}): SendSlackEvents;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TAKEN_KEPT_MS, UNTAKEN_KEPT_MS } from './kept-slack-event.js';
|
|
2
|
+
import { isAwaitingSlackIn } from './slack-post.js';
|
|
2
3
|
/** How many kept events a round sends at most. */
|
|
3
4
|
const ROUND_LIMIT = 50;
|
|
4
5
|
/** The reaction that tells the person their message reached the fleet. */
|
|
@@ -24,20 +25,45 @@ function refusalText(ship, refusal) {
|
|
|
24
25
|
* (gateway scopes 9.4 steps 5 to 7, P-B2). Each kept event goes as the
|
|
25
26
|
* person ship, which the gateway crews, to the bot's ship by its id, as
|
|
26
27
|
* Markdown, keyed by Slack's event id so a send tried again is the same
|
|
27
|
-
* send.
|
|
28
|
+
* send. One in a thread kept unmatched is matched to the delivery the
|
|
29
|
+
* thread is under now: it waits while a delivery in that conversation is
|
|
30
|
+
* not yet in Slack, and through the gateway's own bot, answering none, it
|
|
31
|
+
* is not sent. Core stored it: the gateway reacts to the person's Slack message.
|
|
28
32
|
* Core refused it: the reason goes in its thread. Core did not answer: it
|
|
29
33
|
* goes again next round. Nothing builds up: a taken event's id goes an
|
|
30
34
|
* hour after core took it, and an event core has not taken in 24 hours
|
|
31
35
|
* goes, the person told in its thread.
|
|
32
36
|
*/
|
|
33
37
|
export function createSendSlackEvents(deps) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
38
|
+
/** The event as it goes now: one in a thread kept unmatched answers the delivery the thread is under, if any; none while it may still be under one not yet in Slack. */
|
|
39
|
+
const matched = async (event) => {
|
|
40
|
+
const { fleetId, personShipId, appId, channel, threadTs } = event;
|
|
41
|
+
if (threadTs === null || event.inReplyTo !== null) {
|
|
42
|
+
return event;
|
|
43
|
+
}
|
|
44
|
+
// Awaiting is read before the thread: a post Slack answers between the two reads is then found in the thread, never missed by both.
|
|
45
|
+
const isAwaiting = (await deps.posts.unfinished(fleetId, personShipId)).some((post) => isAwaitingSlackIn(post, { appId, channel }));
|
|
46
|
+
const answered = await deps.posts.lastInThread(fleetId, { personShipId, appId, channel, threadTs });
|
|
47
|
+
if (answered !== undefined) {
|
|
48
|
+
return { ...event, shipId: answered.senderShipId ?? event.shipId, inReplyTo: answered.messageId, deliveryId: answered.deliveryId };
|
|
49
|
+
}
|
|
50
|
+
return isAwaiting ? undefined : event;
|
|
51
|
+
};
|
|
52
|
+
const send = async (kept) => {
|
|
53
|
+
const app = await deps.apps.findByAppId(kept.appId);
|
|
54
|
+
const crew = await deps.crews.find(kept.fleetId, kept.personShipId);
|
|
37
55
|
if (app === undefined || app.bot === null || crew === undefined) {
|
|
38
56
|
// No bot to answer with, or no crew to send as: the event waits, and goes after 24 hours told as not reached.
|
|
39
57
|
return 'later';
|
|
40
58
|
}
|
|
59
|
+
const event = await matched(kept);
|
|
60
|
+
if (event === undefined) {
|
|
61
|
+
return 'later';
|
|
62
|
+
}
|
|
63
|
+
if (event.shipId === null) {
|
|
64
|
+
// Through the gateway's own bot only an answer goes, as a message there that answers none is not kept.
|
|
65
|
+
return 'taken';
|
|
66
|
+
}
|
|
41
67
|
const where = { channel: event.channel, threadTs: event.threadTs ?? event.ts };
|
|
42
68
|
const message = { to: event.shipId, contentType: 'text/markdown', payload: event.markdown, idempotencyKey: `slack:${event.eventId}` };
|
|
43
69
|
const sent = await deps.sender.send(crew.crewToken, event.inReplyTo === null ? message : { ...message, inReplyTo: event.inReplyTo });
|
|
@@ -45,7 +71,9 @@ export function createSendSlackEvents(deps) {
|
|
|
45
71
|
const { fleetId, personShipId, appId, channel, ts, threadTs } = event;
|
|
46
72
|
await deps.posts.save({ fleetId, personShipId, messageId: sent.value.messageId, deliveryId: null, senderShipId: null, appId, channel, ts, threadTs, isLinkOnly: false, ackedAt: null });
|
|
47
73
|
if (event.deliveryId !== null) {
|
|
74
|
+
// Answered before the gateway acknowledged it, the person's answer acknowledges it, as core takes handled only then.
|
|
48
75
|
// A refusal leaves the delivery acknowledged, as an answer on the gateway's page does when handled is refused.
|
|
76
|
+
await deps.door.ack(crew.crewToken, event.deliveryId);
|
|
49
77
|
await deps.door.handled(crew.crewToken, event.deliveryId);
|
|
50
78
|
}
|
|
51
79
|
// Without the reaction the person sees no sign and sends again: the event goes again, the same send by its key.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-slack-events.js","sourceRoot":"","sources":["../../../src/core/slack/send-slack-events.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"send-slack-events.js","sourceRoot":"","sources":["../../../src/core/slack/send-slack-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ export function createShowInSlack(deps) {
|
|
|
45
45
|
/** Posts it, waiting out Slack's rate limits: the Slack message, or none when Slack refused it. */
|
|
46
46
|
const posted = async (where, shown) => {
|
|
47
47
|
for (let tried = 1;; tried += 1) {
|
|
48
|
-
const answered = await deps.slack.post(where.app.bot.token, { channel: where.channel, threadTs: where.threadTs, text: shown.text, buttons: shown.buttons });
|
|
48
|
+
const answered = await deps.slack.post(where.app.bot.token, { messageId: shown.messageId, channel: where.channel, threadTs: where.threadTs, text: shown.text, buttons: shown.buttons });
|
|
49
49
|
if (answered.isOk) {
|
|
50
50
|
return answered.value.ts;
|
|
51
51
|
}
|
|
@@ -76,7 +76,7 @@ export function createShowInSlack(deps) {
|
|
|
76
76
|
}
|
|
77
77
|
const app = await deps.apps.find(post.fleetId, post.appId);
|
|
78
78
|
const shown = slackPostOf(delivery, { overviewUrl: deps.overviewUrlOf(post.fleetId), isHeadedBySender: app?.shipId === null });
|
|
79
|
-
const ts = isInSlack(app) ? await posted({ app, channel: post.channel, threadTs: post.threadTs }, shown.kind === 'shown' ? shown
|
|
79
|
+
const ts = isInSlack(app) ? await posted({ app, channel: post.channel, threadTs: post.threadTs }, { messageId: post.messageId, text: shown.text, buttons: shown.kind === 'shown' ? shown.buttons : [] }) : undefined;
|
|
80
80
|
if (ts === undefined) {
|
|
81
81
|
await deps.posts.remove(post.fleetId, post);
|
|
82
82
|
return 'notShown';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show-in-slack.js","sourceRoot":"","sources":["../../../src/core/slack/show-in-slack.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAItD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,wHAAwH;AACxH,MAAM,eAAe,GAAG,CAAC,CAAC;AAkB1B,SAAS,SAAS,CAAC,GAAyB;IAC1C,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAC,IASjC;IACC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAe,EAAE,QAAwB,EAA8B,EAAE;QAC9F,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACjJ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;YAC3F,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QACnE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QACD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,CAAC,CAAC;IAEF,mGAAmG;IACnG,MAAM,MAAM,GAAG,KAAK,EAAE,KAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"show-in-slack.js","sourceRoot":"","sources":["../../../src/core/slack/show-in-slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,5 +27,14 @@ export interface SlackPost {
|
|
|
27
27
|
readonly isLinkOnly: boolean;
|
|
28
28
|
readonly ackedAt: Date | null;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether the post is a delivery not yet in Slack that starts a thread in
|
|
32
|
+
* the conversation: a reply in a thread there that matches no post may be
|
|
33
|
+
* under it, before the gateway keeps its Slack message.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isAwaitingSlackIn(post: SlackPost, conversation: {
|
|
36
|
+
appId: string;
|
|
37
|
+
channel: string;
|
|
38
|
+
}): boolean;
|
|
30
39
|
/** Whether the post is a delivery the gateway did not finish: not yet in Slack, or not yet acknowledged. */
|
|
31
40
|
export declare function isUnfinished(post: SlackPost): boolean;
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the post is a delivery not yet in Slack that starts a thread in
|
|
3
|
+
* the conversation: a reply in a thread there that matches no post may be
|
|
4
|
+
* under it, before the gateway keeps its Slack message.
|
|
5
|
+
*/
|
|
6
|
+
export function isAwaitingSlackIn(post, conversation) {
|
|
7
|
+
return post.deliveryId !== null && post.ts === null && post.threadTs === null && post.appId === conversation.appId && post.channel === conversation.channel;
|
|
8
|
+
}
|
|
1
9
|
/** Whether the post is a delivery the gateway did not finish: not yet in Slack, or not yet acknowledged. */
|
|
2
10
|
export function isUnfinished(post) {
|
|
3
11
|
return post.deliveryId !== null && (post.ts === null || (!post.isLinkOnly && post.ackedAt === null));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-post.js","sourceRoot":"","sources":["../../../src/core/slack/slack-post.ts"],"names":[],"mappings":"AA+BA,4GAA4G;AAC5G,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC"}
|
|
1
|
+
{"version":3,"file":"slack-post.js","sourceRoot":"","sources":["../../../src/core/slack/slack-post.ts"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,YAAgD;IACjG,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC;AAC9J,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC"}
|
|
@@ -30,13 +30,15 @@ export type TakeSlackEvent = (event: {
|
|
|
30
30
|
* as, and sent now (9.4 step 3); a retry of a kept one changes nothing.
|
|
31
31
|
* One in the thread under a delivery the gateway posted answers it: it goes
|
|
32
32
|
* to that delivery's sender in reply to its message (9.5 step 4). Through
|
|
33
|
-
* the gateway's own bot, only such an answer is sent.
|
|
33
|
+
* the gateway's own bot, only such an answer is sent. One in a thread that
|
|
34
|
+
* matches no post, while a delivery in that conversation is not yet in
|
|
35
|
+
* Slack, may be under it: it is kept, and matched as it is sent.
|
|
34
36
|
*/
|
|
35
37
|
export declare function createTakeSlackEvent(deps: {
|
|
36
38
|
apps: Pick<SlackApps, 'findByAppId' | 'save'>;
|
|
37
39
|
links: Pick<SlackLinks, 'find'>;
|
|
38
40
|
events: Pick<SlackEvents, 'keep'>;
|
|
39
|
-
posts: Pick<SlackPosts, 'lastInThread'>;
|
|
41
|
+
posts: Pick<SlackPosts, 'lastInThread' | 'unfinished'>;
|
|
40
42
|
/** Sends the kept events now, not at the next round. */
|
|
41
43
|
sendNow: () => void;
|
|
42
44
|
slack: Pick<SlackMessages, 'postOnlyTo'>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { err, ok } from '../shared/result.js';
|
|
2
2
|
import { isRemovedEvent, personMessageOf } from './slack-event.js';
|
|
3
|
+
import { isAwaitingSlackIn } from './slack-post.js';
|
|
3
4
|
import { markdownOf } from './slack-markdown.js';
|
|
4
5
|
import { isSignedBy } from './slack-request.js';
|
|
5
6
|
/** What the gateway answers a person whose disabled account's link stopped (gateway scopes 9.3). */
|
|
@@ -17,7 +18,9 @@ export const STOPPED_LINK_TEXT = 'Your account cannot message the fleet now';
|
|
|
17
18
|
* as, and sent now (9.4 step 3); a retry of a kept one changes nothing.
|
|
18
19
|
* One in the thread under a delivery the gateway posted answers it: it goes
|
|
19
20
|
* to that delivery's sender in reply to its message (9.5 step 4). Through
|
|
20
|
-
* the gateway's own bot, only such an answer is sent.
|
|
21
|
+
* the gateway's own bot, only such an answer is sent. One in a thread that
|
|
22
|
+
* matches no post, while a delivery in that conversation is not yet in
|
|
23
|
+
* Slack, may be under it: it is kept, and matched as it is sent.
|
|
21
24
|
*/
|
|
22
25
|
export function createTakeSlackEvent(deps) {
|
|
23
26
|
return async ({ appId, event, isRetry, body, timestamp, signature }) => {
|
|
@@ -37,9 +40,12 @@ export function createTakeSlackEvent(deps) {
|
|
|
37
40
|
const link = await deps.links.find(app.fleetId, { teamId: message.teamId, userId: message.userId });
|
|
38
41
|
if (link?.stoppedAt === null) {
|
|
39
42
|
const { eventId, channel, ts, threadTs, text, files } = message;
|
|
43
|
+
// Awaiting is read before the thread: a post Slack answers between the two reads is then found in the thread, never missed by both.
|
|
44
|
+
const isAwaiting = threadTs !== null && (await deps.posts.unfinished(app.fleetId, link.personShipId)).some((post) => isAwaitingSlackIn(post, { appId, channel }));
|
|
40
45
|
const answered = threadTs === null ? undefined : await deps.posts.lastInThread(app.fleetId, { personShipId: link.personShipId, appId, channel, threadTs });
|
|
41
46
|
const shipId = answered?.senderShipId ?? app.shipId;
|
|
42
|
-
|
|
47
|
+
const isToMatch = isAwaiting && answered === undefined;
|
|
48
|
+
if (shipId === null && !isToMatch) {
|
|
43
49
|
return ok({ kind: 'ignored' });
|
|
44
50
|
}
|
|
45
51
|
const kept = await deps.events.keep({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take-slack-event.js","sourceRoot":"","sources":["../../../src/core/slack/take-slack-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,oGAAoG;AACpG,MAAM,CAAC,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAY7E
|
|
1
|
+
{"version":3,"file":"take-slack-event.js","sourceRoot":"","sources":["../../../src/core/slack/take-slack-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,3 +20,37 @@ export type McpServerCredential =
|
|
|
20
20
|
/** The OAuth scope to ask the authorization server for, if the server needs one. */
|
|
21
21
|
readonly scope?: string;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* The OAuth client the gateway registered for one party with the outside
|
|
25
|
+
* authorization server, by dynamic registration (decision 0067): every
|
|
26
|
+
* person's grant for the party is under it, and it goes to no issuer but its
|
|
27
|
+
* own.
|
|
28
|
+
*/
|
|
29
|
+
export interface SignInClient {
|
|
30
|
+
readonly issuer: string;
|
|
31
|
+
readonly authorizationEndpoint: string;
|
|
32
|
+
readonly tokenEndpoint: string;
|
|
33
|
+
/** Where a grant is revoked, when the authorization server offers it. */
|
|
34
|
+
readonly revocationEndpoint: string | null;
|
|
35
|
+
/** Whether the authorization server states its issuer in each authorization response (RFC 9207): a response without it is then refused. */
|
|
36
|
+
readonly isIssuerInResponse: boolean;
|
|
37
|
+
readonly clientId: string;
|
|
38
|
+
/** None when the authorization server registered a public client. */
|
|
39
|
+
readonly clientSecret: string | null;
|
|
40
|
+
/** Where the client is read or deleted, and with what (RFC 7592), when the authorization server answered them; only registration answers them. */
|
|
41
|
+
readonly registrationClientUri: string | null;
|
|
42
|
+
readonly registrationAccessToken: string | null;
|
|
43
|
+
/** The server's resource indicator (RFC 8707), as its protected resource metadata names it. */
|
|
44
|
+
readonly resource: string;
|
|
45
|
+
/** The outside scopes each person's sign-in asks for. */
|
|
46
|
+
readonly scope: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* An outside MCP server's credential: one of the gateway's own, or, for a
|
|
50
|
+
* server that takes only an OAuth sign-in, the party's client, under which
|
|
51
|
+
* each person signs in for themselves (decision 0067).
|
|
52
|
+
*/
|
|
53
|
+
export type McpServerPartyCredential = McpServerCredential | {
|
|
54
|
+
readonly kind: 'personSignIn';
|
|
55
|
+
readonly client: SignInClient;
|
|
56
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The gateway's rounds over grants (decision 0067): every interval, until
|
|
3
|
+
* it stops, a round refreshes the grants that are idle or near their end
|
|
4
|
+
* (Q7) and ends the grants of retired person ships (Q6). Every gateway
|
|
5
|
+
* instance runs one; the grant's row lock keeps their refreshes of one
|
|
6
|
+
* grant one at a time.
|
|
7
|
+
*/
|
|
8
|
+
import type { FastifyBaseLogger } from 'fastify';
|
|
9
|
+
import type { Sleep } from './core/mcp-out/run-party.js';
|
|
10
|
+
export interface GrantWorker {
|
|
11
|
+
start(): void;
|
|
12
|
+
/** Stops, once the round under way ended. */
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createGrantWorker(deps: {
|
|
16
|
+
round: () => Promise<void>;
|
|
17
|
+
sleep: Sleep;
|
|
18
|
+
intervalMs: number;
|
|
19
|
+
log: FastifyBaseLogger;
|
|
20
|
+
}): GrantWorker;
|