@aeolus-fleet/gateway 0.33.0 → 0.35.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/person-tools.js +5 -3
- package/dist/adapters/http/person-tools.js.map +1 -1
- 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/pagasae/email-channel.js +4 -3
- package/dist/adapters/pagasae/email-channel.js.map +1 -1
- 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 +23 -3
- 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 +150 -11
- 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/a2a-in/send-a2a-message.d.ts +0 -2
- package/dist/core/a2a-in/send-a2a-message.js +17 -4
- package/dist/core/a2a-in/send-a2a-message.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/people/ports.d.ts +9 -2
- package/dist/core/people/wake-person.js +3 -1
- 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/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 +48 -8
- 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 +48 -8
- 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 +10 -10
- 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 +10 -10
- 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 +10 -10
- 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 +10 -10
- 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/_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/_1e2o809f0ekry._.js +1 -1
- package/web/.next/server/chunks/ssr/_1oy13966tft2_._.js +3 -0
- package/web/.next/server/chunks/ssr/_1oy13966tft2_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1pf8x2exvfl1z._.js +3 -0
- package/web/.next/server/chunks/ssr/_1pf8x2exvfl1z._.js.map +1 -0
- 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 +127 -39
- package/web/.next/static/chunks/{3efghx8whwnok.js → 03239gtej3tj0.js} +1 -1
- package/web/.next/static/chunks/{3d_sjtxh_vkr6.js → 07j7jnfe13wx6.js} +1 -1
- package/web/.next/static/chunks/{3dhy3jady0w6a.js → 0p_kl57bddsiy.js} +1 -1
- package/web/.next/static/chunks/0tmvd_zw45u96.js +1 -0
- package/web/.next/static/chunks/0vlawcs6_kjs1.js +1 -0
- package/web/.next/static/chunks/1se0j0htjyep6.js +1 -0
- package/web/.next/static/chunks/26vlpatu47xtw.css +3 -0
- package/web/.next/static/chunks/{1msggkwsn7vyq.js → 287ofedoj_6xl.js} +1 -1
- package/web/.next/static/chunks/2_e-puldye2do.js +1 -0
- package/web/.next/static/chunks/2gghdkr64z9f9.js +1 -0
- package/web/.next/static/chunks/{1jvae6c-4jwji.js → 2x86i673xcv4t.js} +1 -1
- package/web/.next/static/chunks/34kulpk3a-cka.js +1 -0
- package/web/.next/static/chunks/3ceatffqhpgpu.js +1 -0
- package/web/.next/static/chunks/{3rbzp0tdc1te-.js → 3fd167c0-ot3u.js} +1 -1
- package/web/.next/static/chunks/3l5jtag3-fukc.js +1 -0
- package/web/.next/static/chunks/3rxg2mdhxd6yt.js +1 -0
- package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
- package/web/.next/static/media/icon.1o2ogor9e8-fc.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 → R_nPUtDcDp1BPV3QHhaMZ}/_buildManifest.js +0 -0
- /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → R_nPUtDcDp1BPV3QHhaMZ}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{87vMFs_KGRcFD40WWRkFR → R_nPUtDcDp1BPV3QHhaMZ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ActorCredential } from '../actors/credential-of.js';
|
|
2
|
+
import type { ApprovingDeps, ApprovingRefusal, CheckApproving } from '../parties/check-approving.js';
|
|
3
|
+
import { type DomainError } from '../shared/errors.js';
|
|
4
|
+
import { type Result } from '../shared/result.js';
|
|
5
|
+
import type { SignInClient } from '../vault/credential.js';
|
|
6
|
+
export type ApprovedSignInPartyRefusal = ApprovingRefusal | DomainError<'NO_SIGN_IN'>;
|
|
7
|
+
/**
|
|
8
|
+
* The outside MCP server where each person signs in whose grants an approver
|
|
9
|
+
* sees and removes (decision 0067, Q6, Q12): the actor holds gateway:approve
|
|
10
|
+
* within manage reach of its proxy ship, as the fleet answers; its name and
|
|
11
|
+
* client, and the actor's credential to read the fleet as.
|
|
12
|
+
*/
|
|
13
|
+
export declare function approvedSignInParty(deps: ApprovingDeps, asked: Parameters<CheckApproving>[0]): Promise<Result<{
|
|
14
|
+
name: string;
|
|
15
|
+
client: SignInClient;
|
|
16
|
+
credential: ActorCredential;
|
|
17
|
+
}, ApprovedSignInPartyRefusal>>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { approvedParty } from '../parties/check-approving.js';
|
|
2
|
+
import { refuse } from '../shared/errors.js';
|
|
3
|
+
import { ok } from '../shared/result.js';
|
|
4
|
+
/**
|
|
5
|
+
* The outside MCP server where each person signs in whose grants an approver
|
|
6
|
+
* sees and removes (decision 0067, Q6, Q12): the actor holds gateway:approve
|
|
7
|
+
* within manage reach of its proxy ship, as the fleet answers; its name and
|
|
8
|
+
* client, and the actor's credential to read the fleet as.
|
|
9
|
+
*/
|
|
10
|
+
export async function approvedSignInParty(deps, asked) {
|
|
11
|
+
const approved = await approvedParty(deps, asked);
|
|
12
|
+
if (!approved.isOk) {
|
|
13
|
+
return approved;
|
|
14
|
+
}
|
|
15
|
+
const { party, credential } = approved.value;
|
|
16
|
+
if (party.kind !== 'mcpServer' || party.credential.kind !== 'personSignIn') {
|
|
17
|
+
return refuse('NO_SIGN_IN', `Nobody signs in to ${party.name} for themselves: the gateway calls it with its own credential`);
|
|
18
|
+
}
|
|
19
|
+
return ok({ name: party.name, client: party.credential.client, credential });
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=approved-sign-in-party.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-sign-in-party.js","sourceRoot":"","sources":["../../../src/core/party-grants/approved-sign-in-party.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAKtD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAmB,EAAE,KAAoC;IACjG,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,YAAY,EAAE,sBAAsB,KAAK,CAAC,IAAI,+DAA+D,CAAC,CAAC;IAC/H,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { FleetId, ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { ConnectionStore, FleetDoor } from '../connection/ports.js';
|
|
3
|
+
import type { PartyGrant } from './party-grant.js';
|
|
4
|
+
import type { PartyGrants } from './ports.js';
|
|
5
|
+
/** A person a call is for: their person ship, by id and name. */
|
|
6
|
+
export interface CallPerson {
|
|
7
|
+
readonly shipId: ShipId;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Whose grant a call goes out under:
|
|
12
|
+
* - grant: the person who owns the asking ship holds one for the party;
|
|
13
|
+
* - notSignedIn: they hold none, or a lost one (Q5);
|
|
14
|
+
* - noPerson: argo owns the asking ship, or it is argo, so no person can sign in for it (Q10);
|
|
15
|
+
* - unread: core did not answer the owner read, so the call waits and is tried again, never made without its person's grant.
|
|
16
|
+
*/
|
|
17
|
+
export type CallGrant = {
|
|
18
|
+
readonly kind: 'grant';
|
|
19
|
+
readonly grant: PartyGrant;
|
|
20
|
+
readonly person: CallPerson;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: 'notSignedIn';
|
|
23
|
+
readonly person: CallPerson;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'noPerson';
|
|
26
|
+
readonly shipName: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: 'unread';
|
|
29
|
+
};
|
|
30
|
+
export type CallGrantOf = (call: {
|
|
31
|
+
fleetId: FleetId;
|
|
32
|
+
party: string;
|
|
33
|
+
senderShipId: ShipId;
|
|
34
|
+
}) => Promise<CallGrant>;
|
|
35
|
+
/**
|
|
36
|
+
* The grant a call to a server where each person signs in goes out under
|
|
37
|
+
* (decision 0067, Q1, Q11): the grant of the person who owns the asking
|
|
38
|
+
* ship, a person ship owning itself. The owner is read from core at each
|
|
39
|
+
* hand-over, as the gateway's ship on the asking ship's behalf, as the scope
|
|
40
|
+
* check reads it: a change of owner holds from the next call.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createCallGrantOf(deps: {
|
|
43
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
44
|
+
door: Pick<FleetDoor, 'getShip'>;
|
|
45
|
+
grants: Pick<PartyGrants, 'ofPerson'>;
|
|
46
|
+
}): CallGrantOf;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** argo's name, which core reserves for it: an owner of this name is argo, never a person (decision 0045). */
|
|
2
|
+
const ARGO_NAME = 'argo';
|
|
3
|
+
/**
|
|
4
|
+
* The grant a call to a server where each person signs in goes out under
|
|
5
|
+
* (decision 0067, Q1, Q11): the grant of the person who owns the asking
|
|
6
|
+
* ship, a person ship owning itself. The owner is read from core at each
|
|
7
|
+
* hand-over, as the gateway's ship on the asking ship's behalf, as the scope
|
|
8
|
+
* check reads it: a change of owner holds from the next call.
|
|
9
|
+
*/
|
|
10
|
+
export function createCallGrantOf(deps) {
|
|
11
|
+
return async ({ fleetId, party, senderShipId }) => {
|
|
12
|
+
const gateway = await deps.connections.find(fleetId);
|
|
13
|
+
if (gateway === undefined) {
|
|
14
|
+
return { kind: 'unread' };
|
|
15
|
+
}
|
|
16
|
+
const ship = await deps.door.getShip(gateway.crewToken, { shipId: senderShipId, onBehalfOf: senderShipId });
|
|
17
|
+
if (!ship.isOk) {
|
|
18
|
+
return { kind: 'unread' };
|
|
19
|
+
}
|
|
20
|
+
const { owner } = ship.value;
|
|
21
|
+
if (owner === null || owner.name === ARGO_NAME) {
|
|
22
|
+
return { kind: 'noPerson', shipName: ship.value.name };
|
|
23
|
+
}
|
|
24
|
+
const person = { shipId: owner.shipId, name: owner.name };
|
|
25
|
+
const grant = await deps.grants.ofPerson(fleetId, { party, personShipId: owner.shipId });
|
|
26
|
+
// None, or a lost one, alike.
|
|
27
|
+
return grant?.lost !== null ? { kind: 'notSignedIn', person } : { kind: 'grant', grant, person };
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=call-grant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/call-grant.ts"],"names":[],"mappings":"AAMA,8GAA8G;AAC9G,MAAM,SAAS,GAAG,MAAM,CAAC;AAuBzB;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA6H;IAC7J,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5G,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACzD,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzF,8BAA8B;QAC9B,OAAO,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACnG,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { AccountOfSignIn } from '../account-sign-in/account-of-sign-in.js';
|
|
3
|
+
import type { Clock } from '../shared/clock.js';
|
|
4
|
+
import type { DomainError } from '../shared/errors.js';
|
|
5
|
+
import { type Result } from '../shared/result.js';
|
|
6
|
+
import type { PartyGrants, PartySignIns, PartySignInSeals, SignInNotices, SignInServers, StatesProxyShip } from './ports.js';
|
|
7
|
+
/** The party's page a refusal goes back to: none when the state names no sign-in the gateway started. */
|
|
8
|
+
export interface SignInPage {
|
|
9
|
+
readonly fleetId: FleetId;
|
|
10
|
+
readonly party: string;
|
|
11
|
+
}
|
|
12
|
+
export type CompletePartySignInRefusal = DomainError<'SIGN_IN_FAILED' | 'NOT_SIGNED_IN' | 'TURNED_AWAY' | 'AUTHORIZATION_SERVER_UNREACHABLE' | 'NO_SUCH_PARTY'> & {
|
|
13
|
+
readonly at: SignInPage | null;
|
|
14
|
+
/** The OAuth error code the authorization server answered, if it answered one. */
|
|
15
|
+
readonly serverError: string | null;
|
|
16
|
+
};
|
|
17
|
+
export type CompletePartySignIn = (back: {
|
|
18
|
+
state: string | undefined;
|
|
19
|
+
code: string | undefined;
|
|
20
|
+
error: string | undefined;
|
|
21
|
+
/** The issuer the authorization response names (RFC 9207), if it names one. */
|
|
22
|
+
iss: string | undefined;
|
|
23
|
+
/** The browser's shared sign-in, as pagasae's cookie carries it. */
|
|
24
|
+
signIn: string | undefined;
|
|
25
|
+
}) => Promise<Result<SignInPage & {
|
|
26
|
+
statementRefusal: string | null;
|
|
27
|
+
}, CompletePartySignInRefusal>>;
|
|
28
|
+
/**
|
|
29
|
+
* Use case: the outside authorization server sends a person back from
|
|
30
|
+
* signing in to a party for themselves (decision 0067). Within the sign-in's
|
|
31
|
+
* ten minutes, in a browser whose shared sign-in names the account that
|
|
32
|
+
* started it, and with the party's issuer where the response names one or
|
|
33
|
+
* the server states it always does (RFC 9207), the code is redeemed with
|
|
34
|
+
* the party's client and the sign-in's PKCE verifier; else it is never
|
|
35
|
+
* redeemed. A person who denied consent is not signed in. Where the ID
|
|
36
|
+
* token names an outside account another person's grant already names, the
|
|
37
|
+
* person is turned away and the tokens are dropped (Q13). Else the grant is
|
|
38
|
+
* kept in place of the person's earlier one, the notice that told them a
|
|
39
|
+
* call needed it is closed, so a later loss tells them again (Q6), and the
|
|
40
|
+
* proxy ship is stated from it (Q15). Nothing is kept on any refusal.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createCompletePartySignIn(deps: {
|
|
43
|
+
servers: SignInServers;
|
|
44
|
+
grants: Pick<PartyGrants, 'ofSubject' | 'keep'>;
|
|
45
|
+
seals: PartySignInSeals;
|
|
46
|
+
signIns: Pick<PartySignIns, 'redeemCode'>;
|
|
47
|
+
notices: Pick<SignInNotices, 'close'>;
|
|
48
|
+
accountOf: (asked: Parameters<AccountOfSignIn>[0]) => ReturnType<AccountOfSignIn>;
|
|
49
|
+
stateParty: StatesProxyShip;
|
|
50
|
+
clock: Clock;
|
|
51
|
+
redirectUri: string;
|
|
52
|
+
}): CompletePartySignIn;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { err, ok } from '../shared/result.js';
|
|
2
|
+
import { accessTokenEndsAtOf } from './party-grant.js';
|
|
3
|
+
function refused(at, refusal) {
|
|
4
|
+
return err({ serverError: null, ...refusal, at });
|
|
5
|
+
}
|
|
6
|
+
/** The outside account an ID token names, once it is checked to be the party's issuer's, for the party's client; none when it is not. */
|
|
7
|
+
function outsideAccountOf(idToken, client) {
|
|
8
|
+
if (idToken === null) {
|
|
9
|
+
return { subject: null, name: null };
|
|
10
|
+
}
|
|
11
|
+
// Redeemed over TLS straight from the token endpoint, so its issuer and audience are what is left to check (OpenID Connect Core 3.1.3.7).
|
|
12
|
+
if (idToken.issuer !== client.issuer || !idToken.audiences.includes(client.clientId)) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return { subject: idToken.subject, name: idToken.name };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Use case: the outside authorization server sends a person back from
|
|
19
|
+
* signing in to a party for themselves (decision 0067). Within the sign-in's
|
|
20
|
+
* ten minutes, in a browser whose shared sign-in names the account that
|
|
21
|
+
* started it, and with the party's issuer where the response names one or
|
|
22
|
+
* the server states it always does (RFC 9207), the code is redeemed with
|
|
23
|
+
* the party's client and the sign-in's PKCE verifier; else it is never
|
|
24
|
+
* redeemed. A person who denied consent is not signed in. Where the ID
|
|
25
|
+
* token names an outside account another person's grant already names, the
|
|
26
|
+
* person is turned away and the tokens are dropped (Q13). Else the grant is
|
|
27
|
+
* kept in place of the person's earlier one, the notice that told them a
|
|
28
|
+
* call needed it is closed, so a later loss tells them again (Q6), and the
|
|
29
|
+
* proxy ship is stated from it (Q15). Nothing is kept on any refusal.
|
|
30
|
+
*/
|
|
31
|
+
export function createCompletePartySignIn(deps) {
|
|
32
|
+
return async ({ state, code, error, iss, signIn }) => {
|
|
33
|
+
const now = deps.clock.now();
|
|
34
|
+
const underWay = state === undefined ? undefined : deps.seals.open(state);
|
|
35
|
+
if (underWay === undefined || underWay.expiresAt <= now) {
|
|
36
|
+
return refused(null, { kind: 'SIGN_IN_FAILED', message: 'This sign-in did not start at the gateway, or took longer than ten minutes: press Sign in again' });
|
|
37
|
+
}
|
|
38
|
+
const { fleetId, party: name, accountId, personShipId, verifier } = underWay;
|
|
39
|
+
const at = { fleetId, party: name };
|
|
40
|
+
const signedIn = signIn === undefined ? undefined : await deps.accountOf({ signIn, fleetId });
|
|
41
|
+
if (signedIn === undefined || !signedIn.isOk || signedIn.value.accountId !== accountId) {
|
|
42
|
+
return refused(at, { kind: 'SIGN_IN_FAILED', message: 'This sign-in was started by another account or browser: sign in and press Sign in again' });
|
|
43
|
+
}
|
|
44
|
+
const server = await deps.servers.find(fleetId, name);
|
|
45
|
+
if (server === undefined || server.client === null) {
|
|
46
|
+
return refused(at, { kind: 'NO_SUCH_PARTY', message: `There is no outside MCP server ${name} to sign in to any more` });
|
|
47
|
+
}
|
|
48
|
+
const { client } = server;
|
|
49
|
+
if (error !== undefined || code === undefined) {
|
|
50
|
+
return refused(at, { kind: 'NOT_SIGNED_IN', message: `You are not signed in to ${name}: the sign-in was cancelled or refused there`, serverError: error ?? null });
|
|
51
|
+
}
|
|
52
|
+
if (iss === undefined ? client.isIssuerInResponse : iss !== client.issuer) {
|
|
53
|
+
return refused(at, { kind: 'SIGN_IN_FAILED', message: `The sign-in came back without the issuer of ${name}, ${client.issuer}: press Sign in again` });
|
|
54
|
+
}
|
|
55
|
+
const redeemed = await deps.signIns.redeemCode(client, { code, verifier, redirectUri: deps.redirectUri });
|
|
56
|
+
if (!redeemed.isOk) {
|
|
57
|
+
return redeemed.error.kind === 'refused'
|
|
58
|
+
? refused(at, { kind: 'SIGN_IN_FAILED', message: `${client.issuer} refused the sign-in: ${redeemed.error.reason}`, serverError: redeemed.error.error })
|
|
59
|
+
: refused(at, { kind: 'AUTHORIZATION_SERVER_UNREACHABLE', message: `${client.issuer} did not answer: ${redeemed.error.reason}` });
|
|
60
|
+
}
|
|
61
|
+
const tokens = redeemed.value;
|
|
62
|
+
const outsideAccount = outsideAccountOf(tokens.idToken, client);
|
|
63
|
+
if (outsideAccount === undefined) {
|
|
64
|
+
return refused(at, { kind: 'SIGN_IN_FAILED', message: `${client.issuer} answered an ID token that is not its own for this server's client: press Sign in again` });
|
|
65
|
+
}
|
|
66
|
+
const turnedAway = () => refused(at, { kind: 'TURNED_AWAY', message: `That ${name} account is another person's sign-in in this fleet: sign in as your own` });
|
|
67
|
+
const { subject } = outsideAccount;
|
|
68
|
+
const holder = subject === null ? undefined : await deps.grants.ofSubject(fleetId, { party: name, subject });
|
|
69
|
+
if (holder !== undefined && holder.personShipId !== personShipId) {
|
|
70
|
+
return turnedAway();
|
|
71
|
+
}
|
|
72
|
+
const kept = await deps.grants.keep({
|
|
73
|
+
fleetId,
|
|
74
|
+
party: name,
|
|
75
|
+
personShipId,
|
|
76
|
+
accountId,
|
|
77
|
+
outsideAccount,
|
|
78
|
+
accessToken: tokens.accessToken,
|
|
79
|
+
refreshToken: tokens.refreshToken,
|
|
80
|
+
accessTokenEndsAt: accessTokenEndsAtOf(now, tokens.expiresInSeconds),
|
|
81
|
+
signedInAt: now,
|
|
82
|
+
refreshedAt: null,
|
|
83
|
+
lastUsedAt: null,
|
|
84
|
+
lost: null,
|
|
85
|
+
});
|
|
86
|
+
if (kept === 'subjectTaken') {
|
|
87
|
+
// Another person signed in as the same outside account meanwhile.
|
|
88
|
+
return turnedAway();
|
|
89
|
+
}
|
|
90
|
+
await deps.notices.close(fleetId, { party: name, personShipId });
|
|
91
|
+
const stated = await deps.stateParty({ fleetId, name });
|
|
92
|
+
return ok({ ...at, statementRefusal: stated.isOk ? null : stated.error.message });
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=complete-party-sign-in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete-party-sign-in.js","sourceRoot":"","sources":["../../../src/core/party-grants/complete-party-sign-in.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { PartyGrants, PartySignIns, SignInServers } from './ports.js';
|
|
3
|
+
export type EndAccountGrants = (account: {
|
|
4
|
+
fleetId: FleetId;
|
|
5
|
+
accountId: string;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Use case: pagasae disabled the account and tells the gateway (decision
|
|
9
|
+
* 0067, Q14), so a leaver's outside accounts stop acting for the fleet when
|
|
10
|
+
* their access does: every grant of the account in the fleet ends, as every
|
|
11
|
+
* grant ends. Its ships then answer as Q5 until a new owner signs in. Told
|
|
12
|
+
* again, it ends nothing more.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createEndAccountGrants(deps: {
|
|
15
|
+
servers: SignInServers;
|
|
16
|
+
grants: Pick<PartyGrants, 'ofAccount' | 'remove'>;
|
|
17
|
+
signIns: Pick<PartySignIns, 'revoke'>;
|
|
18
|
+
}): EndAccountGrants;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { endPartyGrant } from './end-grant.js';
|
|
2
|
+
/**
|
|
3
|
+
* Use case: pagasae disabled the account and tells the gateway (decision
|
|
4
|
+
* 0067, Q14), so a leaver's outside accounts stop acting for the fleet when
|
|
5
|
+
* their access does: every grant of the account in the fleet ends, as every
|
|
6
|
+
* grant ends. Its ships then answer as Q5 until a new owner signs in. Told
|
|
7
|
+
* again, it ends nothing more.
|
|
8
|
+
*/
|
|
9
|
+
export function createEndAccountGrants(deps) {
|
|
10
|
+
return async ({ fleetId, accountId }) => {
|
|
11
|
+
for (const grant of await deps.grants.ofAccount(fleetId, accountId)) {
|
|
12
|
+
await endPartyGrant(deps, grant);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=end-account-grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-account-grants.js","sourceRoot":"","sources":["../../../src/core/party-grants/end-account-grants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAK/C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAA0H;IAC/J,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YACpE,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SignInClient } from '../vault/credential.js';
|
|
2
|
+
import type { PartyGrant } from './party-grant.js';
|
|
3
|
+
import type { PartyGrants, PartySignIns, SignInServers } from './ports.js';
|
|
4
|
+
/**
|
|
5
|
+
* Ends a person's grant of a party (decision 0067, Q6): where the
|
|
6
|
+
* authorization server offers revocation (RFC 7009), the refresh token is
|
|
7
|
+
* revoked, then the access token; the grant is dropped either way, so the
|
|
8
|
+
* person's ships call under it no more. Answers whether the server revoked
|
|
9
|
+
* its tokens: false where it offers no revocation or did not answer.
|
|
10
|
+
*/
|
|
11
|
+
export declare function endGrant(deps: {
|
|
12
|
+
grants: Pick<PartyGrants, 'remove'>;
|
|
13
|
+
signIns: Pick<PartySignIns, 'revoke'>;
|
|
14
|
+
}, ending: {
|
|
15
|
+
client: SignInClient;
|
|
16
|
+
grant: PartyGrant;
|
|
17
|
+
}): Promise<boolean>;
|
|
18
|
+
/** Ends a grant with its party's client; a grant of a party the gateway no longer holds has no client left to revoke with, and is only dropped. */
|
|
19
|
+
export declare function endPartyGrant(deps: {
|
|
20
|
+
servers: SignInServers;
|
|
21
|
+
grants: Pick<PartyGrants, 'remove'>;
|
|
22
|
+
signIns: Pick<PartySignIns, 'revoke'>;
|
|
23
|
+
}, grant: PartyGrant): Promise<void>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ends a person's grant of a party (decision 0067, Q6): where the
|
|
3
|
+
* authorization server offers revocation (RFC 7009), the refresh token is
|
|
4
|
+
* revoked, then the access token; the grant is dropped either way, so the
|
|
5
|
+
* person's ships call under it no more. Answers whether the server revoked
|
|
6
|
+
* its tokens: false where it offers no revocation or did not answer.
|
|
7
|
+
*/
|
|
8
|
+
export async function endGrant(deps, ending) {
|
|
9
|
+
const { client, grant } = ending;
|
|
10
|
+
let isRevoked = false;
|
|
11
|
+
const { revocationEndpoint } = client;
|
|
12
|
+
if (revocationEndpoint !== null) {
|
|
13
|
+
const tokens = grant.refreshToken === null ? [grant.accessToken] : [grant.refreshToken, grant.accessToken];
|
|
14
|
+
const revoked = [];
|
|
15
|
+
for (const token of tokens) {
|
|
16
|
+
revoked.push(await deps.signIns.revoke({ ...client, revocationEndpoint }, token));
|
|
17
|
+
}
|
|
18
|
+
isRevoked = revoked.every((each) => each.isOk);
|
|
19
|
+
}
|
|
20
|
+
await deps.grants.remove(grant.fleetId, { party: grant.party, personShipId: grant.personShipId });
|
|
21
|
+
return isRevoked;
|
|
22
|
+
}
|
|
23
|
+
/** Ends a grant with its party's client; a grant of a party the gateway no longer holds has no client left to revoke with, and is only dropped. */
|
|
24
|
+
export async function endPartyGrant(deps, grant) {
|
|
25
|
+
const server = await deps.servers.find(grant.fleetId, grant.party);
|
|
26
|
+
if (server?.client === null || server?.client === undefined) {
|
|
27
|
+
await deps.grants.remove(grant.fleetId, grant);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
await endGrant(deps, { client: server.client, grant });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=end-grant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-grant.js","sourceRoot":"","sources":["../../../src/core/party-grants/end-grant.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAoF,EAAE,MAAmD;IACtK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACjC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC;IACtC,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3G,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAClG,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,mJAAmJ;AACnJ,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA4G,EAAE,KAAiB;IACjK,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FleetId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { SignInClient } from '../vault/credential.js';
|
|
3
|
+
import type { PartyGrants, PartySignIns } from './ports.js';
|
|
4
|
+
export type EndPartyGrants = (party: {
|
|
5
|
+
fleetId: FleetId;
|
|
6
|
+
name: string;
|
|
7
|
+
client: SignInClient;
|
|
8
|
+
}) => Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Use case: a party where each person signs in is retired (decision 0067,
|
|
11
|
+
* scenario 31). Every person's grant of it ends, as every grant ends, and
|
|
12
|
+
* the party's client is deleted where the authorization server answered its
|
|
13
|
+
* client configuration endpoint at registration (RFC 7592), so no grant
|
|
14
|
+
* outlives the party there.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createEndPartyGrants(deps: {
|
|
17
|
+
grants: Pick<PartyGrants, 'ofParty' | 'remove'>;
|
|
18
|
+
signIns: Pick<PartySignIns, 'revoke' | 'deleteClient'>;
|
|
19
|
+
}): EndPartyGrants;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { endGrant } from './end-grant.js';
|
|
2
|
+
/** How many grants are read at a time while a party's grants end. */
|
|
3
|
+
const GRANTS_PER_READ = 100;
|
|
4
|
+
/**
|
|
5
|
+
* Use case: a party where each person signs in is retired (decision 0067,
|
|
6
|
+
* scenario 31). Every person's grant of it ends, as every grant ends, and
|
|
7
|
+
* the party's client is deleted where the authorization server answered its
|
|
8
|
+
* client configuration endpoint at registration (RFC 7592), so no grant
|
|
9
|
+
* outlives the party there.
|
|
10
|
+
*/
|
|
11
|
+
export function createEndPartyGrants(deps) {
|
|
12
|
+
return async ({ fleetId, name, client }) => {
|
|
13
|
+
let after = null;
|
|
14
|
+
for (;;) {
|
|
15
|
+
const held = await deps.grants.ofParty(fleetId, { party: name, after, limit: GRANTS_PER_READ });
|
|
16
|
+
for (const grant of held) {
|
|
17
|
+
await endGrant(deps, { client, grant });
|
|
18
|
+
}
|
|
19
|
+
const last = held.at(-1);
|
|
20
|
+
if (last === undefined) {
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
after = last.personShipId;
|
|
24
|
+
}
|
|
25
|
+
const { registrationClientUri, registrationAccessToken } = client;
|
|
26
|
+
if (registrationClientUri !== null && registrationAccessToken !== null) {
|
|
27
|
+
await deps.signIns.deleteClient({ ...client, registrationClientUri, registrationAccessToken });
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=end-party-grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-party-grants.js","sourceRoot":"","sources":["../../../src/core/party-grants/end-party-grants.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,qEAAqE;AACrE,MAAM,eAAe,GAAG,GAAG,CAAC;AAI5B;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAiH;IACpJ,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACzC,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAChG,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAC5B,CAAC;QACD,MAAM,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAAC;QAClE,IAAI,qBAAqB,KAAK,IAAI,IAAI,uBAAuB,KAAK,IAAI,EAAE,CAAC;YACvE,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ConnectionStore, FleetDoor } from '../connection/ports.js';
|
|
2
|
+
import type { PartyGrants, PartySignIns, SignInServers } from './ports.js';
|
|
3
|
+
export type EndRetiredPersonsGrants = () => Promise<void>;
|
|
4
|
+
/**
|
|
5
|
+
* Use case: one round of the gateway following the persons who hold a grant
|
|
6
|
+
* (decision 0067, Q6), in every fleet it is connected to. Each person ship
|
|
7
|
+
* is read as the gateway's ship on its behalf, as a call's owner is read;
|
|
8
|
+
* every grant of a retired one ends, as every grant ends. The fleet answers
|
|
9
|
+
* no such ship on behalf of a retired one, and a person ship is never
|
|
10
|
+
* deleted, so that answer is a retired person ship too. What the fleet
|
|
11
|
+
* does not answer now is read again at the next round.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createEndRetiredPersonsGrants(deps: {
|
|
14
|
+
connections: Pick<ConnectionStore, 'find'>;
|
|
15
|
+
door: Pick<FleetDoor, 'getShip'>;
|
|
16
|
+
servers: SignInServers;
|
|
17
|
+
grants: Pick<PartyGrants, 'persons' | 'ofPersonShip' | 'remove'>;
|
|
18
|
+
signIns: Pick<PartySignIns, 'revoke'>;
|
|
19
|
+
}): EndRetiredPersonsGrants;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { endPartyGrant } from './end-grant.js';
|
|
2
|
+
/** The fleet's code for a ship it does not find: what a read on behalf of a retired ship answers, as core reads on behalf of live ships only. */
|
|
3
|
+
const NO_SUCH_SHIP = 'NOT_FOUND';
|
|
4
|
+
/**
|
|
5
|
+
* Use case: one round of the gateway following the persons who hold a grant
|
|
6
|
+
* (decision 0067, Q6), in every fleet it is connected to. Each person ship
|
|
7
|
+
* is read as the gateway's ship on its behalf, as a call's owner is read;
|
|
8
|
+
* every grant of a retired one ends, as every grant ends. The fleet answers
|
|
9
|
+
* no such ship on behalf of a retired one, and a person ship is never
|
|
10
|
+
* deleted, so that answer is a retired person ship too. What the fleet
|
|
11
|
+
* does not answer now is read again at the next round.
|
|
12
|
+
*/
|
|
13
|
+
export function createEndRetiredPersonsGrants(deps) {
|
|
14
|
+
return async () => {
|
|
15
|
+
for (const { fleetId, personShipId } of await deps.grants.persons()) {
|
|
16
|
+
const gateway = await deps.connections.find(fleetId);
|
|
17
|
+
if (gateway === undefined) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const ship = await deps.door.getShip(gateway.crewToken, { shipId: personShipId, onBehalfOf: personShipId });
|
|
21
|
+
const isRetired = ship.isOk ? ship.value.status === 'retired' : ship.error.code === NO_SUCH_SHIP;
|
|
22
|
+
if (isRetired) {
|
|
23
|
+
for (const grant of await deps.grants.ofPersonShip(fleetId, personShipId)) {
|
|
24
|
+
await endPartyGrant(deps, grant);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=end-retired-persons-grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-retired-persons-grants.js","sourceRoot":"","sources":["../../../src/core/party-grants/end-retired-persons-grants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,iJAAiJ;AACjJ,MAAM,YAAY,GAAG,WAAW,CAAC;AAIjC;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAM7C;IACC,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5G,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;YACjG,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;oBAC1E,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Clock } from '../shared/clock.js';
|
|
2
|
+
import type { PartyGrants, SignInServers } from './ports.js';
|
|
3
|
+
import type { RefreshGrant } from './refresh-grant.js';
|
|
4
|
+
export type KeepGrantsAlive = () => Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Use case: one round of the gateway keeping grants alive without a call
|
|
7
|
+
* (decision 0067, Q7): every grant idle for longer than the idle time, or
|
|
8
|
+
* whose access token is near its end, is refreshed with its party's client,
|
|
9
|
+
* so a person who calls rarely stays signed in, and a grant lost is found,
|
|
10
|
+
* and its person told, before a call needs it. A refresh not answered keeps
|
|
11
|
+
* the grant as it was, to be tried again at the next round.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createKeepGrantsAlive(deps: {
|
|
14
|
+
grants: Pick<PartyGrants, 'due'>;
|
|
15
|
+
servers: SignInServers;
|
|
16
|
+
refreshGrant: RefreshGrant;
|
|
17
|
+
clock: Clock;
|
|
18
|
+
}): KeepGrantsAlive;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Use case: one round of the gateway keeping grants alive without a call
|
|
3
|
+
* (decision 0067, Q7): every grant idle for longer than the idle time, or
|
|
4
|
+
* whose access token is near its end, is refreshed with its party's client,
|
|
5
|
+
* so a person who calls rarely stays signed in, and a grant lost is found,
|
|
6
|
+
* and its person told, before a call needs it. A refresh not answered keeps
|
|
7
|
+
* the grant as it was, to be tried again at the next round.
|
|
8
|
+
*/
|
|
9
|
+
export function createKeepGrantsAlive(deps) {
|
|
10
|
+
return async () => {
|
|
11
|
+
for (const grant of await deps.grants.due({ now: deps.clock.now() })) {
|
|
12
|
+
const server = await deps.servers.find(grant.fleetId, grant.party);
|
|
13
|
+
if (server?.client !== null && server?.client !== undefined) {
|
|
14
|
+
await deps.refreshGrant({ client: server.client, grant });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=keep-grants-alive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep-grants-alive.js","sourceRoot":"","sources":["../../../src/core/party-grants/keep-grants-alive.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA4G;IAChJ,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,MAAM,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC5D,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ShipId } from '@aeolus-fleet/common';
|
|
2
|
+
import type { ApprovingDeps, CheckApproving } from '../parties/check-approving.js';
|
|
3
|
+
import { type Result } from '../shared/result.js';
|
|
4
|
+
import { type ApprovedSignInPartyRefusal } from './approved-sign-in-party.js';
|
|
5
|
+
import type { PartyGrants, ShipNames } from './ports.js';
|
|
6
|
+
import { type OwnGrant } from './read-own-grant.js';
|
|
7
|
+
/** A person's grant as an approver sees it: whose, by their person ship and its name where the fleet answers one, whether it is the approver's own, and what the person sees of it themselves. */
|
|
8
|
+
export type PersonGrant = {
|
|
9
|
+
readonly personShipId: ShipId;
|
|
10
|
+
readonly personName: string | null;
|
|
11
|
+
readonly isYours: boolean;
|
|
12
|
+
} & Exclude<OwnGrant, {
|
|
13
|
+
state: 'notSignedIn';
|
|
14
|
+
}>;
|
|
15
|
+
export type ListGrants = (input: Parameters<CheckApproving>[0] & {
|
|
16
|
+
after: ShipId | null;
|
|
17
|
+
}) => Promise<Result<{
|
|
18
|
+
grants: PersonGrant[]; /** Where the next page starts; none on the last page. */
|
|
19
|
+
next: ShipId | null;
|
|
20
|
+
}, ApprovedSignInPartyRefusal>>;
|
|
21
|
+
/**
|
|
22
|
+
* Use case: an actor holding gateway:approve within manage reach of an
|
|
23
|
+
* outside MCP server's proxy ship lists every person's sign-in to it
|
|
24
|
+
* (decision 0067, Q12), a page at a time by person ship, never a token, so
|
|
25
|
+
* it sees whose grant to remove, each named by its person ship's name.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createListGrants(deps: ApprovingDeps & {
|
|
28
|
+
grants: Pick<PartyGrants, 'ofParty'>;
|
|
29
|
+
ships: ShipNames;
|
|
30
|
+
}): ListGrants;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { refuse } from '../shared/errors.js';
|
|
2
|
+
import { ok } from '../shared/result.js';
|
|
3
|
+
import { approvedSignInParty } from './approved-sign-in-party.js';
|
|
4
|
+
import { shownGrantOf } from './read-own-grant.js';
|
|
5
|
+
/** The persons a page of everyone's sign-ins shows. */
|
|
6
|
+
const GRANTS_PER_PAGE = 20;
|
|
7
|
+
/**
|
|
8
|
+
* Use case: an actor holding gateway:approve within manage reach of an
|
|
9
|
+
* outside MCP server's proxy ship lists every person's sign-in to it
|
|
10
|
+
* (decision 0067, Q12), a page at a time by person ship, never a token, so
|
|
11
|
+
* it sees whose grant to remove, each named by its person ship's name.
|
|
12
|
+
*/
|
|
13
|
+
export function createListGrants(deps) {
|
|
14
|
+
return async ({ after, ...asked }) => {
|
|
15
|
+
const approved = await approvedSignInParty(deps, asked);
|
|
16
|
+
if (!approved.isOk) {
|
|
17
|
+
return approved;
|
|
18
|
+
}
|
|
19
|
+
// One more than a page tells whether a next page follows.
|
|
20
|
+
const held = await deps.grants.ofParty(asked.actor.fleetId, { party: approved.value.name, after, limit: GRANTS_PER_PAGE + 1 });
|
|
21
|
+
const page = held.slice(0, GRANTS_PER_PAGE);
|
|
22
|
+
// The page's person ships named in one read, so a page costs one fleet call however many it shows.
|
|
23
|
+
const names = page.length === 0 ? ok(new Map()) : await deps.ships.namesOf(approved.value.credential, page.map(({ personShipId }) => personShipId));
|
|
24
|
+
if (!names.isOk) {
|
|
25
|
+
return refuse('FLEET_UNAVAILABLE', 'The fleet did not answer: try again in a moment.');
|
|
26
|
+
}
|
|
27
|
+
const yours = asked.actor.kind === 'account' ? asked.actor.personShipId : null;
|
|
28
|
+
return ok({
|
|
29
|
+
grants: page.map((grant) => ({ personShipId: grant.personShipId, personName: names.value.get(grant.personShipId) ?? null, isYours: grant.personShipId === yours, ...shownGrantOf(grant) })),
|
|
30
|
+
next: held.length > GRANTS_PER_PAGE ? (page.at(-1)?.personShipId ?? null) : null,
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=list-grants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-grants.js","sourceRoot":"","sources":["../../../src/core/party-grants/list-grants.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAmC,MAAM,6BAA6B,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAElE,uDAAuD;AACvD,MAAM,eAAe,GAAG,EAAE,CAAC;AAS3B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAgF;IAC/G,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,0DAA0D;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/H,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAC5C,mGAAmG;QACnG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;QACpK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,OAAO,EAAE,CAAC;YACR,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3L,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACjF,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|