@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/overview/state/inbox-panel.tsx","../../../../../web/features/meeting/paths.ts","../../../../../web/features/overview/hooks/data%3Ab38418%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3Ae8241b%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A0ab818%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/delivery-card.tsx","../../../../../web/features/overview/ui/inbox-list.tsx","../../../../../web/features/overview/state/slack-link-panel.tsx","../../../../../web/features/overview/hooks/data%3Afd8225%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A80d5ec%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/slack-link-path.ts","../../../../../web/features/overview/state/wake-panel.tsx","../../../../../web/features/overview/hooks/data%3Af97121%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A021a38%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A7fbdd7%20%3Ctext/javascript%3E","../../../../../web/features/overview/services/web-push.ts","../../../../../web/features/overview/state/web-push-panel.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { meetingPathOf } from '../../meeting/paths';\nimport { answerDelivery, doneDelivery, openDelivery, type ActionOutcome } from '../hooks/overview-actions';\nimport type { FocusedDelivery, Inbox, InboxEntry } from '../services/deliveries';\nimport { DeliveryCard, type DeliveryControl } from '../ui/delivery-card';\nimport { InboxList } from '../ui/inbox-list';\nimport { Notice } from '../ui/notice';\n\n/**\n * The person's inbox with one delivery in focus at a time. Opening is their\n * own act, so it is a press, never a link: the gateway acknowledges the\n * delivery for them, and it is shown whole. One they opened before opens\n * again whole, as the fleet reads it again (aeolus-fleet #1046), so the way\n * to its meeting stays. Answering or being done says so in place, and the\n * inbox reads itself again.\n */\nexport function InboxPanel({ fleetId, inbox }: { fleetId: string; inbox: Inbox }) {\n const [focus, setFocus] = useState<FocusedDelivery | undefined>();\n const [note, setNote] = useState('');\n const [openingId, setOpeningId] = useState<string | undefined>();\n const [working, setWorking] = useState<DeliveryControl | undefined>();\n const [openFailure, setOpenFailure] = useState<{ deliveryId: string; message: string } | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [done, setDone] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n const show = (delivery: FocusedDelivery) => {\n setFocus(delivery);\n setNote('');\n setFailure(undefined);\n setDone(undefined);\n };\n\n const open = (entry: InboxEntry) => {\n setOpeningId(entry.deliveryId);\n setOpenFailure(undefined);\n setDone(undefined);\n startTransition(async () => {\n const outcome = await openDelivery(fleetId, entry.deliveryId);\n setOpeningId(undefined);\n if (outcome.isOk) {\n show(outcome.value);\n } else {\n setOpenFailure({ deliveryId: entry.deliveryId, message: outcome.message });\n }\n });\n };\n\n const settle = ({ control, action, said }: { control: DeliveryControl; action: () => Promise<ActionOutcome<undefined>>; said: string }) => {\n setWorking(control);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await action();\n setWorking(undefined);\n if (outcome.isOk) {\n setFocus(undefined);\n setDone(said);\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n if (focus !== undefined) {\n return (\n <DeliveryCard\n delivery={focus}\n meetingHref={focus.meetingId === undefined ? undefined : meetingPathOf({ fleetId, meetingId: focus.meetingId })}\n note={note}\n working={working}\n failure={failure}\n onNoteChange={setNote}\n onAnswer={(option) => { settle({ control: option === undefined ? { kind: 'note' } : { kind: 'option', option }, action: () => answerDelivery({ fleet: fleetId, deliveryId: focus.deliveryId, input: { questionId: focus.question?.id, option, note } }), said: `Your answer went to ${focus.from}.` }); }\n }\n onDone={() => { settle({ control: { kind: 'done' }, action: () => doneDelivery(fleetId, focus.deliveryId), said: `Done with “${focus.title}”.` }); }}\n onBack={() => { setFocus(undefined); }}\n />\n );\n }\n return (\n <div className=\"grid gap-4\">\n {done === undefined ? null : <Notice message={done} isFailure={false} />}\n <InboxList\n waitingCount={inbox.waiting}\n waiting={inbox.deliveries}\n opened={inbox.opened}\n openingId={openingId}\n failure={openFailure}\n onOpen={open}\n />\n </div>\n );\n}\n","/** Where a meeting's page is, for server and client code alike. */\n\n/** The meeting page's address, before the meeting's id. */\nexport const MEETINGS_PATH = '/meetings';\n\n/** The address of a meeting's page in a fleet, at the page of contributions after the cursor, if one is given. */\nexport function meetingPathOf(meeting: { fleetId: string; meetingId: string; cursor?: string }): string {\n const query = new URLSearchParams({ fleet: meeting.fleetId, ...(meeting.cursor === undefined ? {} : { cursor: meeting.cursor }) });\n return `${MEETINGS_PATH}/${encodeURIComponent(meeting.meetingId)}?${query.toString()}`;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40181905bd100060935e9d71abce6262d55e8c9197\":{\"name\":\"answerDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40181905bd100060935e9d71abce6262d55e8c9197\",callServer,void 0,findSourceMapURL,\"answerDelivery\");export{$$RSC_SERVER_ACTION_1 as answerDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"60acb8b2f7b66f2ffb7578067074d8e9bb038a1155\":{\"name\":\"doneDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"60acb8b2f7b66f2ffb7578067074d8e9bb038a1155\",callServer,void 0,findSourceMapURL,\"doneDelivery\");export{$$RSC_SERVER_ACTION_2 as doneDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"601c41167c2901a986b22e1402e82949003349b638\":{\"name\":\"openDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"601c41167c2901a986b22e1402e82949003349b638\",callServer,void 0,findSourceMapURL,\"openDelivery\");export{$$RSC_SERVER_ACTION_0 as openDelivery};","import type { FocusedDelivery } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\n/** Which of the card's controls is working: an option of the question, the note alone, or done. */\nexport type DeliveryControl = { kind: 'option'; option: number } | { kind: 'note' } | { kind: 'done' };\n\n/**\n * One delivery in focus (design B, Signal). A question is answered with one\n * tap on a button that names the option it sends, the asker's pick on a\n * dashed edge; any delivery may get a note as its answer, and a message may\n * be done with; one of a meeting leads to the meeting.\n */\nexport function DeliveryCard({\n delivery,\n meetingHref,\n note,\n working,\n failure,\n onNoteChange,\n onAnswer,\n onDone,\n onBack,\n}: {\n delivery: FocusedDelivery;\n /** The page of the meeting it belongs to, if it belongs to one. */\n meetingHref: string | undefined;\n note: string;\n working: DeliveryControl | undefined;\n failure: string | undefined;\n onNoteChange: (note: string) => void;\n onAnswer: (option: number | undefined) => void;\n onDone: () => void;\n onBack: () => void;\n}) {\n const { question } = delivery;\n const isWorking = working !== undefined;\n const picked = question?.options.find((option) => option.key === question.pick.option);\n return (\n <section data-testid=\"overview-delivery\" className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <span className=\"text-caption text-muted-foreground\">\n {delivery.from} · {new Date(delivery.sentAt).toUTCString()}\n </span>\n <h2 className=\"text-heading font-semibold\">{question?.title ?? delivery.title}</h2>\n {meetingHref === undefined ? null : (\n <a data-testid=\"overview-meeting\" href={meetingHref} className=\"inline-flex h-9 items-center justify-self-start rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\">\n Go to the meeting\n </a>\n )}\n {question === undefined ? (\n <pre className=\"whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-caption\">{delivery.payload}</pre>\n ) : (\n <>\n <p className=\"whitespace-pre-wrap\">{question.context}</p>\n <div className=\"flex flex-wrap gap-2\">\n {question.options.map((option) => (\n <ActionButton\n key={option.key}\n title={option.detail}\n variant={option.key === question.pick.option ? 'primary' : 'secondary'}\n className={option.key === question.pick.option ? 'outline-2 outline-offset-2 outline-dashed outline-ring' : ''}\n isPending={working?.kind === 'option' && working.option === option.key}\n pendingLabel=\"Sending...\"\n disabled={isWorking}\n onClick={() => { onAnswer(option.key); }}\n >\n {option.label}\n </ActionButton>\n ))}\n </div>\n {picked === undefined ? null : (\n <p className=\"text-muted-foreground\">\n {picked.label} is the pick of {delivery.from}: {question.pick.why}\n </p>\n )}\n </>\n )}\n <label className=\"grid gap-1\">\n <span>{question === undefined ? 'Your answer' : 'Note'}</span>\n <textarea\n data-testid=\"overview-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder={question === undefined ? '' : 'Optional, sent with your answer'}\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"overview-answer\" variant={question === undefined ? 'primary' : 'secondary'} isPending={working?.kind === 'note'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onAnswer(undefined); }}>\n {question === undefined ? 'Answer' : 'Send the note alone'}\n </ActionButton>\n {question === undefined ? (\n <ActionButton data-testid=\"overview-done\" isPending={working?.kind === 'done'} pendingLabel=\"Marking done...\" disabled={isWorking} onClick={onDone}>\n Done\n </ActionButton>\n ) : null}\n <button type=\"button\" onClick={onBack} disabled={isWorking} className=\"inline-flex h-9 items-center rounded-md px-4 text-muted-foreground hover:bg-accent disabled:opacity-70\">\n Back to the inbox\n </button>\n </div>\n </section>\n );\n}\n","import type { InboxEntry } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nfunction EntryText({ entry }: { entry: InboxEntry }) {\n return (\n <span className=\"flex min-w-0 flex-1 flex-col text-left\">\n <span className=\"truncate\">{entry.title}</span>\n <span className=\"text-caption text-muted-foreground\">from {entry.from}</span>\n </span>\n );\n}\n\n/**\n * The person's inbox in two groups (aeolus-fleet #1046): what waits, which\n * they open one at a time, and what they opened and have not answered or\n * been done with yet, which opens again. A failure to open says why by the\n * delivery.\n */\nexport function InboxList({\n waitingCount,\n waiting,\n opened,\n openingId,\n failure,\n onOpen,\n}: {\n waitingCount: number;\n waiting: readonly InboxEntry[];\n opened: readonly InboxEntry[];\n openingId: string | undefined;\n failure: { deliveryId: string; message: string } | undefined;\n onOpen: (entry: InboxEntry) => void;\n}) {\n return (\n <div className=\"grid gap-6\">\n {waiting.length === 0 ? null : (\n <section className=\"grid gap-2\">\n <h2 className=\"text-section font-semibold\">Next · {waitingCount}</h2>\n {waiting.map((entry) => (\n <div key={entry.deliveryId} className=\"grid min-w-0 gap-2 rounded-md border border-border bg-card p-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <EntryText entry={entry} />\n <ActionButton data-testid=\"overview-open\" isPending={openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={openingId !== undefined} onClick={() => { onOpen(entry); }}>\n Open\n </ActionButton>\n </div>\n {failure?.deliveryId === entry.deliveryId ? <Notice message={failure.message} isFailure /> : null}\n </div>\n ))}\n </section>\n )}\n {opened.length === 0 ? null : (\n <section className=\"grid gap-2\">\n <h2 className=\"text-section font-semibold\">Opened, not yet dealt with · {opened.length}</h2>\n {opened.map((entry) => (\n <div key={entry.deliveryId} className=\"grid min-w-0 gap-2 rounded-md border border-border bg-card p-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <EntryText entry={entry} />\n <ActionButton data-testid=\"overview-deal\" isPending={openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={openingId !== undefined} onClick={() => { onOpen(entry); }}>\n Answer or be done\n </ActionButton>\n </div>\n {failure?.deliveryId === entry.deliveryId ? <Notice message={failure.message} isFailure /> : null}\n </div>\n ))}\n </section>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { showAllInSlack, unlinkSlack } from '../hooks/overview-actions';\nimport type { SlackLink } from '../hooks/read-overview';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\n\n/**\n * The person's Slack link (gateway scopes 9.3, 9.6): \"Slack linked as\n * @mathilde in Acme\" with Unlink, or Link Slack, which signs in with Slack.\n * Linked, the person talks to the fleet's bots in Slack, and sees a bot\n * ship's messages there; the switch Show everything that waits in Slack,\n * off until turned on, shows the other ships' messages there too (B5).\n */\nexport function SlackLinkPanel({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink }) {\n const [isUnlinking, startTransition] = useTransition();\n const [isTurning, startTurning] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const { workspaceName, link } = slackLink;\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTurning(async () => {\n const outcome = await showAllInSlack(fleetId, isOn);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-2\" aria-labelledby=\"overview-slack-heading\">\n <h2 id=\"overview-slack-heading\" className=\"text-section font-semibold\">\n Slack\n </h2>\n <div className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span data-testid=\"overview-slack-state\" className=\"min-w-0 flex-1\">\n {link === null ? `Not linked in ${workspaceName}` : `Slack linked as @${link.slackName} in ${workspaceName}`}\n </span>\n {link === null ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"overview-slack-link\"\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : (\n <ActionButton data-testid=\"overview-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n )}\n </div>\n {link === null ? null : (\n <div className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span>Show everything that waits in Slack</span>\n <span data-testid=\"overview-slack-show-all-state\" className=\"text-caption text-muted-foreground\">\n {link.isShowingAll ? \"On: every ship's messages show in Slack, the ones from ships that are not bots through the fleet's own bot.\" : \"Off: only the bots' messages show in Slack.\"}\n </span>\n </span>\n <ActionButton data-testid=\"overview-slack-show-all\" isPending={isTurning} pendingLabel={link.isShowingAll ? 'Turning off...' : 'Turning on...'} onClick={() => { turn(!link.isShowingAll); }}>\n {link.isShowingAll ? 'Turn off' : 'Turn on'}\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6012651ba640b48f2f6a78ec0f7fe6d74e332d5f09\":{\"name\":\"showAllInSlack\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"6012651ba640b48f2f6a78ec0f7fe6d74e332d5f09\",callServer,void 0,findSourceMapURL,\"showAllInSlack\");export{$$RSC_SERVER_ACTION_7 as showAllInSlack};","/* __next_internal_action_entry_do_not_use__ [{\"406754413bc3ef939bc7b7bb4ef4ea56359f75af7a\":{\"name\":\"unlinkSlack\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"406754413bc3ef939bc7b7bb4ef4ea56359f75af7a\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_6 as unlinkSlack};","/** Where Link Slack starts (gateway scopes 9.3): the Overview's button and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnEmail } from '../hooks/overview-actions';\nimport type { WakeChannels } from '../services/deliveries';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { WebPushPanel } from './web-push-panel';\n\n/**\n * Where the person turns on the channels that wake them when something\n * waits for their person ship while they are away (wake a person, W8):\n * email, where the gateway sends it, and web push per browser, where it\n * holds push keys. Nothing is on by default. The wake says only that\n * something waits in the fleet, with a link here. While a page of theirs\n * here is in focus, it shows what arrives and no wake goes out (W6).\n */\nexport function WakePanel({ fleetId, channels }: { fleetId: string; channels: WakeChannels }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const { email, webPush } = channels;\n if (!email.isOffered && webPush.publicKey === null) {\n return null;\n }\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await turnEmail(fleetId, isOn);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-2\" aria-labelledby=\"overview-wake-heading\">\n <h2 id=\"overview-wake-heading\" className=\"text-section font-semibold\">\n When something waits\n </h2>\n {!email.isOffered ? null : (\n <div className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span>Email</span>\n <span data-testid=\"overview-wake-email-state\" className=\"text-caption text-muted-foreground\">\n {email.isOn ? 'On: you get an email when something waits for you in this fleet, with a link here. Never what waits.' : 'Off: nothing tells you when something waits while you are away.'}\n </span>\n </span>\n <ActionButton data-testid=\"overview-wake-email\" isPending={isTurning} pendingLabel={email.isOn ? 'Turning off...' : 'Turning on...'} onClick={() => { turn(!email.isOn); }}>\n {email.isOn ? 'Turn off' : 'Turn on'}\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {webPush.publicKey === null ? null : <WebPushPanel fleetId={fleetId} webPushKey={webPush.publicKey} browsers={webPush.browsers} />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60483421db79f3dcf5ceee7e04e95c23d748009d21\":{\"name\":\"turnEmail\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"60483421db79f3dcf5ceee7e04e95c23d748009d21\",callServer,void 0,findSourceMapURL,\"turnEmail\");export{$$RSC_SERVER_ACTION_3 as turnEmail};","/* __next_internal_action_entry_do_not_use__ [{\"6089140f9c72e47d35e68506a18bfd0e89a960be11\":{\"name\":\"turnOffWebPush\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"6089140f9c72e47d35e68506a18bfd0e89a960be11\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_5 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"6051d7b6d863f90672a69031391f104df25d294836\":{\"name\":\"turnOnWebPush\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"6051d7b6d863f90672a69031391f104df25d294836\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_4 as turnOnWebPush};","/**\n * What the overview's section of wakes works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport { turnOffWebPush, turnOnWebPush } from '../hooks/overview-actions';\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\n\n/** The service worker that shows a wake and opens the overview when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in the overview's section of wakes (wake a person, W8): the\n * person turns it on for this browser, which asks the browser's permission\n * first, sees the browsers they turned it on in, and removes one. Nothing is\n * on until they turn it on. A browser whose push service ended its\n * subscription is said to be gone.\n */\nexport function WebPushPanel({ fleetId, webPushKey, browsers }: { fleetId: string; webPushKey: string; browsers: WakeChannels['webPush']['browsers'] }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n const isOwnOn = ownEndpoint !== undefined && browsers.some(({ endpoint, isGone }) => endpoint === ownEndpoint && !isGone);\n return (\n <div className=\"grid gap-2\" data-testid=\"overview-wake-web-push\">\n {browsers.map(({ endpoint, browser, addedAt, isGone }) => (\n <div key={endpoint} className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">\n Web push in {browser}\n {endpoint === ownEndpoint ? ' · this browser' : ''}\n </span>\n <span className=\"text-caption text-muted-foreground\">\n {isGone ? 'No longer takes wakes: its push service ended them. Turn web push on again in that browser, or remove it.' : `On since ${new Date(addedAt).toLocaleDateString()}: it tells you when something waits in this fleet, with a link here. Never what waits.`}\n </span>\n </span>\n <ActionButton data-testid=\"overview-web-push-remove\" isPending={working === endpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(endpoint); }}>\n Remove\n </ActionButton>\n </div>\n ))}\n {!isTaken ? (\n <p className=\"text-caption text-muted-foreground\">This browser takes no web push.</p>\n ) : isOwnOn ? null : (\n <div>\n <ActionButton data-testid=\"overview-web-push-on\" variant=\"primary\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on web push in this browser\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </div>\n );\n}\n"],"names":["MEETINGS_PATH","meetingPathOf","meeting","query","URLSearchParams","fleet","fleetId","cursor","undefined","encodeURIComponent","meetingId","toString","$$RSC_SERVER_ACTION_7","$$RSC_SERVER_ACTION_3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/overview/state/inbox-panel.tsx","../../../../../web/features/meeting/paths.ts","../../../../../web/features/overview/hooks/data%3A2ccc5b%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3Af5fbac%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A3a390d%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/delivery-card.tsx","../../../../../web/features/overview/ui/inbox-list.tsx","../../../../../web/features/overview/state/slack-link-panel.tsx","../../../../../web/features/overview/hooks/data%3A3ec028%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3Aa67093%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/slack-link-path.ts","../../../../../web/features/overview/state/wake-panel.tsx","../../../../../web/features/overview/hooks/data%3A7e50dc%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A746794%20%3Ctext/javascript%3E","../../../../../web/features/overview/hooks/data%3A3b084c%20%3Ctext/javascript%3E","../../../../../web/features/overview/services/web-push.ts","../../../../../web/features/overview/state/web-push-panel.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { meetingPathOf } from '../../meeting/paths';\nimport { answerDelivery, doneDelivery, openDelivery, type ActionOutcome } from '../hooks/overview-actions';\nimport type { FocusedDelivery, Inbox, InboxEntry } from '../services/deliveries';\nimport { DeliveryCard, type DeliveryControl } from '../ui/delivery-card';\nimport { InboxList } from '../ui/inbox-list';\nimport { Notice } from '../ui/notice';\n\n/**\n * The person's inbox with one delivery in focus at a time. Opening is their\n * own act, so it is a press, never a link: the gateway acknowledges the\n * delivery for them, and it is shown whole. One they opened before opens\n * again whole, as the fleet reads it again (aeolus-fleet #1046), so the way\n * to its meeting stays. Answering or being done says so in place, and the\n * inbox reads itself again.\n */\nexport function InboxPanel({ fleetId, inbox }: { fleetId: string; inbox: Inbox }) {\n const [focus, setFocus] = useState<FocusedDelivery | undefined>();\n const [note, setNote] = useState('');\n const [openingId, setOpeningId] = useState<string | undefined>();\n const [working, setWorking] = useState<DeliveryControl | undefined>();\n const [openFailure, setOpenFailure] = useState<{ deliveryId: string; message: string } | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [done, setDone] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n const show = (delivery: FocusedDelivery) => {\n setFocus(delivery);\n setNote('');\n setFailure(undefined);\n setDone(undefined);\n };\n\n const open = (entry: InboxEntry) => {\n setOpeningId(entry.deliveryId);\n setOpenFailure(undefined);\n setDone(undefined);\n startTransition(async () => {\n const outcome = await openDelivery(fleetId, entry.deliveryId);\n setOpeningId(undefined);\n if (outcome.isOk) {\n show(outcome.value);\n } else {\n setOpenFailure({ deliveryId: entry.deliveryId, message: outcome.message });\n }\n });\n };\n\n const settle = ({ control, action, said }: { control: DeliveryControl; action: () => Promise<ActionOutcome<undefined>>; said: string }) => {\n setWorking(control);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await action();\n setWorking(undefined);\n if (outcome.isOk) {\n setFocus(undefined);\n setDone(said);\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n if (focus !== undefined) {\n return (\n <DeliveryCard\n delivery={focus}\n meetingHref={focus.meetingId === undefined ? undefined : meetingPathOf({ fleetId, meetingId: focus.meetingId })}\n note={note}\n working={working}\n failure={failure}\n onNoteChange={setNote}\n onAnswer={(option) => { settle({ control: option === undefined ? { kind: 'note' } : { kind: 'option', option }, action: () => answerDelivery({ fleet: fleetId, deliveryId: focus.deliveryId, input: { questionId: focus.question?.id, option, note } }), said: `Your answer went to ${focus.from}.` }); }\n }\n onDone={() => { settle({ control: { kind: 'done' }, action: () => doneDelivery(fleetId, focus.deliveryId), said: `Done with “${focus.title}”.` }); }}\n onBack={() => { setFocus(undefined); }}\n />\n );\n }\n return (\n <div className=\"grid gap-4\">\n {done === undefined ? null : <Notice message={done} isFailure={false} />}\n <InboxList\n waitingCount={inbox.waiting}\n waiting={inbox.deliveries}\n opened={inbox.opened}\n openingId={openingId}\n failure={openFailure}\n onOpen={open}\n />\n </div>\n );\n}\n","/** Where a meeting's page is, for server and client code alike. */\n\n/** The meeting page's address, before the meeting's id. */\nexport const MEETINGS_PATH = '/meetings';\n\n/** The address of a meeting's page in a fleet, at the page of contributions after the cursor, if one is given. */\nexport function meetingPathOf(meeting: { fleetId: string; meetingId: string; cursor?: string }): string {\n const query = new URLSearchParams({ fleet: meeting.fleetId, ...(meeting.cursor === undefined ? {} : { cursor: meeting.cursor }) });\n return `${MEETINGS_PATH}/${encodeURIComponent(meeting.meetingId)}?${query.toString()}`;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40db6d8e8bf7bc28f18e2b6e6b883909a3fd918ba7\":{\"name\":\"answerDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"40db6d8e8bf7bc28f18e2b6e6b883909a3fd918ba7\",callServer,void 0,findSourceMapURL,\"answerDelivery\");export{$$RSC_SERVER_ACTION_1 as answerDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"60e7ce47eb2d23df456a542903519b389ce1ca3d37\":{\"name\":\"doneDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"60e7ce47eb2d23df456a542903519b389ce1ca3d37\",callServer,void 0,findSourceMapURL,\"doneDelivery\");export{$$RSC_SERVER_ACTION_2 as doneDelivery};","/* __next_internal_action_entry_do_not_use__ [{\"6076a2215296656c4d1a1b5812e97c6a902490be89\":{\"name\":\"openDelivery\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"6076a2215296656c4d1a1b5812e97c6a902490be89\",callServer,void 0,findSourceMapURL,\"openDelivery\");export{$$RSC_SERVER_ACTION_0 as openDelivery};","import type { FocusedDelivery } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\n/** Which of the card's controls is working: an option of the question, the note alone, or done. */\nexport type DeliveryControl = { kind: 'option'; option: number } | { kind: 'note' } | { kind: 'done' };\n\n/**\n * One delivery in focus (design B, Signal). A question is answered with one\n * tap on a button that names the option it sends, the asker's pick on a\n * dashed edge; any delivery may get a note as its answer, and a message may\n * be done with; one of a meeting leads to the meeting.\n */\nexport function DeliveryCard({\n delivery,\n meetingHref,\n note,\n working,\n failure,\n onNoteChange,\n onAnswer,\n onDone,\n onBack,\n}: {\n delivery: FocusedDelivery;\n /** The page of the meeting it belongs to, if it belongs to one. */\n meetingHref: string | undefined;\n note: string;\n working: DeliveryControl | undefined;\n failure: string | undefined;\n onNoteChange: (note: string) => void;\n onAnswer: (option: number | undefined) => void;\n onDone: () => void;\n onBack: () => void;\n}) {\n const { question } = delivery;\n const isWorking = working !== undefined;\n const picked = question?.options.find((option) => option.key === question.pick.option);\n return (\n <section data-testid=\"overview-delivery\" className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <span className=\"text-caption text-muted-foreground\">\n {delivery.from} · {new Date(delivery.sentAt).toUTCString()}\n </span>\n <h2 className=\"text-heading font-semibold\">{question?.title ?? delivery.title}</h2>\n {meetingHref === undefined ? null : (\n <a data-testid=\"overview-meeting\" href={meetingHref} className=\"inline-flex h-9 items-center justify-self-start rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\">\n Go to the meeting\n </a>\n )}\n {question === undefined ? (\n <pre className=\"whitespace-pre-wrap rounded-md bg-muted p-3 font-mono text-caption\">{delivery.payload}</pre>\n ) : (\n <>\n <p className=\"whitespace-pre-wrap\">{question.context}</p>\n <div className=\"flex flex-wrap gap-2\">\n {question.options.map((option) => (\n <ActionButton\n key={option.key}\n title={option.detail}\n variant={option.key === question.pick.option ? 'primary' : 'secondary'}\n className={option.key === question.pick.option ? 'outline-2 outline-offset-2 outline-dashed outline-ring' : ''}\n isPending={working?.kind === 'option' && working.option === option.key}\n pendingLabel=\"Sending...\"\n disabled={isWorking}\n onClick={() => { onAnswer(option.key); }}\n >\n {option.label}\n </ActionButton>\n ))}\n </div>\n {picked === undefined ? null : (\n <p className=\"text-muted-foreground\">\n {picked.label} is the pick of {delivery.from}: {question.pick.why}\n </p>\n )}\n </>\n )}\n <label className=\"grid gap-1\">\n <span>{question === undefined ? 'Your answer' : 'Note'}</span>\n <textarea\n data-testid=\"overview-note\"\n rows={2}\n value={note}\n onChange={(event) => { onNoteChange(event.target.value); }}\n placeholder={question === undefined ? '' : 'Optional, sent with your answer'}\n className=\"rounded-md border border-input bg-background p-2\"\n />\n </label>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex flex-wrap gap-2\">\n <ActionButton data-testid=\"overview-answer\" variant={question === undefined ? 'primary' : 'secondary'} isPending={working?.kind === 'note'} pendingLabel=\"Sending...\" disabled={isWorking} onClick={() => { onAnswer(undefined); }}>\n {question === undefined ? 'Answer' : 'Send the note alone'}\n </ActionButton>\n {question === undefined ? (\n <ActionButton data-testid=\"overview-done\" isPending={working?.kind === 'done'} pendingLabel=\"Marking done...\" disabled={isWorking} onClick={onDone}>\n Done\n </ActionButton>\n ) : null}\n <button type=\"button\" onClick={onBack} disabled={isWorking} className=\"inline-flex h-9 items-center rounded-md px-4 text-muted-foreground hover:bg-accent disabled:opacity-70\">\n Back to the inbox\n </button>\n </div>\n </section>\n );\n}\n","import type { InboxEntry } from '../services/deliveries';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nfunction EntryText({ entry }: { entry: InboxEntry }) {\n return (\n <span className=\"flex min-w-0 flex-1 flex-col text-left\">\n <span className=\"truncate\">{entry.title}</span>\n <span className=\"text-caption text-muted-foreground\">from {entry.from}</span>\n </span>\n );\n}\n\n/**\n * The person's inbox in two groups (aeolus-fleet #1046): what waits, which\n * they open one at a time, and what they opened and have not answered or\n * been done with yet, which opens again. A failure to open says why by the\n * delivery.\n */\nexport function InboxList({\n waitingCount,\n waiting,\n opened,\n openingId,\n failure,\n onOpen,\n}: {\n waitingCount: number;\n waiting: readonly InboxEntry[];\n opened: readonly InboxEntry[];\n openingId: string | undefined;\n failure: { deliveryId: string; message: string } | undefined;\n onOpen: (entry: InboxEntry) => void;\n}) {\n return (\n <div className=\"grid gap-6\">\n {waiting.length === 0 ? null : (\n <section className=\"grid gap-2\">\n <h2 className=\"text-section font-semibold\">Next · {waitingCount}</h2>\n {waiting.map((entry) => (\n <div key={entry.deliveryId} className=\"grid min-w-0 gap-2 rounded-md border border-border bg-card p-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <EntryText entry={entry} />\n <ActionButton data-testid=\"overview-open\" isPending={openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={openingId !== undefined} onClick={() => { onOpen(entry); }}>\n Open\n </ActionButton>\n </div>\n {failure?.deliveryId === entry.deliveryId ? <Notice message={failure.message} isFailure /> : null}\n </div>\n ))}\n </section>\n )}\n {opened.length === 0 ? null : (\n <section className=\"grid gap-2\">\n <h2 className=\"text-section font-semibold\">Opened, not yet dealt with · {opened.length}</h2>\n {opened.map((entry) => (\n <div key={entry.deliveryId} className=\"grid min-w-0 gap-2 rounded-md border border-border bg-card p-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <EntryText entry={entry} />\n <ActionButton data-testid=\"overview-deal\" isPending={openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={openingId !== undefined} onClick={() => { onOpen(entry); }}>\n Answer or be done\n </ActionButton>\n </div>\n {failure?.deliveryId === entry.deliveryId ? <Notice message={failure.message} isFailure /> : null}\n </div>\n ))}\n </section>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { showAllInSlack, unlinkSlack } from '../hooks/overview-actions';\nimport type { SlackLink } from '../hooks/read-overview';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\n\n/**\n * The person's Slack link (gateway scopes 9.3, 9.6): \"Slack linked as\n * @mathilde in Acme\" with Unlink, or Link Slack, which signs in with Slack.\n * Linked, the person talks to the fleet's bots in Slack, and sees a bot\n * ship's messages there; the switch Show everything that waits in Slack,\n * off until turned on, shows the other ships' messages there too (B5).\n */\nexport function SlackLinkPanel({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink }) {\n const [isUnlinking, startTransition] = useTransition();\n const [isTurning, startTurning] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const { workspaceName, link } = slackLink;\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTurning(async () => {\n const outcome = await showAllInSlack(fleetId, isOn);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-2\" aria-labelledby=\"overview-slack-heading\">\n <h2 id=\"overview-slack-heading\" className=\"text-section font-semibold\">\n Slack\n </h2>\n <div className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span data-testid=\"overview-slack-state\" className=\"min-w-0 flex-1\">\n {link === null ? `Not linked in ${workspaceName}` : `Slack linked as @${link.slackName} in ${workspaceName}`}\n </span>\n {link === null ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"overview-slack-link\"\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : (\n <ActionButton data-testid=\"overview-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n )}\n </div>\n {link === null ? null : (\n <div className=\"flex flex-wrap items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span>Show everything that waits in Slack</span>\n <span data-testid=\"overview-slack-show-all-state\" className=\"text-caption text-muted-foreground\">\n {link.isShowingAll ? \"On: every ship's messages show in Slack, the ones from ships that are not bots through the fleet's own bot.\" : \"Off: only the bots' messages show in Slack.\"}\n </span>\n </span>\n <ActionButton data-testid=\"overview-slack-show-all\" isPending={isTurning} pendingLabel={link.isShowingAll ? 'Turning off...' : 'Turning on...'} onClick={() => { turn(!link.isShowingAll); }}>\n {link.isShowingAll ? 'Turn off' : 'Turn on'}\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"601910062a5e0864a2917cd809b6f8accb362b46d1\":{\"name\":\"showAllInSlack\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_7=/*#__PURE__*/createServerReference(\"601910062a5e0864a2917cd809b6f8accb362b46d1\",callServer,void 0,findSourceMapURL,\"showAllInSlack\");export{$$RSC_SERVER_ACTION_7 as showAllInSlack};","/* __next_internal_action_entry_do_not_use__ [{\"40bda0ff816df122642777c895d7e4a5c52172f56a\":{\"name\":\"unlinkSlack\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"40bda0ff816df122642777c895d7e4a5c52172f56a\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_6 as unlinkSlack};","/** Where Link Slack starts (gateway scopes 9.3): the Overview's button and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnEmail } from '../hooks/overview-actions';\nimport type { WakeChannels } from '../services/deliveries';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { WebPushPanel } from './web-push-panel';\n\n/**\n * Where the person turns on the channels that wake them when something\n * waits for their person ship while they are away (wake a person, W8):\n * email, where the gateway sends it, and web push per browser, where it\n * holds push keys. Nothing is on by default. The wake says only that\n * something waits in the fleet, with a link here. While a page of theirs\n * here is in focus, it shows what arrives and no wake goes out (W6).\n */\nexport function WakePanel({ fleetId, channels }: { fleetId: string; channels: WakeChannels }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const { email, webPush } = channels;\n if (!email.isOffered && webPush.publicKey === null) {\n return null;\n }\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await turnEmail(fleetId, isOn);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-2\" aria-labelledby=\"overview-wake-heading\">\n <h2 id=\"overview-wake-heading\" className=\"text-section font-semibold\">\n When something waits\n </h2>\n {!email.isOffered ? null : (\n <div className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span>Email</span>\n <span data-testid=\"overview-wake-email-state\" className=\"text-caption text-muted-foreground\">\n {email.isOn ? 'On: you get an email when something waits for you in this fleet, with a link here. Never what waits.' : 'Off: nothing tells you when something waits while you are away.'}\n </span>\n </span>\n <ActionButton data-testid=\"overview-wake-email\" isPending={isTurning} pendingLabel={email.isOn ? 'Turning off...' : 'Turning on...'} onClick={() => { turn(!email.isOn); }}>\n {email.isOn ? 'Turn off' : 'Turn on'}\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {webPush.publicKey === null ? null : <WebPushPanel fleetId={fleetId} webPushKey={webPush.publicKey} browsers={webPush.browsers} />}\n </section>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"601b65024ccb7fc33018510433a7610daeebdbdb3d\":{\"name\":\"turnEmail\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"601b65024ccb7fc33018510433a7610daeebdbdb3d\",callServer,void 0,findSourceMapURL,\"turnEmail\");export{$$RSC_SERVER_ACTION_3 as turnEmail};","/* __next_internal_action_entry_do_not_use__ [{\"607887cbdee422db6a9cda69ee2c54629879fb2510\":{\"name\":\"turnOffWebPush\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"607887cbdee422db6a9cda69ee2c54629879fb2510\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_5 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"6099ca5bb6c962ad51b5b316d713691acae0b2e746\":{\"name\":\"turnOnWebPush\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"6099ca5bb6c962ad51b5b316d713691acae0b2e746\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_4 as turnOnWebPush};","/**\n * What the overview's section of wakes works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport { turnOffWebPush, turnOnWebPush } from '../hooks/overview-actions';\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\n\n/** The service worker that shows a wake and opens the overview when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in the overview's section of wakes (wake a person, W8): the\n * person turns it on for this browser, which asks the browser's permission\n * first, sees the browsers they turned it on in, and removes one. Nothing is\n * on until they turn it on. A browser whose push service ended its\n * subscription is said to be gone.\n */\nexport function WebPushPanel({ fleetId, webPushKey, browsers }: { fleetId: string; webPushKey: string; browsers: WakeChannels['webPush']['browsers'] }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n const isOwnOn = ownEndpoint !== undefined && browsers.some(({ endpoint, isGone }) => endpoint === ownEndpoint && !isGone);\n return (\n <div className=\"grid gap-2\" data-testid=\"overview-wake-web-push\">\n {browsers.map(({ endpoint, browser, addedAt, isGone }) => (\n <div key={endpoint} className=\"flex items-center gap-3 rounded-md border border-border bg-card p-3\">\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate\">\n Web push in {browser}\n {endpoint === ownEndpoint ? ' · this browser' : ''}\n </span>\n <span className=\"text-caption text-muted-foreground\">\n {isGone ? 'No longer takes wakes: its push service ended them. Turn web push on again in that browser, or remove it.' : `On since ${new Date(addedAt).toLocaleDateString()}: it tells you when something waits in this fleet, with a link here. Never what waits.`}\n </span>\n </span>\n <ActionButton data-testid=\"overview-web-push-remove\" isPending={working === endpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(endpoint); }}>\n Remove\n </ActionButton>\n </div>\n ))}\n {!isTaken ? (\n <p className=\"text-caption text-muted-foreground\">This browser takes no web push.</p>\n ) : isOwnOn ? null : (\n <div>\n <ActionButton data-testid=\"overview-web-push-on\" variant=\"primary\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on web push in this browser\n </ActionButton>\n </div>\n )}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </div>\n );\n}\n"],"names":["MEETINGS_PATH","meetingPathOf","meeting","query","URLSearchParams","fleet","fleetId","cursor","undefined","encodeURIComponent","meetingId","toString","$$RSC_SERVER_ACTION_7","$$RSC_SERVER_ACTION_3"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[91445,a=>{"use strict";var b=a.i(87924),c=a.i(50944),d=a.i(72131),e=a.i(5050);let f=(0,e.createServerReference)("
|
|
1
|
+
module.exports=[91445,a=>{"use strict";var b=a.i(87924),c=a.i(50944),d=a.i(72131),e=a.i(5050);let f=(0,e.createServerReference)("408819c99996290b362a2ea4e8b39d342b6bf79c81",e.callServer,void 0,e.findSourceMapURL,"decideRequest");var g=a.i(51636),h=a.i(35149);let i=["messages:send","messages:receive"],j={"messages:send":"Send","messages:receive":"Receive","fleet:read":"Read the fleet"};var k=a.i(1542),l=a.i(24229);let m="rounded-md border border-input bg-background px-2 py-1.5";function n({scope:a,isLocked:c}){return(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[c?(0,b.jsx)("input",{type:"checkbox",checked:!0,disabled:!0,"aria-label":j[a]??a}):(0,b.jsx)("input",{type:"checkbox",name:"scope",value:a,"aria-label":j[a]??a}),(0,b.jsx)("span",{children:j[a]??a}),(0,b.jsx)("span",{className:"font-mono text-caption text-muted-foreground",children:a}),c?(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"(always)"}):null]})}function o(a,b){let c=a.get(b);return"string"==typeof c?c:""}function p({request:a,heldScopes:c,owners:e,working:f,failure:j,onDecide:q}){let[r,s]=(0,d.useState)("bearer"),t=function(a){switch(a.subject.kind){case"client":return a.subject.clientName;case"server":return URL.canParse(a.subject.url)?new URL(a.subject.url).host:a.subject.url}}(a),u="server"===a.subject.kind;return(0,b.jsxs)("section",{className:"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm",children:[(0,b.jsxs)("h2",{className:"text-heading font-semibold",children:["Approve ",t]}),(0,b.jsxs)("form",{onSubmit:a=>{a.preventDefault();let b=new FormData(a.currentTarget),c=b.getAll("scope").filter(a=>"string"==typeof a);q({kind:"approve",name:o(b,"name"),ownerShipId:o(b,"ownerShipId"),scopes:c,server:u?{credentialKind:(0,g.C)(o(b,"credentialKind")),token:o(b,"token"),clientId:o(b,"clientId"),clientSecret:o(b,"clientSecret"),issuer:o(b,"issuer"),scope:o(b,"scope-requested"),concurrencyLimit:Number(o(b,"concurrencyLimit"))}:void 0})},className:"grid gap-3",children:[(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{name:"name",defaultValue:t.toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,""),required:!0,className:m})]}),(0,b.jsx)(h.f,{choices:e.isOk?e.value:[],current:null,help:"A person ship or argo. It answers for this party.",refusal:e.isOk?void 0:e.refusal}),(0,b.jsxs)("fieldset",{className:"grid gap-1",children:[(0,b.jsx)("legend",{children:"Scopes"}),i.map(a=>(0,b.jsx)(n,{scope:a,isLocked:!0},a)),c.filter(a=>!i.includes(a)).map(a=>(0,b.jsx)(n,{scope:a,isLocked:!1},a))]}),u?(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{children:"The server's credential"}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsx)("select",{name:"credentialKind",value:r,onChange:a=>{s((0,g.C)(a.target.value))},className:m,children:g.x.map(({kind:a,label:c})=>(0,b.jsx)("option",{value:a,children:c},a))})]}),"none"===r?null:"bearer"===r?(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{type:"password",name:"token",className:m})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{name:"clientId",className:m})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{type:"password",name:"clientSecret",className:m})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{type:"url",name:"issuer",className:m})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{name:"scope-requested",className:m})]})]}),(0,b.jsxs)("label",{className:"grid gap-1",children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:4,className:m})]})]}):null,void 0===j?null:(0,b.jsx)(l.f,{message:j,isFailure:!0}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(k.f,{type:"submit",variant:"primary","data-testid":"overview-approve",isPending:"approve"===f,pendingLabel:"Approving...",disabled:void 0!==f,children:"Approve"}),(0,b.jsx)(k.f,{type:"button","data-testid":"overview-deny",isPending:"deny"===f,pendingLabel:"Denying...",disabled:void 0!==f,onClick:()=>{q({kind:"deny"})},children:"Deny"})]})]})]})}a.s(["DecisionPanel",0,function({fleetId:a,request:e,heldScopes:g,owners:h}){let i=(0,c.useRouter)(),[j,k]=(0,d.useState)(),[l,m]=(0,d.useState)(),[,n]=(0,d.useTransition)();return(0,b.jsx)(p,{request:e,heldScopes:g,owners:h,working:j,failure:l,onDecide:b=>{k(b.kind),m(void 0),n(async()=>{let c=await f({fleet:a,requestId:e.requestId,input:b});c.isOk?i.push(`/overview?${new URLSearchParams({fleet:a,decided:b.kind}).toString()}`):(k(void 0),m(c.message))})}})}],91445)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/overview/state/decision-panel.tsx","../../../../../web/features/overview/hooks/data%3A89077c%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/decision-form.tsx","../../../../../web/features/overview/services/requests.ts"],"sourcesContent":["'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useState, useTransition } from 'react';\n\nimport type { OwnerChoices } from '../../forms/ui/owner-field';\nimport { decideRequest } from '../hooks/overview-actions';\nimport type { DecisionInput, ShownRequest } from '../services/requests';\nimport { DecisionForm } from '../ui/decision-form';\n\n/** Decides one request as the signed-in approver, then goes back to the Overview, which says nothing more waits here. */\nexport function DecisionPanel({ fleetId, request, heldScopes, owners }: { fleetId: string; request: ShownRequest; heldScopes: readonly string[]; owners: OwnerChoices }) {\n const router = useRouter();\n const [working, setWorking] = useState<DecisionInput['kind'] | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const decide = (decision: DecisionInput) => {\n setWorking(decision.kind);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await decideRequest({ fleet: fleetId, requestId: request.requestId, input: decision });\n if (outcome.isOk) {\n router.push(`/overview?${new URLSearchParams({ fleet: fleetId, decided: decision.kind }).toString()}`);\n return;\n }\n setWorking(undefined);\n setFailure(outcome.message);\n });\n };\n return <DecisionForm request={request} heldScopes={heldScopes} owners={owners} working={working} failure={failure} onDecide={decide} />;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4053327e6f06e4be75e433f59031981625d8630636\":{\"name\":\"decideRequest\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"4053327e6f06e4be75e433f59031981625d8630636\",callServer,void 0,findSourceMapURL,\"decideRequest\");export{$$RSC_SERVER_ACTION_8 as decideRequest};","'use client';\n\nimport { useState, type SyntheticEvent } from 'react';\n\nimport { CREDENTIAL_KINDS, credentialKindOf } from '../../forms/server-credential';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { EVERY_APP_SHIP_SCOPES, scopeLabel, subjectName, suggestedName, type DecisionInput, type ServerCredentialInput, type ShownRequest } from '../services/requests';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nconst CONCURRENCY_LIMIT_DEFAULT = 4;\n\nconst FIELD = 'rounded-md border border-input bg-background px-2 py-1.5';\n\nfunction ScopeRow({ scope, isLocked }: { scope: string; isLocked: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n {isLocked ? <input type=\"checkbox\" checked disabled aria-label={scopeLabel(scope)} /> : <input type=\"checkbox\" name=\"scope\" value={scope} aria-label={scopeLabel(scope)} />}\n <span>{scopeLabel(scope)}</span>\n <span className=\"font-mono text-caption text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-caption text-muted-foreground\">(always)</span> : null}\n </label>\n );\n}\n\nfunction text(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\nfunction serverOf(form: FormData): ServerCredentialInput {\n return {\n credentialKind: credentialKindOf(text(form, 'credentialKind')),\n token: text(form, 'token'),\n clientId: text(form, 'clientId'),\n clientSecret: text(form, 'clientSecret'),\n issuer: text(form, 'issuer'),\n scope: text(form, 'scope-requested'),\n concurrencyLimit: Number(text(form, 'concurrencyLimit')),\n };\n}\n\n/**\n * The decision on a request: approving names the proxy ship and its owner,\n * and offers as scope rows only the scopes the approver holds, messages:send\n * and messages:receive locked on (0046, 0053); a server's credential too.\n * What was typed stays when the API refuses.\n */\nexport function DecisionForm({\n request,\n heldScopes,\n owners,\n working,\n failure,\n onDecide,\n}: {\n request: ShownRequest;\n heldScopes: readonly string[];\n owners: OwnerChoices;\n working: DecisionInput['kind'] | undefined;\n failure: string | undefined;\n onDecide: (decision: DecisionInput) => void;\n}) {\n const [credentialKind, setCredentialKind] = useState<ServerCredentialInput['credentialKind']>('bearer');\n const name = subjectName(request);\n const isServer = request.subject.kind === 'server';\n const approve = (event: SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n const form = new FormData(event.currentTarget);\n const scopes = form.getAll('scope').filter((scope) => typeof scope === 'string');\n onDecide({ kind: 'approve', name: text(form, 'name'), ownerShipId: text(form, 'ownerShipId'), scopes, server: isServer ? serverOf(form) : undefined });\n };\n return (\n <section className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <h2 className=\"text-heading font-semibold\">Approve {name}</h2>\n <form onSubmit={approve} className=\"grid gap-3\">\n <label className=\"grid gap-1\">\n <span>Proxy ship's name</span>\n <input name=\"name\" defaultValue={suggestedName(name)} required className={FIELD} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this party.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <fieldset className=\"grid gap-1\">\n <legend>Scopes</legend>\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {heldScopes\n .filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope))\n .map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked={false} />\n ))}\n </fieldset>\n {isServer ? (\n <fieldset className=\"grid gap-2\">\n <legend>The server's credential</legend>\n <label className=\"grid gap-1\">\n <span>Credential</span>\n <select name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(credentialKindOf(event.target.value)); }} className={FIELD}>\n {CREDENTIAL_KINDS.map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n {credentialKind === 'none' ? null : credentialKind === 'bearer' ? (\n <label className=\"grid gap-1\">\n <span>Bearer token</span>\n <input type=\"password\" name=\"token\" className={FIELD} />\n </label>\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>Client id</span>\n <input name=\"clientId\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Client secret</span>\n <input type=\"password\" name=\"clientSecret\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Issuer</span>\n <input type=\"url\" name=\"issuer\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Scope</span>\n <input name=\"scope-requested\" className={FIELD} />\n </label>\n </>\n )}\n <label className=\"grid gap-1\">\n <span>Calls at once</span>\n <input type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={CONCURRENCY_LIMIT_DEFAULT} className={FIELD} />\n </label>\n </fieldset>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex gap-2\">\n <ActionButton type=\"submit\" variant=\"primary\" data-testid=\"overview-approve\" isPending={working === 'approve'} pendingLabel=\"Approving...\" disabled={working !== undefined}>\n Approve\n </ActionButton>\n <ActionButton type=\"button\" data-testid=\"overview-deny\" isPending={working === 'deny'} pendingLabel=\"Denying...\" disabled={working !== undefined} onClick={() => { onDecide({ kind: 'deny' }); }}>\n Deny\n </ActionButton>\n </div>\n </form>\n </section>\n );\n}\n","/**\n * How the Overview names and states a request for an outside party (design\n * B, Signal): pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\nimport type { CredentialKind } from '../../forms/server-credential';\n\n/** A request as the API shows it. */\nexport type ShownRequest = inferRouterOutputs<GatewayRouter>['requests']['toDecide'][number];\n\n/** The tones a status shows, from the design tokens; a status always has its words too. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\nexport interface Status {\n readonly tone: Tone;\n readonly label: string;\n}\n\nconst DAY_MS = 86_400_000;\n\n/** How an outside party is named before it has a proxy ship: a client by its name, a server by its host. */\nexport function subjectName(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return request.subject.clientName;\n case 'server':\n return URL.canParse(request.subject.url) ? new URL(request.subject.url).host : request.subject.url;\n }\n}\n\nexport function subjectKind(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return 'MCP client';\n case 'server':\n return 'MCP server';\n }\n}\n\n/** Days left of the 7 a request is kept, counted up, so its last day reads as such, in the attention tone. */\nexport function daysLeft(request: ShownRequest, now: Date): Status {\n const days = Math.ceil((Date.parse(request.expiresAt) - now.getTime()) / DAY_MS);\n return days <= 1 ? { tone: 'attention', label: 'Last day' } : { tone: 'waiting', label: `${String(days)} d left` };\n}\n\n/** A request's state as the console shows a status; one still pending shows its days left. */\nexport function requestStatus(request: ShownRequest, now: Date): Status {\n switch (request.state) {\n case 'pending':\n return daysLeft(request, now);\n case 'approving':\n return { tone: 'active', label: 'Approving' };\n case 'approved':\n return { tone: 'ok', label: 'Approved' };\n case 'denied':\n return { tone: 'ended', label: 'Denied' };\n case 'expired':\n return { tone: 'ended', label: 'Expired' };\n }\n}\n\n/** A proxy ship's name offered from the party's own: lower case letters, digits and dashes. */\nexport function suggestedName(name: string): string {\n return name\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, '-')\n .replaceAll(/^-+|-+$/g, '');\n}\n\n/** The scopes every app ship gets (0046): shown locked on, and always sent. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** A scope's plain label, shown beside the scope itself. */\nexport function scopeLabel(scope: string): string {\n return SCOPE_LABELS[scope] ?? scope;\n}\n\n/** The server's credential as the decision form takes it. */\nexport interface ServerCredentialInput {\n readonly credentialKind: CredentialKind;\n readonly token: string;\n readonly clientId: string;\n readonly clientSecret: string;\n readonly issuer: string;\n readonly scope: string;\n readonly concurrencyLimit: number;\n}\n\nexport type DecisionInput = { readonly kind: 'deny' } | { readonly kind: 'approve'; readonly name: string; readonly ownerShipId: string; readonly scopes: readonly string[]; readonly server: ServerCredentialInput | undefined };\n"],"names":["$$RSC_SERVER_ACTION_8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/overview/state/decision-panel.tsx","../../../../../web/features/overview/hooks/data%3A445fe1%20%3Ctext/javascript%3E","../../../../../web/features/overview/ui/decision-form.tsx","../../../../../web/features/overview/services/requests.ts"],"sourcesContent":["'use client';\n\nimport { useRouter } from 'next/navigation';\nimport { useState, useTransition } from 'react';\n\nimport type { OwnerChoices } from '../../forms/ui/owner-field';\nimport { decideRequest } from '../hooks/overview-actions';\nimport type { DecisionInput, ShownRequest } from '../services/requests';\nimport { DecisionForm } from '../ui/decision-form';\n\n/** Decides one request as the signed-in approver, then goes back to the Overview, which says nothing more waits here. */\nexport function DecisionPanel({ fleetId, request, heldScopes, owners }: { fleetId: string; request: ShownRequest; heldScopes: readonly string[]; owners: OwnerChoices }) {\n const router = useRouter();\n const [working, setWorking] = useState<DecisionInput['kind'] | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const decide = (decision: DecisionInput) => {\n setWorking(decision.kind);\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await decideRequest({ fleet: fleetId, requestId: request.requestId, input: decision });\n if (outcome.isOk) {\n router.push(`/overview?${new URLSearchParams({ fleet: fleetId, decided: decision.kind }).toString()}`);\n return;\n }\n setWorking(undefined);\n setFailure(outcome.message);\n });\n };\n return <DecisionForm request={request} heldScopes={heldScopes} owners={owners} working={working} failure={failure} onDecide={decide} />;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"408819c99996290b362a2ea4e8b39d342b6bf79c81\":{\"name\":\"decideRequest\"}},\"web/features/overview/hooks/overview-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_8=/*#__PURE__*/createServerReference(\"408819c99996290b362a2ea4e8b39d342b6bf79c81\",callServer,void 0,findSourceMapURL,\"decideRequest\");export{$$RSC_SERVER_ACTION_8 as decideRequest};","'use client';\n\nimport { useState, type SyntheticEvent } from 'react';\n\nimport { CREDENTIAL_KINDS, credentialKindOf } from '../../forms/server-credential';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { EVERY_APP_SHIP_SCOPES, scopeLabel, subjectName, suggestedName, type DecisionInput, type ServerCredentialInput, type ShownRequest } from '../services/requests';\nimport { ActionButton } from './action-button';\nimport { Notice } from './notice';\n\nconst CONCURRENCY_LIMIT_DEFAULT = 4;\n\nconst FIELD = 'rounded-md border border-input bg-background px-2 py-1.5';\n\nfunction ScopeRow({ scope, isLocked }: { scope: string; isLocked: boolean }) {\n return (\n <label className=\"flex items-center gap-2\">\n {isLocked ? <input type=\"checkbox\" checked disabled aria-label={scopeLabel(scope)} /> : <input type=\"checkbox\" name=\"scope\" value={scope} aria-label={scopeLabel(scope)} />}\n <span>{scopeLabel(scope)}</span>\n <span className=\"font-mono text-caption text-muted-foreground\">{scope}</span>\n {isLocked ? <span className=\"text-caption text-muted-foreground\">(always)</span> : null}\n </label>\n );\n}\n\nfunction text(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\nfunction serverOf(form: FormData): ServerCredentialInput {\n return {\n credentialKind: credentialKindOf(text(form, 'credentialKind')),\n token: text(form, 'token'),\n clientId: text(form, 'clientId'),\n clientSecret: text(form, 'clientSecret'),\n issuer: text(form, 'issuer'),\n scope: text(form, 'scope-requested'),\n concurrencyLimit: Number(text(form, 'concurrencyLimit')),\n };\n}\n\n/**\n * The decision on a request: approving names the proxy ship and its owner,\n * and offers as scope rows only the scopes the approver holds, messages:send\n * and messages:receive locked on (0046, 0053); a server's credential too.\n * What was typed stays when the API refuses.\n */\nexport function DecisionForm({\n request,\n heldScopes,\n owners,\n working,\n failure,\n onDecide,\n}: {\n request: ShownRequest;\n heldScopes: readonly string[];\n owners: OwnerChoices;\n working: DecisionInput['kind'] | undefined;\n failure: string | undefined;\n onDecide: (decision: DecisionInput) => void;\n}) {\n const [credentialKind, setCredentialKind] = useState<ServerCredentialInput['credentialKind']>('bearer');\n const name = subjectName(request);\n const isServer = request.subject.kind === 'server';\n const approve = (event: SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n const form = new FormData(event.currentTarget);\n const scopes = form.getAll('scope').filter((scope) => typeof scope === 'string');\n onDecide({ kind: 'approve', name: text(form, 'name'), ownerShipId: text(form, 'ownerShipId'), scopes, server: isServer ? serverOf(form) : undefined });\n };\n return (\n <section className=\"grid gap-3 rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm\">\n <h2 className=\"text-heading font-semibold\">Approve {name}</h2>\n <form onSubmit={approve} className=\"grid gap-3\">\n <label className=\"grid gap-1\">\n <span>Proxy ship's name</span>\n <input name=\"name\" defaultValue={suggestedName(name)} required className={FIELD} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this party.\" refusal={owners.isOk ? undefined : owners.refusal} />\n <fieldset className=\"grid gap-1\">\n <legend>Scopes</legend>\n {EVERY_APP_SHIP_SCOPES.map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked />\n ))}\n {heldScopes\n .filter((scope) => !EVERY_APP_SHIP_SCOPES.includes(scope))\n .map((scope) => (\n <ScopeRow key={scope} scope={scope} isLocked={false} />\n ))}\n </fieldset>\n {isServer ? (\n <fieldset className=\"grid gap-2\">\n <legend>The server's credential</legend>\n <label className=\"grid gap-1\">\n <span>Credential</span>\n <select name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(credentialKindOf(event.target.value)); }} className={FIELD}>\n {CREDENTIAL_KINDS.map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n {credentialKind === 'none' ? null : credentialKind === 'bearer' ? (\n <label className=\"grid gap-1\">\n <span>Bearer token</span>\n <input type=\"password\" name=\"token\" className={FIELD} />\n </label>\n ) : (\n <>\n <label className=\"grid gap-1\">\n <span>Client id</span>\n <input name=\"clientId\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Client secret</span>\n <input type=\"password\" name=\"clientSecret\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Issuer</span>\n <input type=\"url\" name=\"issuer\" className={FIELD} />\n </label>\n <label className=\"grid gap-1\">\n <span>Scope</span>\n <input name=\"scope-requested\" className={FIELD} />\n </label>\n </>\n )}\n <label className=\"grid gap-1\">\n <span>Calls at once</span>\n <input type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={CONCURRENCY_LIMIT_DEFAULT} className={FIELD} />\n </label>\n </fieldset>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <div className=\"flex gap-2\">\n <ActionButton type=\"submit\" variant=\"primary\" data-testid=\"overview-approve\" isPending={working === 'approve'} pendingLabel=\"Approving...\" disabled={working !== undefined}>\n Approve\n </ActionButton>\n <ActionButton type=\"button\" data-testid=\"overview-deny\" isPending={working === 'deny'} pendingLabel=\"Denying...\" disabled={working !== undefined} onClick={() => { onDecide({ kind: 'deny' }); }}>\n Deny\n </ActionButton>\n </div>\n </form>\n </section>\n );\n}\n","/**\n * How the Overview names and states a request for an outside party (design\n * B, Signal): pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\nimport type { CredentialKind } from '../../forms/server-credential';\n\n/** A request as the API shows it. */\nexport type ShownRequest = inferRouterOutputs<GatewayRouter>['requests']['toDecide'][number];\n\n/** The tones a status shows, from the design tokens; a status always has its words too. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\nexport interface Status {\n readonly tone: Tone;\n readonly label: string;\n}\n\nconst DAY_MS = 86_400_000;\n\n/** How an outside party is named before it has a proxy ship: a client by its name, a server by its host. */\nexport function subjectName(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return request.subject.clientName;\n case 'server':\n return URL.canParse(request.subject.url) ? new URL(request.subject.url).host : request.subject.url;\n }\n}\n\nexport function subjectKind(request: ShownRequest): string {\n switch (request.subject.kind) {\n case 'client':\n return 'MCP client';\n case 'server':\n return 'MCP server';\n }\n}\n\n/** Days left of the 7 a request is kept, counted up, so its last day reads as such, in the attention tone. */\nexport function daysLeft(request: ShownRequest, now: Date): Status {\n const days = Math.ceil((Date.parse(request.expiresAt) - now.getTime()) / DAY_MS);\n return days <= 1 ? { tone: 'attention', label: 'Last day' } : { tone: 'waiting', label: `${String(days)} d left` };\n}\n\n/** A request's state as the console shows a status; one still pending shows its days left. */\nexport function requestStatus(request: ShownRequest, now: Date): Status {\n switch (request.state) {\n case 'pending':\n return daysLeft(request, now);\n case 'approving':\n return { tone: 'active', label: 'Approving' };\n case 'approved':\n return { tone: 'ok', label: 'Approved' };\n case 'denied':\n return { tone: 'ended', label: 'Denied' };\n case 'expired':\n return { tone: 'ended', label: 'Expired' };\n }\n}\n\n/** A proxy ship's name offered from the party's own: lower case letters, digits and dashes. */\nexport function suggestedName(name: string): string {\n return name\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, '-')\n .replaceAll(/^-+|-+$/g, '');\n}\n\n/** The scopes every app ship gets (0046): shown locked on, and always sent. */\nexport const EVERY_APP_SHIP_SCOPES: readonly string[] = ['messages:send', 'messages:receive'];\n\nconst SCOPE_LABELS: Record<string, string> = {\n 'messages:send': 'Send',\n 'messages:receive': 'Receive',\n 'fleet:read': 'Read the fleet',\n};\n\n/** A scope's plain label, shown beside the scope itself. */\nexport function scopeLabel(scope: string): string {\n return SCOPE_LABELS[scope] ?? scope;\n}\n\n/** The server's credential as the decision form takes it. */\nexport interface ServerCredentialInput {\n readonly credentialKind: CredentialKind;\n readonly token: string;\n readonly clientId: string;\n readonly clientSecret: string;\n readonly issuer: string;\n readonly scope: string;\n readonly concurrencyLimit: number;\n}\n\nexport type DecisionInput = { readonly kind: 'deny' } | { readonly kind: 'approve'; readonly name: string; readonly ownerShipId: string; readonly scopes: readonly string[]; readonly server: ServerCredentialInput | undefined };\n"],"names":["$$RSC_SERVER_ACTION_8"],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCH+M,EAAA,EAAA,CAAA,CAAA,MAAsG,IAAMA,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,iBCIpc,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCmEO,IAAM,EAA2C,CAAC,gBAAiB,mBAAmB,CAEvF,EAAuC,CAC3C,gBAAiB,OACjB,mBAAoB,UACpB,aAAc,gBAChB,EDvEA,IAAA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OAIA,IAAM,EAAQ,2DAEd,SAAS,EAAS,OAAE,CAAK,UAAE,CAAQ,CAAwC,EACzE,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,oCACd,EAAW,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,WAAW,OAAO,CAAA,CAAA,EAAC,QAAQ,CAAA,CAAA,EAAC,cAAY,KAAW,IAAa,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,WAAW,KAAK,QAAQ,MAAO,EAAO,cCiE3H,ADjEuI,CCiEtI,EAAM,EDjE2I,ECiEvI,EDhE1B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UCgEE,CDhEI,KAAW,IAClB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,wDAAgD,IAC/D,EAAW,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,8CAAqC,aAAkB,OAGzF,CAEA,SAAS,EAAK,CAAc,CAAE,CAAY,EACxC,IAAM,EAAQ,EAAK,GAAG,CAAC,GACvB,MAAO,AAAiB,iBAAV,EAAqB,EAAQ,EAC7C,CAoBO,SAAS,EAAa,SAC3B,CAAO,YACP,CAAU,QACV,CAAM,SACN,CAAO,SACP,CAAO,UACP,CAAQ,CAQT,EACC,GAAM,CAAC,EAAgB,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAA0C,UACxF,EAAO,ACzCR,SAAqB,AAAZ,CAAiC,EAC/C,OAAQ,EAAQ,OAAO,CAAC,IAAI,EAC1B,IAAK,SACH,OAAO,EAAQ,OAAO,CAAC,UAAU,AACnC,KAAK,SACH,OAAO,IAAI,QAAQ,CAAC,EAAQ,OAAO,CAAC,GAAG,EAAI,IAAI,IAAI,EAAQ,OAAO,CAAC,GAAG,EAAE,IAAI,CAAG,EAAQ,OAAO,CAAC,GAAG,AACtG,CACF,EDkC2B,GACnB,EAAW,AAAyB,aAAjB,OAAO,CAAC,IAAI,CAOrC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,UAAA,CAAQ,UAAU,kGACjB,CAAA,EAAA,EAAA,IAAA,EAAC,KAAA,CAAG,UAAU,uCAA6B,WAAS,KACpD,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,SATO,AAAD,CASI,GARlB,EAAM,cAAc,GACpB,IAAM,EAAO,IAAI,SAAS,EAAM,aAAa,EACvC,EAAS,EAAK,MAAM,CAAC,SAAS,MAAM,CAAC,AAAC,GAA2B,UAAjB,OAAO,GAC7D,EAAS,CAAE,KAAM,UAAW,KAAM,EAAK,EAAM,QAAS,YAAa,EAAK,EAAM,sBAAgB,EAAQ,OAAQ,EAvCzG,CACL,QAsCyH,OAtCzG,CAAA,EAAA,EAAA,CAAA,AAAgB,EAAC,IAAW,CAAN,kBACtC,MAAO,EAqC2H,EArChH,CAAN,QACZ,SAAU,IAAW,CAAN,WACf,aAAc,IAAW,CAAN,eACnB,OAAQ,IAAW,CAAN,SACb,MAAO,IAAW,CAAN,kBACZ,iBAAkB,OAAO,IAAW,CAAN,mBAChC,OA+B4I,CAAU,EACtJ,EAI6B,UAAU,uBACjC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,sBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,OAAO,aAA4B,ACbhD,CDakC,CCZtC,WAAW,GACX,UAAU,CAAC,cAAe,KAC1B,UAAU,CAAC,WAAY,IDUoC,QAAQ,CAAA,CAAA,EAAC,UAAW,OAE5E,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAU,CAAA,CAAC,QAAS,EAAO,IAAI,CAAG,EAAO,KAAK,CAAG,EAAE,CAAE,QAAS,KAAM,KAAK,oDAAoD,QAAS,EAAO,IAAI,CAAG,OAAY,EAAO,OAAO,GAC/K,CAAA,EAAA,EAAA,IAAA,EAAC,WAAA,CAAS,UAAU,uBAClB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,UAAO,WACP,EAAsB,GAAG,CAAC,AAAC,GAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAqB,MAAO,EAAO,QAAQ,CAAA,CAAA,GAA7B,IAEhB,EACE,MAAM,CAAC,AAAC,GAAU,CAAC,EAAsB,QAAQ,CAAC,IAClD,GAAG,CAAC,AAAC,GACJ,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAqB,MAAO,EAAO,UAAU,GAA/B,OAGpB,EACC,CAAA,EAAA,EAAA,IAAA,EAAC,WAAA,CAAS,UAAU,uBAClB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,UAAO,4BACR,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,eACN,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,iBAAiB,MAAO,EAAgB,SAAU,AAAC,IAAY,EAAkB,CAAA,EAAA,EAAA,CAAA,AAAgB,EAAC,EAAM,MAAM,CAAC,KAAK,EAAI,EAAG,UAAW,WAChJ,EAAA,CAAgB,CAAC,GAAG,CAAC,CAAC,MAAE,CAAI,OAAE,CAAK,CAAE,GACpC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAkB,MAAO,WACvB,GADU,SAMC,SAAnB,EAA4B,KAA0B,WAAnB,EAClC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,iBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,WAAW,KAAK,QAAQ,UAAW,OAGjD,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,cACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,WAAW,UAAW,OAEpC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,WAAW,KAAK,eAAe,UAAW,OAExD,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,WACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,MAAM,KAAK,SAAS,UAAW,OAE7C,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,kBAAkB,UAAW,UAI/C,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAM,UAAU,uBACf,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAM,KAAK,SAAS,KAAK,mBAAmB,IAAK,EAAG,IAAK,GAAI,aA1H1C,CA0HwD,CAA2B,UAAW,UAGpH,UACS,IAAZ,EAAwB,KAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAM,CAAA,CAAC,QAAS,EAAS,SAAS,CAAA,CAAA,IACnE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAAC,KAAK,SAAS,QAAQ,UAAU,cAAY,mBAAmB,UAAuB,YAAZ,EAAuB,aAAa,eAAe,SAAsB,SAAZ,WAAuB,YAG5K,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAAC,KAAK,SAAS,cAAY,gBAAgB,UAAuB,SAAZ,EAAoB,aAAa,aAAa,SAAU,AAAY,WAAW,QAAS,KAAQ,EAAS,CAAE,KAAM,MAAO,EAAI,WAAG,iBAO5M,wBFzIO,SAAS,AAAc,CAAE,SAAO,SAAE,CAAO,YAAE,CAAU,QAAE,CAAM,CAAmG,EACrK,IAAM,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAChC,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAChC,EAAG,EAAgB,CAAG,CAAA,EAAA,EAAA,aAAA,AAAa,IAczC,MAAO,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAa,QAAS,EAAS,WAAY,EAAY,OAAQ,EAAQ,QAAS,EAAS,QAAS,EAAS,SAbpG,AAAC,CAa6G,GAZ3H,EAAW,EAAS,IAAI,EACxB,OAAW,GACX,EAAgB,UACd,IAAM,EAAU,MAAM,EAAc,CAAE,MAAO,EAAS,UAAW,EAAQ,SAAS,CAAE,MAAO,CAAS,EACpG,CAAI,EAAQ,IAAI,CACd,CADgB,CACT,IAAI,CAAC,CAAC,UAAU,EAAE,IAAI,gBAAgB,CAAE,MAAO,EAAS,QAAS,EAAS,IAAI,AAAC,GAAG,QAAQ,GAAA,CAAI,GAGvG,EAAW,QACX,EAAW,EAAQ,OAAO,EAC5B,EACF,GAEF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[5901,33621,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558),e=a.i(66283),f=a.i(1324),g=a.i(29493);let h="/parties";async function i(a,b){let c,g=await (0,e.z)((0,f.v)(a,f.H));try{c=await b(g)}catch(a){return{kind:"refused",message:(0,e.s)(a)}}return(0,d.revalidatePath)(h),{kind:"done",message:c}}async function j(a,b){let d=(0,c.f)("ship").safeParse((0,f.v)(b,"ownerShipId"));if(!d.success)return{kind:"refused",message:"The owner's ship id is not a ship id (shp_...)"};let e=(0,f.v)(b,"scope");return i(b,async a=>{let c=await a.parties.approve.mutate({requestId:(0,f.v)(b,"requestId"),name:(0,f.v)(b,"name"),url:(0,f.v)(b,"url"),credential:(0,g.y)({credentialKind:(0,f.v)(b,"credentialKind"),token:(0,f.v)(b,"token"),clientId:(0,f.v)(b,"clientId"),clientSecret:(0,f.v)(b,"clientSecret"),issuer:(0,f.v)(b,"issuer"),scope:e}),ownerShipId:d.data,concurrencyLimit:Number((0,f.v)(b,"concurrencyLimit"))});return`${c.name} is approved`})}async function k(a,b){return i(b,async a=>{let c=await a.parties.crew.mutate({name:(0,f.v)(b,"name"),secret:(0,f.v)(b,"secret")});return`${c.name} is crewed`})}async function l(a,b){let c=(0,f.v)(b,"name");return i(b,async a=>(await a.parties.state.mutate({name:c}),`${c}'s tools are stated`))}async function m(a,b){let c=(0,f.v)(b,"tool");return i(b,async a=>(await a.parties.markTool.mutate({name:(0,f.v)(b,"name"),tool:c,isRepeatable:"on"===(0,f.v)(b,"isRepeatable")}),`${c} is marked`))}a.s(["f",0,h],33621),(0,a.i(13095).ensureServerEntryExports)([j,k,l,m]),(0,b.registerServerReference)(j,"
|
|
1
|
+
module.exports=[5901,33621,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558),e=a.i(66283),f=a.i(1324),g=a.i(29493);let h="/parties";async function i(a,b){let c,g=await (0,e.z)((0,f.v)(a,f.H));try{c=await b(g)}catch(a){return{kind:"refused",message:(0,e.s)(a)}}return(0,d.revalidatePath)(h),{kind:"done",message:c}}async function j(a,b){let d=(0,c.f)("ship").safeParse((0,f.v)(b,"ownerShipId"));if(!d.success)return{kind:"refused",message:"The owner's ship id is not a ship id (shp_...)"};let e=(0,f.v)(b,"scope");return i(b,async a=>{let c=await a.parties.approve.mutate({requestId:(0,f.v)(b,"requestId"),name:(0,f.v)(b,"name"),url:(0,f.v)(b,"url"),credential:(0,g.y)({credentialKind:(0,f.v)(b,"credentialKind"),token:(0,f.v)(b,"token"),clientId:(0,f.v)(b,"clientId"),clientSecret:(0,f.v)(b,"clientSecret"),issuer:(0,f.v)(b,"issuer"),scope:e}),ownerShipId:d.data,concurrencyLimit:Number((0,f.v)(b,"concurrencyLimit"))});return`${c.name} is approved`})}async function k(a,b){return i(b,async a=>{let c=await a.parties.crew.mutate({name:(0,f.v)(b,"name"),secret:(0,f.v)(b,"secret")});return`${c.name} is crewed`})}async function l(a,b){let c=(0,f.v)(b,"name");return i(b,async a=>(await a.parties.state.mutate({name:c}),`${c}'s tools are stated`))}async function m(a,b){let c=(0,f.v)(b,"tool");return i(b,async a=>(await a.parties.markTool.mutate({name:(0,f.v)(b,"name"),tool:c,isRepeatable:"on"===(0,f.v)(b,"isRepeatable")}),`${c} is marked`))}a.s(["f",0,h],33621),(0,a.i(13095).ensureServerEntryExports)([j,k,l,m]),(0,b.registerServerReference)(j,"608e2d3bc076c9fc1aeac506aefae08b559c54a822",null),(0,b.registerServerReference)(k,"609b2571e83693391c61fee7968637f7c1fa4fa80a",null),(0,b.registerServerReference)(l,"60a073d8c40cccf68b1f41bc9e38bc4ec4c2f85b12",null),(0,b.registerServerReference)(m,"60b09a7526f0f57443094aee7bf2410d5c6d21a2d0",null),a.s(["L",0,j,"P",0,k,"p",0,m,"g",0,l],5901)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[434,76890,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558);a.i(70396);var e=a.i(73727),f=a.i(55476),g=a.i(66283),h=a.i(1324);let i="/slack",j=`${i}/disconnect`,k=`${i}/expose`;async function l(a,b){let c,e=await (0,g.z)((0,h.v)(b,h.H));try{({isGatewayBotMade:c}=await e.slack.connect.mutate({refreshToken:(0,h.v)(b,"refreshToken")}))}catch(a){return{kind:"refused",message:(0,g.s)(a)}}return(0,d.revalidatePath)(i),{kind:"done",message:c?"Slack is connected, and the gateway's bot is made: install it":"Slack is connected; Slack did not make the gateway's bot yet: press Install"}}async function m(a,b){let c,d=await (0,g.z)((0,h.v)(b,h.H)),f=(0,h.v)(b,"appId");try{({url:c}=await d.slack.install.mutate(""===f?{}:{appId:f}))}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)(c)}async function n(a,b){let c=(0,h.v)(b,h.H),d=await (0,g.z)(c);try{await d.slack.disconnect.mutate()}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,c))}async function o(a,b){let d=(0,h.v)(b,h.H),j=await (0,g.z)(d),k=(0,c.f)("ship").safeParse((0,h.v)(b,"shipId"));if(!k.success)return{kind:"refused",message:"Pick a ship to expose"};try{await j.slack.expose.mutate({shipId:k.data})}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,d))}async function p(a,b){let c=(0,h.v)(b,h.H),d=await (0,g.z)(c);try{await d.slack.remove.mutate({appId:(0,h.v)(b,"appId")})}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,c))}a.s(["Q",0,j,"K",0,k,"E",0,i,"b",0,function(a){return`${i}/remove?${new URLSearchParams({app:a}).toString()}`}],76890),(0,a.i(13095).ensureServerEntryExports)([l,m,n,o,p]),(0,b.registerServerReference)(l,"
|
|
1
|
+
module.exports=[434,76890,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558);a.i(70396);var e=a.i(73727),f=a.i(55476),g=a.i(66283),h=a.i(1324);let i="/slack",j=`${i}/disconnect`,k=`${i}/expose`;async function l(a,b){let c,e=await (0,g.z)((0,h.v)(b,h.H));try{({isGatewayBotMade:c}=await e.slack.connect.mutate({refreshToken:(0,h.v)(b,"refreshToken")}))}catch(a){return{kind:"refused",message:(0,g.s)(a)}}return(0,d.revalidatePath)(i),{kind:"done",message:c?"Slack is connected, and the gateway's bot is made: install it":"Slack is connected; Slack did not make the gateway's bot yet: press Install"}}async function m(a,b){let c,d=await (0,g.z)((0,h.v)(b,h.H)),f=(0,h.v)(b,"appId");try{({url:c}=await d.slack.install.mutate(""===f?{}:{appId:f}))}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)(c)}async function n(a,b){let c=(0,h.v)(b,h.H),d=await (0,g.z)(c);try{await d.slack.disconnect.mutate()}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,c))}async function o(a,b){let d=(0,h.v)(b,h.H),j=await (0,g.z)(d),k=(0,c.f)("ship").safeParse((0,h.v)(b,"shipId"));if(!k.success)return{kind:"refused",message:"Pick a ship to expose"};try{await j.slack.expose.mutate({shipId:k.data})}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,d))}async function p(a,b){let c=(0,h.v)(b,h.H),d=await (0,g.z)(c);try{await d.slack.remove.mutate({appId:(0,h.v)(b,"appId")})}catch(a){return{kind:"refused",message:(0,g.s)(a)}}(0,e.redirect)((0,f.i)(i,c))}a.s(["Q",0,j,"K",0,k,"E",0,i,"b",0,function(a){return`${i}/remove?${new URLSearchParams({app:a}).toString()}`}],76890),(0,a.i(13095).ensureServerEntryExports)([l,m,n,o,p]),(0,b.registerServerReference)(l,"6061061471519c846108a0c41a7928281d9530dd52",null),(0,b.registerServerReference)(m,"6021d50446cc12f1dca06198d272f1586c0c8e69d4",null),(0,b.registerServerReference)(n,"60d72d0371155b302dc2db8fe7b6f8b43d0559d3b3",null),(0,b.registerServerReference)(o,"60ab08dc47412cb573034b0ee5efce1d294ab880ed",null),(0,b.registerServerReference)(p,"600d22e3e9babdae9f3c55c0e38a29cc19141157d3",null),a.s(["N",0,l,"c",0,n,"K",0,o,"M",0,m,"d",0,p],434)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_slack_actions_ts_1l3yg9vl20_vu._.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/0cz1d0mv5g_q7.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/R_nPUtDcDp1BPV3QHhaMZ/_buildManifest.js",
|
|
11
|
+
"static/R_nPUtDcDp1BPV3QHhaMZ/_ssgManifest.js",
|
|
12
|
+
"static/R_nPUtDcDp1BPV3QHhaMZ/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/2hz8yws_wswjz.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2hz8yws_wswjz.js"/><script src="/_next/static/chunks/3knqujtrdi225.js" async=""></script><script src="/_next/static/chunks/0lzisjsmhlhjf.js" async=""></script><script src="/_next/static/chunks/41rcj9-d-7p_4.js" async=""></script><script src="/_next/static/chunks/2ewacyhp73due.js" async=""></script><script src="/_next/static/chunks/turbopack-3-ry682tkyiqk.js" async=""></script><script src="/_next/static/chunks/0umf92h1sb77c.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2hz8yws_wswjz.js","static/chunks/3knqujtrdi225.js","static/chunks/0lzisjsmhlhjf.js","static/chunks/41rcj9-d-7p_4.js","static/chunks/2ewacyhp73due.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2hz8yws_wswjz.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/0umf92h1sb77c.js\"\n3:I[39756,[\"$2\"],\"default\"]\n4:I[37457,[\"$2\"],\"default\"]\n7:I[97367,[\"$2\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:\"ViewportBoundary\"\nb:I[97367,[\"$2\"],\"$a\"]\nd:\"MetadataBoundary\"\ne:I[97367,[\"$2\"],\"$d\"]\n10:I[68027,[\"$2\"],\"default\",1]\n5:X\n"])</script><script>self.__next_f.push([1,"6:[[\"children\",{\"s\":\"__PAGE__\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],\"p\":false,\"v\":null}}]]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$5\"},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"$Le\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/2hz8yws_wswjz.js"/><script src="/_next/static/chunks/3knqujtrdi225.js" async=""></script><script src="/_next/static/chunks/0lzisjsmhlhjf.js" async=""></script><script src="/_next/static/chunks/41rcj9-d-7p_4.js" async=""></script><script src="/_next/static/chunks/2ewacyhp73due.js" async=""></script><script src="/_next/static/chunks/turbopack-3-ry682tkyiqk.js" async=""></script><script src="/_next/static/chunks/0umf92h1sb77c.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/2hz8yws_wswjz.js","static/chunks/3knqujtrdi225.js","static/chunks/0lzisjsmhlhjf.js","static/chunks/41rcj9-d-7p_4.js","static/chunks/2ewacyhp73due.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/2hz8yws_wswjz.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/0umf92h1sb77c.js\"\n3:I[39756,[\"$2\"],\"default\"]\n4:I[37457,[\"$2\"],\"default\"]\n7:I[97367,[\"$2\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\na:\"ViewportBoundary\"\nb:I[97367,[\"$2\"],\"$a\"]\nd:\"MetadataBoundary\"\ne:I[97367,[\"$2\"],\"$d\"]\n10:I[68027,[\"$2\"],\"default\",1]\n5:X\n"])</script><script>self.__next_f.push([1,"6:[[\"children\",{\"s\":\"__PAGE__\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],\"p\":false,\"v\":null}}]]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$5\"},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"$Le\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"R_nPUtDcDp1BPV3QHhaMZ\"}\n"])</script><script>self.__next_f.push([1,"5:C\nc:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"9:null\nf:[]\n"])</script></body></html>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"previewModeId": "
|
|
3
|
-
"previewModeSigningKey": "
|
|
4
|
-
"previewModeEncryptionKey": "
|
|
2
|
+
"previewModeId": "ff4ecf284d8a94860c9e0d7b5f922494",
|
|
3
|
+
"previewModeSigningKey": "e4d050d27bc29e8741f76ba8688a64a0f0017438aa5c06808d06436fae44e56c",
|
|
4
|
+
"previewModeEncryptionKey": "cceffbfae1873c39f987e656ee3518d6947b4ff80fe7ee7f578a981d60786061"
|
|
5
5
|
}
|